首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R构建RESTful API

使用R构建RESTful API
EN

Stack Overflow用户
提问于 2016-06-28 14:53:19
回答 3查看 18K关注 0票数 33

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

我看了一下伺服器/发亮,但我真的不认为RESTful是为其设计的。在R中是否有更好的解决方案更易于使用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-13 13:08:47

我有两种选择:

水管工

水管工允许您通过用特殊的注释装饰现有的R源代码来创建REST。

一个小的示例文件:

代码语言:javascript
复制
# 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命令行:

代码语言:javascript
复制
> library(plumber)
> r <- plumb("myfile.R")  # Where 'myfile.R' is the location of the file shown above
> r$run(port=8000)

这样你就会得到这样的结果:

代码语言:javascript
复制
$ curl "http://localhost:8000/mean"
 [-0.254]
$ curl "http://localhost:8000/mean?samples=10000"
 [-0.0038]

水罐

Jug是一个小型的web开发框架,它严重依赖于httpuv包。它的主要重点是使构建API为您的代码尽可能容易。它既不应该是一个特别的执行者,也不应该是一个稳定的web框架。其他工具(和语言)可能更适合这一点。它的主要重点是轻松地允许您为您的R代码创建API。然而,Jug的灵活性意味着,在理论上,您可以用它构建一个广泛的web框架。

它非常容易学习,并有一个漂亮的小插曲

你好-世界-例子:

代码语言:javascript
复制
library(jug)

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

Stack Overflow用户

发布于 2017-12-07 19:08:45

这是为那些谁想有一个与R-水管工,Rserve和rApache的API开发比较。

基本上,并发请求是由httpuvplumber中排队的,这样它本身就不能执行。作者建议使用多个码头集装箱,但它既复杂又需要资源。

还有其他技术,如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-kim/

票数 8
EN

Stack Overflow用户

发布于 2018-04-27 10:12:42

露天铺添加到此答案列表中:

请看Jeroen的OpenCPU

好处:

  1. 简单明了的:安装在opencpu服务器上的任何R包都可以通过http调用。
  2. 只要专注于创建R包,和opencpu就会处理剩下的部分。
  3. 您可以将一个关系表的结果()、一个绘图、一个单值甚至一个指针(也就是一个临时会话键)返回给一个R对象--设想一个巨大的对象/数据集,您可以在其他更有限的平台上处理/操作它;)
  4. CI/CD与您的包托管在Github上。
  5. 如果您使用的是服务器版本,则通过利用Nginx进行缓存和负载平衡来设计opencpu是并发的和异步的。
  6. 使用AppArmor在Ubuntu上强制执行安全。或者,如果使用fedora,则可以通过后端的Apache服务器设置公共-私有证书身份验证。多亏了rApache!
  7. 上面的太复杂了:您也可以使用opencpu::ocpu_start_app()在本地机器上启动单个用户会话,并为您的函数服务(缺点是安全性)
  8. 需要一个用户界面?只需使用javascript创建一个UI,将其存储在R包的www文件夹中,用户就可以在他们的web浏览器上打开它并使用您的功能。

这篇文章不公正。我真的建议你在OpenCPU顶部读他的链接

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38079580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档