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

Calling R as a web service with parameters and load a JSON?

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

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

理想情况下,我需要调用一个 URL,例如:

http://127.0.0.1/R/param1/param2

并且 URL 将调用一个 R 脚本,该脚本将使用 param1param2 来执行一些功能,而 return 我将使用 JSON然后从我的应用程序中读取。

你有一些选择,恕我直言 OpenCPU 是个不错的选择。

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

OpenCPU 的创建者与 jsonlite package, and you can easily get and pass json parameters with OpenCPU, as you can see here 的作者相同。

如果您还没有这样做,请查看 [DeployR]。您也可以 post 问题到 DeployR Google 组 寻求帮助。

为了完整披露,我是 DeployR

的作者之一

概览

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

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

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

I am pretty new with R

知府。 DeployR 适用于数据科学家以及可能不了解 R 的应用程序开发人员。

What I am trying to do is to be able to load a URL from another application (Java) which will run an R script and output a JSON so my application can work with it.

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

根据您的需要,DeployR 在以下方面具有开箱即用的 'client library' 支持:

DeployR 还支持 RBroker Framework

您的用例或运行时是否应该预期大量工作负载或需要定期、计划或批处理。

I understand there are some frameworks like shiny which act as web servers for R, but I can't find documentation on those frameworks on how to pass parameters via the URL so R can use them

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

传递参数

在 DeployR 中将参数传递给 R 脚本很容易,但是您必须了解您是从非 R 语言将参数传递给 R 脚本。因此,有一些 'Data Encoding'需要完成。例如,将您的 Java 字符串转换为 R character 或将您的 Java 布尔值转换为 R logical... DeployR 客户端库或 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 下的许多 Java 示例。 示例源完全可用,因此应该可以为您提供所需的一切 为了了解如何从您的应用程序到 DeployR 服务器进行基本 I/O 以进行 R 分析。

Ideally I will need to call a URL like: http://127.0.0.1/R/param1/param2

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

一如既往 post 向 DeployR Google 组 https://groups.google.com/forum/#!forum/deployr 提问寻求帮助。

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

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