构建可从外部应用调用的 R 服务器 REST API 所需的建议?



我看过很多关于从其他RESTful API服务中使用R中的数据的文章,但我真的很难找到任何关于相反的文章。我感兴趣的是R是服务器,而不是客户端。我想要一个Node.js应用程序来调用R服务器的RESTful API,这样我就可以利用特定的分析功能,如多因素预测。有人有什么想法吗?

您可以使用httpuv启动基本服务器,然后处理GET/POST请求。以下内容本身不是"REST",但它应该提供基本框架:

library(httpuv)
library(RCurl)
library(httr)
app <- list(call=function(req) {
query <- req$QUERY_STRING
qs <- httr:::parse_query(gsub("^\?", "", query))
status <- 200L
headers <- list('Content-Type' = 'text/html')
if (!is.character(query) || identical(query, "")) {
body <- "rn<html><body></body></html>"
} else {
body <- sprintf("rn<html><body>a=%s</body></html>", qs$a)
}
ret <- list(status=status,
headers=headers,
body=body)
return(ret)
})
message("Starting server...")
server <- startServer("127.0.0.1", 8000, app=app)
on.exit(stopServer(server))
while(TRUE) {
service()
Sys.sleep(0.001)
}
stopServer(server)

我有httrRCurl包,因为您可能最终需要使用两者的一些位来解析/format/etc请求&响应。

node rio提供了一种从node.js与rserve(一个允许使用R函数的TCP/IP服务器)对话的方式。

下面是一个使用示例(来自文档):

var rio = require('rio');
rio.evaluate("as.character('Hello World')");

最新更新