Создание RESTful API с использованием R
Я подумываю о создании RESTful API с использованием языка программирования R, в основном для того, чтобы разоблачить модель машинного обучения для пользователя в формате API.
Я знаю, что есть некоторые опции, такие как экспорт в PMML, PFA и использование других языков для ухода за частью API. Тем не менее, я хочу придерживаться одного и того же языка программирования и задавался вопросом, есть ли что-то вроде флеш /Django/Springbook framework в R?
Я взглянул на servr/shiny но я действительно не думаю, что RESTful - это то, для чего они предназначены. Есть ли лучшее решение в R, которое проще в использовании?
Ответы
Ответ 1
У меня есть два варианта для вас:
plumber позволяет вам создать REST API, украсив ваш существующий источник R код со специальными комментариями.
Маленький файл примера:
# myfile.R
#* @get /mean
normalMean <- function(samples=10){
data <- rnorm(samples)
mean(data)
}
#* @post /sum
addTwo <- function(a, b){
as.numeric(a) + as.numeric(b)
}
В командной строке R:
> library(plumber)
> r <- plumb("myfile.R") # Where 'myfile.R' is the location of the file shown above
> r$run(port=8000)
С этим вы получите результаты следующим образом:
$ curl "http://localhost:8000/mean"
[-0.254]
$ curl "http://localhost:8000/mean?samples=10000"
[-0.0038]
Jug - это небольшая структура веб-разработки для R, которая в значительной степени зависит от пакет httpuv. Его основное внимание уделяется созданию API-интерфейсов зданий для вашего кода как можно проще. Он не должен быть либо особенно для исполнителей и стабильной веб-структуры. Другие инструменты (и языки) могут быть более подходящими для этого. Его основное внимание уделяется легко разрешить создание API для вашего R-кода. Однако гибкость Jug означает, что теоретически вы могли бы построить обширную веб-каркас с ним.
Это очень легко узнать и имеет приятную виньетку.
Пример Hello-World:
library(jug)
jug() %>%
get("/", function(req, res, err){
"Hello World!"
}) %>%
simple_error_handler_json() %>%
serve_it()
Ответ 2
Это для тех, кто хочет сравнить разработку API с R - plumber, Rserve и rApache.
По существу, параллельные запросы ставятся в очередь в httpuv
в plumber
, так что они не выполняются сами по себе. Автор рекомендует несколько док-контейнеров, но они могут быть сложными и ресурсоемкими.
Есть и другие технологии, например, Rserve
и rApache
. Rserve
разветвляется, и можно настроить rApache
на предварительный форк для обработки одновременных запросов.
Смотрите следующие посты для сравнения
https://www.linkedin.com/pulse/api-development-r-part-i-jaehyeon-kim/
https://www.linkedin.com/pulse/api-development-r-part-ii-jaehyeon-kim/
Ответ 3
Добавление opencpu к этому списку ответов:
Проверьте OpenCPU от Jeroen Ooms.
Выгоды:
-
Просто и понятно: любой пакет R, установленный на сервере opencpu, можно вызвать через http.
-
Просто сконцентрируйтесь на создании пакета R, а остальное позаботится opencpu.
-
Вы можете вернуть реляционную таблицу результатов, график, одиночное значение или даже указатель (или временный ключ сеанса) на объект R [представьте огромный объект/набор данных, который вы можете обрабатывать/манипулировать с другой, более ограниченной платформы;)]
-
CI/CD с вашим пакетом размещен на Github.
-
Если вы используете серверную версию, opencpu является параллельной и асинхронной по своей конструкции благодаря использованию Nginx для кэширования и балансировки нагрузки.
-
Используйте AppArmor для обеспечения безопасности в Ubuntu. Или, если вы используете fedora, вы можете настроить публично-частную аутентификацию сертификата, благодаря серверу Apache на сервере. Благодаря rApache!
-
Вышеперечисленное слишком сложно: вы также можете запустить однопользовательский сеанс на вашем локальном компьютере с помощью opencpu::ocpu_start_app()
и обслуживать ваши функции (недостатком является безопасность)
-
Нужен пользовательский интерфейс? Просто создайте пользовательский интерфейс, используя javascript, сохраните его в папке www пакета R, и пользователь сможет открыть его в своем веб-браузере и использовать ваши функции.
Этот пост не делает opencpu справедливым. Я очень рекомендую вам прочитать его ссылки в верхней части OpenCPU
Начните игру с https://cloud.opencpu.org/ocpu/test или https://www.opencpu.org/apps.html.