【问题标题】:Calling R as a web service with parameters and load a JSON?调用 R 作为带有参数的 Web 服务并加载 JSON?
【发布时间】:2015-05-09 14:38:33
【问题描述】:

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

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

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

http://127.0.0.1/R/param1/param2

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

【问题讨论】:

  • 我不知道 R 的 rest 框架。你可能想看看 Rserve 和相关的 java 客户端
  • 看看opencpu.org
  • 谷歌“R CGI 脚本”。几个解决方案。这个rforge.net/FastRWeb 是最近维护的,来自 R 社区的一个受信任的来源。
  • 谢谢,我会调查所有提出的解决方案。

标签: json r web-services shiny


【解决方案1】:

如果您还没有这样做,请查看[DeployR]。您还可以向 DeployR Google Group 发布问题以寻求帮助。

为了全面披露,我是 DeployR

的作者之一

概述

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

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

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

我对 R 很陌生

级长。 DeployR 适用于数据科学家和可能不了解 R 的应用程序开发人员。

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

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

根据您的需要,DeployR 在以下方面提供开箱即用的“客户端库”支持:

DeployR 还支持RBroker Framework

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

我知道有一些框架,比如 Shiny,它们充当 Web 服务器 R,但我找不到关于如何传递参数的框架的文档 通过 URL,以便 R 可以使用它们

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

传递参数

在 DeployR 中将参数传递给 R 脚本很容易,但是您必须了解您是从非 R 语言将参数传递给 R 脚本。因此,需要进行一些“数据编码”完毕。例如,将您的 Java 字符串转换为 R character 或将您的 Java 布尔值转换为 R logical... DeployR Client 库或 RBroker 让这一切变得简单。

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

理想情况下,我需要调用如下 URL: http://127.0.0.1/R/param1/param2

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

一如既往地向DeployR Google Grouphttps://groups.google.com/forum/#!forum/deployr 发帖寻求帮助。

【讨论】:

  • DeployR Open 已被微软暂停。
【解决方案2】:

在 R 中实现 REST API Web 服务的另一种方法是 plumber 包(以前的 rapier)。它在特殊的 cmets 中使用函数修饰方法:

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

【讨论】:

    【解决方案3】:

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

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

    OpenCPU的创建者是jsonlite包的同一作者,用OpenCPU可以很方便的获取和传递json参数,见here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2014-10-25
      • 2016-02-03
      相关资源
      最近更新 更多