使用R构建RESTful API

B.M*_*.W. 28 api rest r plumber

我正在考虑使用编程语言R构建RESTful API ,主要是以API格式向用户公开我的机器学习模型.我知道有一些选项可以导出到PMML,PFA并使用其他语言来处理API部分.但是,我想坚持使用相同的编程语言,并想知道R中是否有类似Flask/Django/Springbook框架的东西?

我看了一下servr/shiny,但我真的不认为RESTful是他们的设计目标.R中有更好的解决方案,更容易使用吗?

nnn*_*nnn 31

我有两种选择:

水管工人

管道工允许您通过使用特殊注释装饰现有R源代码来创建REST API.

一个小示例文件:

# 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)
}
Run Code Online (Sandbox Code Playgroud)

从R命令行:

> library(plumber)
> r <- plumb("myfile.R")  # Where 'myfile.R' is the location of the file shown above
> r$run(port=8000)
Run Code Online (Sandbox Code Playgroud)

有了这个你会得到这样的结果:

$ curl "http://localhost:8000/mean"
 [-0.254]
$ curl "http://localhost:8000/mean?samples=10000"
 [-0.0038]
Run Code Online (Sandbox Code Playgroud)

坛子

Jug是R的一个小型Web开发框架,它在很大程度上依赖于httpuv包.它的主要重点是使代码的构建API尽可能简单.它不应该是一个特别高效的网站框架.其他工具(和语言)可能更适合这种情况.它的主要重点是轻松地为您的R代码创建API.但是,Jug的灵活性意味着,理论上,您可以使用它构建一个广泛的Web框架.

这很容易学习,并有一个很好的小插图.

一个Hello-World示例:

library(jug)

jug() %>%
  get("/", function(req, res, err){
    "Hello World!"
  }) %>%
  simple_error_handler_json() %>%
  serve_it()
Run Code Online (Sandbox Code Playgroud)


Jae*_*Kim 5

这是针对那些想与R-水管工,Rserve和rApache进行API开发比较的人。

基本上,并发请求由httpuvin 排队,plumber因此它本身不能执行。作者建议使用多个docker容器,但它可能很复杂,而且资源需求很大。

还有其他技术,例如RserverApacheRserve分叉过程,可以配置rApache为预分叉,以便处理并发请求。

请参阅以下帖子进行比较

https://www.linkedin.com/pulse/api-development-r-part-i-jaehyeon-kim/ https://www.linkedin.com/pulse/api-development-r-part-ii-jaehyeon-金/


chi*_*n12 5

添加答案列表中:

请查看Jeroen Ooms 的OpenCPU

好处:

  1. 简单明了:安装在 opencpu 服务器上的任何 R 包都可以通过 http 调用。

  2. 只需专注于创建 R 包,opencpu 将负责其余的工作。

  3. 您可以将结果关系表绘图单个值甚至是指向R 对象的指针(又名临时会话密钥)返回[想象一个巨大的对象/数据集,您可以从其他更有限的平台处理/操作;)]

  4. 带有托管在 Github 上的包的CI/CD

  5. 如果您使用的是服务器版本,则通过利用 Nginx 进行缓存和负载平衡,opencpu 在设计上是并发和异步的。

  6. 使用 AppArmor在 Ubuntu上强制执行安全性。或者,如果您使用 Fedora,您可以设置公私证书身份验证,这要归功于后端的 Apache 服务器。感谢 rApache!

  7. 以上太复杂了:您还可以在本地计算机上启动单个用户会话并使用opencpu::ocpu_start_app()您的功能(缺点是安全性)

  8. 需要用户界面?只需使用 javascript 创建一个 UI,将其存储在 R 包的 www 文件夹中,用户就可以在他们的 Web 浏览器上打开它并使用您的功能。

这篇文章没有做 opencpu 正义。我真的建议您阅读他在OpenCPU顶部的链接

玩转https://cloud.opencpu.org/ocpu/testhttps://www.opencpu.org/apps.html