【发布时间】:2023-02-04 05:40:58
【问题描述】:
考虑以下使用 Plumber (R API) 的 PUT 请求示例:
example_body <- list(
a=1,
b=2,
c=3
)
#* Example PUT endpoint
#* @serializer unboxedJSON list(na = NULL)
#* @param body:object
#* @put /my_example
function(req, body = example_body) {
print(body)
print(req$body$body)
result <- body$a + body$b + body$c
return(result)
}
两个打印语句显示 body 和 req$body$body 的值相同。但是,从其他任何地方(不是 Swagger)发送请求意味着正文仅作为 req$body 访问!
一个超级肮脏的 hack 是在函数的顶部放置如下内容:
if (grepl(pattern = "/__docs__/|/__swagger__/|/openapi.json",x = req$HTTP_REFERER)) {
req$body <- req$body$body
}
但是,当您有很多端点时,这是不可取的。那么,为了解决这个问题,如何在 Swagger 中使用该示例,同时允许端点与包含正文的真实请求一起使用?
【问题讨论】: