我正在使用管道工包為隨機森林模型部署創建 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
}
]
可能是什么問題?我該如何解決?
非常感謝你。
uj5u.com熱心網友回復:
根據Plumber 的更新日志,從 Plumber 1.1.0 開始:
[the] 實驗性選項 plumber.methodNotAllowed [...](默認啟用)允許在請求有效路由時使用無效方法回傳 405 狀態。
我看到您剛剛將該@post方法添加到您的/predict/value端點。很可能您正在使用 Postmann 的 GET 方法呼叫 API。這將回傳您指定的錯誤。
您可以通過以下任一方式解決此問題:
- 使用 Postman 的 POST 方法呼叫 API,或
- 添加
@get /predict/values到您的預測功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393452.html
上一篇:Rshiny:y軸基于barplot的selectinput但具有固定的x軸
下一篇:用位置串列中的索引替換向量元素
