Проверка скручивания Model Plumber API с помощью JSON / DF

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

#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 напрямую в запрос curl API и получить ответ по сравнению с ручным копированием json / или определением входных данных API с каждой переменной один за другим. Такой метод невозможен с сотнями переменных.

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


person Learner_seeker    schedule 16.04.2020    source источник


Ответы (1)


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

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

{
  "input_json" : _insert toJSON results here_
}

Так что сантехник может превратить это в именованный список и сопоставить input_json с параметром вашей функции.

person Bruno Tremblay    schedule 05.05.2020