使用R构建RESTful API

时间:2016-06-28 14:53:20

标签: r rest api plumber

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

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

4 个答案:

答案 0 :(得分:28)

我有两种选择:

plumber

  

管道工允许您通过装饰现有的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)
}

从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的一个小型Web开发框架,它在很大程度上依赖于它   httpuv包。它的主要重点是为您的构建API   代码尽可能简单。它不应该是一个   特别是高性能或非常稳定的Web框架。其他工具   (和语言)可能更适合这一点。它的主要焦点是   您可以轻松地为R代码创建API。然而   Jug的灵活性意味着,从理论上讲,你可以建立一个广泛的   带有它的网络框架。

它非常容易学习并且有nice vignette

Hello-World示例:

library(jug)

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

答案 1 :(得分:3)

这适用于那些希望与R-plumber,Rserve和rApache进行API开发比较的人。

基本上并发请求由管道工中的httpuv排队,因此它本身不具备性能。作者推荐了多个docker容器,但它既复杂又需要响应。

还有其他技术,例如Rserve和rApache。 Rserve分叉proses,可以将rApache配置为pre-fork,以便处理并发请求。

请参阅以下帖子进行比较

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

答案 2 :(得分:3)

添加到此答案列表中:

请查看Jeroen Ooms的OpenCPU

优点:

  1. 简单明了:opencpu服务器上安装的任何R软件包都可以通过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创建UI,将其存储在R包的www文件夹中,用户就可以在他们的Web浏览器上打开它并使用您的功能。

  9. 这篇文章没有做opencpu正义。我真的建议您阅读OpenCPU

    顶部的链接

    使用https://cloud.opencpu.org/ocpu/testhttps://www.opencpu.org/apps.html

    进行游戏

答案 3 :(得分:0)