【发布时间】:2022-01-25 05:33:00
【问题描述】:
我正在使用管道工包为随机森林模型部署创建一个 API。
但是,我总是收到以下错误,这可能与数据加载有关:
"error": "405 - Method Not Allowed"
在下面,我附上了我的代码的可重现示例,其中包含一个更简单的模型。错误是一样的。
library(plumber)
library(tidyverse)
library(jsonlite)
library(plumber)
set.seed(1234)
df <- tibble(x1 = rnorm(10),
x2 = rnorm(10),
epsilon = rnorm(10, mean = 0, sd = 1)) %>%
mutate(y = x1 + 3*x2 + epsilon)%>%
select(y, x1, x2)
lm_model <- caret::train(y ~.,
data = df,
method = "lm")
#* Health Check - Is the API running?
#* @get /health-check
status <- function() {
list(status = "All Good!",
time = Sys.time())
}
#* Log some information about the incoming request
#* @filter logger
function(req){
cat(as.character(Sys.time()), "-",
req$REQUEST_METHOD, req$PATH_INFO, "-",
req$HTTP_USER_AGENT, "@", req$REMOTE_ADDR, "\n")
forward()
}
#> function(req){
#> cat(as.character(Sys.time()), "-",
#> req$REQUEST_METHOD, req$PATH_INFO, "-",
#> req$HTTP_USER_AGENT, "@", req$REMOTE_ADDR, "\n")
#>
#> forward()
#> }
#* Predict y
#* @filter /predict
function(req, res){
if(grepl("predict", req$PATH_INFO)){
req$predict_data <- tryCatch(jsonlite::fromJSON(req$postBody) %>%
as.data.frame(),
error = function(x){
return(NULL)
})
if(is.null(req$predict_data)){
res$status <- 400
return(
list(error = "No JSON file is found in the request")
)
}
req$predicted_values <- predict(lm_model, req$predict_data)
}
forward()
}
#> function(req, res){
#> if(grepl("predict", req$PATH_INFO)){
#> req$predict_data <- tryCatch(jsonlite::fromJSON(req$postBody) %>%
#> as.data.frame(),
#> error = function(x){
#> return(NULL)
#> })
#>
#> if(is.null(req$predict_data)){
#> res$status <- 400
#> return(
#> list(error = "No JSON file is found in the request")
#> )
#> }
#> req$predicted_values <- predict(lm_model, req$predict_data)
#> }
#> forward()
#> }
#* Predict y for given data
#* @post /predict/values
function(req){
y <- as.numeric(req$predicted_values)
return(y)
}
#> function(req){
#> y <- as.numeric(req$predicted_values)
#> return(y)
#>
#> }
我通过 Postman 使用 API。我以 JSON 格式发送我的请求,您可以在下面找到一个示例。我尝试更改格式,但没有成功。当我不提交任何数据时,API 工作。运行状况检查 API 也可以正常工作。
[
{
"x1" : 3,
"x2" : 5
}
]
可能是什么问题?我该如何解决?
非常感谢。
【问题讨论】:
标签: r api deployment plumber