我正在考虑使用编程语言R构建一个 API,主要是以API格式向用户公开我的机器学习模型。我知道有一些选项,比如导出到PMML、PFA和使用其他语言来处理API部分。但是,我想坚持使用同一种编程语言,并想知道在R中是否有类似于Flask/Django/Springbook的框架?
我看了一下伺服器/发亮,但我真的不认为RESTful是为其设计的。在R中是否有更好的解决方案更易于使用?
发布于 2017-04-13 13:08:47
我有两种选择:
水管工
水管工允许您通过用特殊的注释装饰现有的R源代码来创建REST。
一个小的示例文件:
# 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是一个小型的web开发框架,它严重依赖于httpuv包。它的主要重点是使构建API为您的代码尽可能容易。它既不应该是一个特别的执行者,也不应该是一个稳定的web框架。其他工具(和语言)可能更适合这一点。它的主要重点是轻松地允许您为您的R代码创建API。然而,Jug的灵活性意味着,在理论上,您可以用它构建一个广泛的web框架。
它非常容易学习,并有一个漂亮的小插曲。
你好-世界-例子:
library(jug)
jug() %>%
get("/", function(req, res, err){
"Hello World!"
}) %>%
simple_error_handler_json() %>%
serve_it()发布于 2017-12-07 19:08:45
这是为那些谁想有一个与R-水管工,Rserve和rApache的API开发比较。
基本上,并发请求是由httpuv在plumber中排队的,这样它本身就不能执行。作者建议使用多个码头集装箱,但它既复杂又需要资源。
还有其他技术,如Rserve和rApache。Rserve对程序进行分叉,可以将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/
发布于 2018-04-27 10:12:42
将露天铺添加到此答案列表中:
请看Jeroen的OpenCPU。
好处:
opencpu::ocpu_start_app()在本地机器上启动单个用户会话,并为您的函数服务(缺点是安全性)这篇文章不公正。我真的建议你在OpenCPU顶部读他的链接
与https://cloud.opencpu.org/ocpu/test或https://www.opencpu.org/apps.html玩一玩
https://stackoverflow.com/questions/38079580
复制相似问题