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

Mar*_*ark 18 r node.js rapache opencpu shiny

我已经看过很多关于从其他RESTful API服务中使用R来消费数据的文章,但我真的很难找到有关反向的任何文章.我对R是服务器感兴趣,而不是客户端.我想要一个Node.js应用程序来调用R服务器的RESTful API,这样我就可以利用特定的分析功能,例如多季节性预测.有人有主意吗?

hrb*_*str 21

您可以使用httpuv启动基本服务器然后处理GET/ POSTrequests.以下不是"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 <- "\r\n<html><body></body></html>"
  } else {
    body <- sprintf("\r\n<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)
Run Code Online (Sandbox Code Playgroud)

我有httrRCurl那里的包,因为你可能最终需要使用两者中的一些来解析/格式化/ etc请求和响应.


Chr*_*den 6

node-rio提供了一种与node.js的rserve(允许使用R函数的TCP/IP服务器)通信的方法.

以下是使用示例(来自文档):

var rio = require('rio');
rio.evaluate("as.character('Hello World')");
Run Code Online (Sandbox Code Playgroud)