将R作为带参数的Web服务调用并加载JSON?

时间:2015-05-09 14:38:33

标签: json r web-services shiny

我对R很新。我想要做的是能够从另一个应用程序(Java)加载一个URL,该应用程序将运行R脚本并输出JSON,以便我的应用程序可以使用它。

我知道有一些像shiny这样的框架作为R的Web服务器,但是我找不到关于如何通过URL传递参数的框架的文档,所以R可以使用它们。

理想情况下,我需要调用以下网址:

http://127.0.0.1/R/param1/param2

该网址会调用一个R脚本,该脚本将使用param1param2来执行某些功能并返回JSON,然后我会从我的应用中读取。

3 个答案:

答案 0 :(得分:5)

如果您还没有这样做,请结帐[DeployR]。您也可以将问题发布到 DeployR Google Group 以寻求帮助。

如需完整披露,我是 DeployR

的作者之一

<强>概述

DeployR是一种集成技术,用于在Web,桌面,移动和仪表板应用程序以及后端系统中部署R分析。 DeployR将您的R脚本转换为分析Web服务,因此运行在安全服务器上的应用程序可以轻松执行R代码。

使用分析Web服务,DeployR还解决了那些采用基于R的分析以及现有IT基础架构的人所面临的关键集成问题。这些服务使应用程序开发人员可以轻松地与数据科学家协作,将R分析集成到他们的应用程序中,而无需任何R编程知识。

DeployR有两个版本: DeployR Open DeployR Enterprise DeployR Open是一个免费的开源解决方案,非常适合原型设计,构建和部署非关键业务应用程序。 DeployR Enterprise 可扩展业务关键型应用程序,并提供对生产级工作负载的支持,以及与流行的企业安全解决方案(如单点登录(SSO),轻量级目录访问协议(LDAP))的无缝集成),Active Directory或可插入的身份验证模块(PAM)。

  

我对R

很新

级长。 DeployR适用于Data Scientist以及可能不了解R的应用程序开发人员。

  

我要做的是能够从其他应用程序加载URL   (Java)将运行R脚本并输出JSON,以便我的应用程序可以使用它。

DeployR这样做很好。帮助您的应用程序之间的通信 和DeployR服务器(将执行你的R)有DeployR Client libraries

根据您的需求,DeployR拥有开箱即用的客户端库&#39;支持:

DeployR还支持RBroker Framework

如果您的用例或运行时预计会出现大量工作负载或需要定期,计划或批处理。

  

据我所知,有一些像闪亮的框架作为网络服务器   R,但是我找不到关于如何传递参数的框架的文档   通过URL,所以R可以使用它们

DeployR通过其APIS充当您的分析引擎。基本上认为它是 将您的R脚本转换为安全的分析Web服务,就像任何一样 其他网络服务。

传递参数

将参数传递给DeployR中的R脚本很容易,但是您必须了解您是使用非R语言将参数传递给R脚本。因此,有一些数据编码&#39 ;这需要做。例如,将Java String转换为R character或将Java布尔值转换为R logical ... DeployR Client库或RBroker使这很容易。

听起来您正在使用Java,所以首先查看Java教程 java-example-client-basics https://github.com/deployr/java-example-rbroker-basics,为您提供一些上下文,然后查看 java-example-client-data-io https://github.com/deployr/java-example-client-data-io。 示例源完全可用,因此应该为您提供所需的一切 为了了解如何从应用程序到DeployR服务器进行基本I / O以进行R分析。

  

理想情况下,我需要调用以下网址:   http://127.0.0.1/R/param1/param2

如上所述,我建议您使用 DeployR客户端库进行通信,它就是这样做的。

始终向 DeployR Google群组 https://groups.google.com/forum/#!forum/deployr发送问题以寻求帮助。

答案 1 :(得分:3)

你有一些选择可以做到这一点,恕我直言OpenCPU是一个不错的选择。

它是实现Web服务器以提供R计算作为REST服务的最简单的开源方式。

OpenCPU的创建者是jsonlite包的同一作者,您可以轻松地使用OpenCPU获取并传递json参数,如您所见here

答案 2 :(得分:2)

在R中实现REST API Web服务的另一种方法是plumber包(以前称为剑杆)。它在特殊注释中使用功能装饰方法:

# myfile.R

#* @get /mean
normalMean <- function(samples=10){
    data <- rnorm(samples)
    mean(data)
}

# service.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"