有没有办法使用 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()
  ...
}