33

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

我看了一下servr / shiny,但我真的不认为 RESTful 是它们的设计目的。R中是否有更好的解决方案更易于使用?

4

3 回答 3

37

我有两个选择:

水管工

管道工允许您通过使用特殊注释装饰现有 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 是一个小型的 R 网络开发框架,它严重依赖于 httpuv 包。它的主要重点是使为您的代码构建 API 尽可能简单。它不应该是一个特别高性能或超级稳定的 Web 框架。其他工具(和语言)可能更适合于此。它的主要重点是让您轻松地为您的 R 代码创建 API。然而,Jug 的灵活性意味着,理论上,您可以用它构建一个广泛的 Web 框架。

它很容易学习并且有一个漂亮的小插图

一个 Hello-World 示例:

library(jug)

jug() %>%
  get("/", function(req, res, err){
    "Hello World!"
  }) %>%
  simple_error_handler_json() %>%
  serve_it()
于 2017-04-13T13:08:47.160 回答
8

这适用于那些想要将 API 开发与 R -plumber、Rserve 和 rApache 进行比较的人。

基本上并发请求在队列中排队httpuvplumber因此它本身不能执行。作者推荐了多个 docker 容器,但它可能很复杂并且需要资源。

还有其他技术,例如RserverApache. Rserveforks proesses 并且可以配置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-金/

于 2017-12-07T19:08:45.120 回答
5

添加到此答案列表中:

请查看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 浏览器上打开它并使用您的功能。

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

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

于 2018-04-27T10:12:42.740 回答