使用R构建RESTful API [已关闭]

gajydyqb  于 2023-10-13  发布在  其他
关注(0)|答案(3)|浏览(94)

已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。

两年前关门了。
Improve this question
我正在考虑使用编程语言R构建一个RESTful API,主要是以API格式向用户公开我的机器学习模型。我知道有一些选项,如导出到PMML,PFA和使用其他语言来处理API部分。然而,我想坚持使用相同的编程语言,想知道R中是否有类似Flask/Django/Springbook框架的东西?
我看了一下servr/shiny,但我真的不认为RESTful是它们的设计目的。在R中有没有更好的解决方案,更容易使用?

brgchamk

brgchamk1#

我给你两个选择

plumber

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框架,也不是一个超级稳定的Web框架。其他工具(和语言)可能更适合这一点。它的主要重点是允许您轻松地为R代码创建API。然而,Jug的灵活性意味着,从理论上讲,你可以用它构建一个广泛的Web框架。
它很容易学习,并有一个nice vignette
一个Hello-World-example:

library(jug)

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

2uluyalo2#

这是为那些想要将API开发与R - plumber,Rserve和rApache进行比较的人准备的。
基本上,并发请求由httpuvplumber中排队,因此它本身并不具有性能。作者建议使用多个Docker容器,但它可能会很复杂,并且需要大量资源。
还有其他技术,如RserverApacheRserve fork进程,并且可以将rApache配置为预fork,以便处理并发请求。

roejwanj

roejwanj3#

opencpu添加到这个答案列表中:
看看Jeroen Ooms的OpenCPU
优点:
1.简单明了:任何安装在opencpu服务器上的R包都可以通过http调用。
1.只需专注于创建R包,opencpu将负责其余部分。
1.你可以返回一个结果关系表,一个单个值,甚至一个指针(也称为临时会话密钥)到一个R对象[想象一个巨大的对象/数据集,你可以从其他更有限的平台处理/操作;)的情况下]
1.CI/CD,您的包托管在Github上。
1.如果你使用的是服务器版本,opencpu是并发的,通过利用Nginx进行缓存和负载平衡来设计。
1.使用AppArmor在Ubuntu上强制执行安全。或者,如果你使用fedora,你可以设置公私证书认证,这要归功于后端的Apache服务器。感谢rApache!
1.以上内容过于复杂:您还可以使用opencpu::ocpu_start_app()在本地计算机上启动单个用户会话并提供您的功能(缺点是安全性)
1.需要用户界面?只需使用JavaScript创建一个UI,将其存储在R包的www文件夹中,用户就可以在Web浏览器上打开它并使用您的功能。
这篇文章不做opencpu正义。我真的会建议你阅读他的链接在顶部的OpenCPU
尝试使用https://cloud.opencpu.org/ocpu/testhttps://www.opencpu.org/apps.html

相关问题