Проверка на скручивание API модели Plumber с помощью JSON / DF - PullRequest
0 голосов
/ 16 апреля 2020

Я создал фиктивную модель, используя следующий код:

#get the data
data(Boston, package="MASS")

# train a model for median house price as a function of the other variables
bos_rf <- lm(medv ~ crim + indus + dis , data=Boston)

# save the model
saveRDS(bos_rf, "bos_rf.rds")

Теперь я хочу представить эту модель как API с использованием сантехника. Для этого мой код

# load as bos_rf.R

bos_rf <- readRDS("bos_rf.rds")

#* @param input_json JSON file
#* @post /score
function(input_json)
{
  temp <- toJSON(input_json, auto_unbox = T)
  data <- fromJSON(temp) %>% as.data.frame
  data = data %>% mutate_all(as.numeric)
  predict(bos_rf, data)
}

Над моим параметром стоит JSON, я действительно хочу сохранить его как фрейм данных. Я преобразую JSON в фрейм данных в функции

Затем я запускаю API, используя

# try API 1 
# 
dummy_model_api <- plumber::plumb("2_R_code_to_API.R")
dummy_model_api$run(host = '127.0.0.1', port = 8000)

API работает нормально, когда я вставляю JSON на портале Swagger, но когда я запускаю curl, используя следующие команды

$ curl "http://127.0.0.1:8000/score" -d "@test.JSON"
$ curl --data @test.json http://localhost:8000/score

Нет работы. Как мне напрямую пройти тест JSON в API, чтобы получить прогноз. Обратите внимание, что если я проверю функцию с помощью R, я получу прогноз. Пожалуйста, посоветуйте, как можно передать JSON или DF напрямую для скручивания запроса API и получить ответ против ручного копирования json / или определения входных данных API с каждой переменной по одной. Такой метод невозможен с сотнями переменных.

Как образец из этого JSON также может отражаться в теле чванства. то есть выше, когда открывается чванство, образец JSON уже находится в теле с некоторыми значениями и готов к выполнению.

1 Ответ

0 голосов
/ 05 мая 2020

сантехник выполнит fromJSON в теле запроса, если он решит, что он начинается с {.

Обычно вы отправляете строку JSON, например

{
  "input_json" : _insert toJSON results here_
}
* 1007. * Так этот сантехник может превратить это в именованный список и отобразить input_json на ваш параметр функции.
...