有没有办法使用 R Plumber 在 API 中添加可选参数?
Is there a way to add optional parameter in API using R Plumber?
我有这个路由,我正在努力让它工作:
#* @get /outcomes-aggregate/<categoryId:int>/<classId>/<perspectiveID>/<sn>
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
}
这个 api
应该接受带有可选 sn
值的请求。但是,这是行不通的。 sn
值可能存在也可能不存在,查询是基于此值的 运行。但是当我 运行 它时,我不断收到这个错误:
call: http://localhost:3982/outcomes-aggregated/1/342342
0 "404 - Resource Not Found"
仅当我还包括 sn
时才有效。
call: http://localhost:3982/outcomes-aggregated/1/342342/NULL
如何将此参数设为可选?或者我是否必须创建另一个没有此值的函数?
更新
我更新了路由和逻辑以尝试更正此问题。
#* @get /outcomes-aggregate/<categoryId:int>/<classId>/<sn>
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
if(missing(sn) || pracma::strcmp(sn, "NULL")){
query <- paste0("SELECT * FROM classes WHERE classID = '", classId, "'")
} else{
query <- paste0("SELECT * FROM classes WHERE classID = '", classId, "' and sn = '", sn , "'")
}
...
}
目前可以使用,但我仍然必须在 url 中添加 NULL
。我很想听听更好的方法。
你的路径有三个参数,你只提供了两个。当你提供第三个时它可以工作,但它没有映射到 sn。它映射到 perspectiveID。
/outcomes-aggregate/categoryId:int//
根据@BrunoTremblay 的回复,我最终将函数转换为使用查询而不是路径。这很好用。
新函数如下所示:
#* @get /outcomes-aggregate <-- remove the path
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
}
我有这个路由,我正在努力让它工作:
#* @get /outcomes-aggregate/<categoryId:int>/<classId>/<perspectiveID>/<sn>
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
}
这个 api
应该接受带有可选 sn
值的请求。但是,这是行不通的。 sn
值可能存在也可能不存在,查询是基于此值的 运行。但是当我 运行 它时,我不断收到这个错误:
call: http://localhost:3982/outcomes-aggregated/1/342342
0 "404 - Resource Not Found"
仅当我还包括 sn
时才有效。
call: http://localhost:3982/outcomes-aggregated/1/342342/NULL
如何将此参数设为可选?或者我是否必须创建另一个没有此值的函数?
更新
我更新了路由和逻辑以尝试更正此问题。
#* @get /outcomes-aggregate/<categoryId:int>/<classId>/<sn>
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
if(missing(sn) || pracma::strcmp(sn, "NULL")){
query <- paste0("SELECT * FROM classes WHERE classID = '", classId, "'")
} else{
query <- paste0("SELECT * FROM classes WHERE classID = '", classId, "' and sn = '", sn , "'")
}
...
}
目前可以使用,但我仍然必须在 url 中添加 NULL
。我很想听听更好的方法。
你的路径有三个参数,你只提供了两个。当你提供第三个时它可以工作,但它没有映射到 sn。它映射到 perspectiveID。
/outcomes-aggregate/categoryId:int//
根据@BrunoTremblay 的回复,我最终将函数转换为使用查询而不是路径。这很好用。
新函数如下所示:
#* @get /outcomes-aggregate <-- remove the path
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
}