微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一种方法可以使用R Plumber在API中添加可选参数?

如何解决有没有一种方法可以使用R Plumber在API中添加可选参数?

我正在尝试执行以下路由:

#* @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,sn=NULL){
  
  ## initialization
  query <- NULL
  data_to_send <- list()
  ...

   if(missing(sn) || pracma::strcmp(sn,"NULL")){
    query <- paste0("SELECT * FROM classes WHERE classID = '","'")
  } else{
    query <- paste0("SELECT * FROM classes WHERE classID = '","' and sn = '",sn,"'")
  }
  ...

}

目前该方法有效,但是我仍然必须在网址中添加NULL。我很想听听这样做的更好方法

解决方法

您的路径有3个参数,您只提供2个。当您提供第三个参数时,它可以工作,但未映射到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()
  ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。