Подтвердить что ты не робот

Создание RESTful API с использованием R

Я подумываю о создании RESTful API с использованием языка программирования R, в основном для того, чтобы разоблачить модель машинного обучения для пользователя в формате API. Я знаю, что есть некоторые опции, такие как экспорт в PMML, PFA и использование других языков для ухода за частью API. Тем не менее, я хочу придерживаться одного и того же языка программирования и задавался вопросом, есть ли что-то вроде флеш /Django/Springbook framework в R?

Я взглянул на servr/shiny но я действительно не думаю, что RESTful - это то, для чего они предназначены. Есть ли лучшее решение в R, которое проще в использовании?

4b9b3361

Ответ 1

У меня есть два варианта для вас:

plumber

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

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 от Jeroen Ooms.

Выгоды:

  1. Просто и понятно: любой пакет R, установленный на сервере opencpu, можно вызвать через http.

  2. Просто сконцентрируйтесь на создании пакета R, а остальное позаботится opencpu.

  3. Вы можете вернуть реляционную таблицу результатов, график, одиночное значение или даже указатель (или временный ключ сеанса) на объект R [представьте огромный объект/набор данных, который вы можете обрабатывать/манипулировать с другой, более ограниченной платформы;)]

  4. CI/CD с вашим пакетом размещен на Github.

  5. Если вы используете серверную версию, opencpu является параллельной и асинхронной по своей конструкции благодаря использованию Nginx для кэширования и балансировки нагрузки.

  6. Используйте AppArmor для обеспечения безопасности в Ubuntu. Или, если вы используете fedora, вы можете настроить публично-частную аутентификацию сертификата, благодаря серверу Apache на сервере. Благодаря rApache!

  7. Вышеперечисленное слишком сложно: вы также можете запустить однопользовательский сеанс на вашем локальном компьютере с помощью opencpu::ocpu_start_app() и обслуживать ваши функции (недостатком является безопасность)

  8. Нужен пользовательский интерфейс? Просто создайте пользовательский интерфейс, используя javascript, сохраните его в папке www пакета R, и пользователь сможет открыть его в своем веб-браузере и использовать ваши функции.

Этот пост не делает opencpu справедливым. Я очень рекомендую вам прочитать его ссылки в верхней части OpenCPU

Начните игру с https://cloud.opencpu.org/ocpu/test или https://www.opencpu.org/apps.html.