标签: plumber

使用R构建RESTful API

我正在考虑使用编程语言R构建RESTful API ,主要是以API格式向用户公开我的机器学习模型.我知道有一些选项可以导出到PMML,PFA并使用其他语言来处理API部分.但是,我想坚持使用相同的编程语言,并想知道R中是否有类似Flask/Django/Springbook框架的东西?

我看了一下servr/shiny,但我真的不认为RESTful是他们的设计目标.R中有更好的解决方案,更容易使用吗?

api rest r plumber

28
推荐指数
3
解决办法
1万
查看次数

通过HTTPS将R管道工程用于Web API

我试图使用R中的Plumber通过Web API公开模型.我希望API调用在https上是安全的.我试图找到使用管道工实现安全API的信息,但遗憾的是没有找到任何东西.有没有人有洞经验?或者通过安全API公开R模型的任何其他解决方案?

security https r web plumber

7
推荐指数
1
解决办法
503
查看次数

我们如何通过管道工 web api 返回 ggplot 图?

我正在使用 ggplot 绘制条形图,并使用 R 中的管道工包将此函数创建为 Web api。

 library(plumber)
 library(ggplot2)
#' @get /histogram_test
#' @png
  histogram_test <- function(){
  mtcars=mtcars
  b=ggplot(mtcars,aes(mtcars$cyl))
  b+geom_bar()
}
Run Code Online (Sandbox Code Playgroud)

然后我运行:

r <- plumb("plum_api.R")
r$run(port=8000)
Run Code Online (Sandbox Code Playgroud)

但这不会在浏览器上返回绘图。

r ggplot2 asp.net-web-api plumber

6
推荐指数
1
解决办法
1677
查看次数

在 Rscript 中使用管道工包并从 cmd 运行脚本

在我的 Rscript (run.R) 中:

library(plumber)
r <- plumb("script.R")
r$run(host="127.0.0.1",port=8000)
Run Code Online (Sandbox Code Playgroud)

如果我使用 RStudio 或 R 控制台运行上面的代码,它工作正常,并在以下输出后让我访问:

启动服务器侦听端口 8000 在http://127.0.0.1:8000/ swagger /运行 swagger UI

但是当我尝试使用 Rscript, R CMD BATCH,R < run.R, pm2 运行与 .R 文件相同的代码时,它会卡住;

启动服务器监听 8000 端口

在访问地址时,我收到 404: Resource Not Found 错误。另外,请注意,我想在 Windows 上运行它,因此没有尝试更小。任何想法,我在这里做错了什么。谢谢!

command-line r plumber

6
推荐指数
1
解决办法
1365
查看次数

如何验证从 Shinyapps.io 上托管的应用程序对管道工 API 的调用?

我想构建一个具有以下架构的应用程序:

在此处输入图片说明

前端将部署在 Shinyapps.io 上,并将调用由管道工编写的 API以与数据交互。

该应用程序将是私有的,因此用户必须使用 Shinyapps.io auth 模块进行身份验证。API 将托管在云平台上。

我想知道通过向所有 HTTP 请求的标头添加密钥来验证对 API 的调用是否安全

密钥将在部署在 Shinyapps.io 和 API 服务器上的 .Renviron 文件中定义。

在发送适当的响应之前,这个管道工过滤器应该确保来自前端和来自 API 的密钥匹配。

authentication http-headers shiny plumber

6
推荐指数
1
解决办法
453
查看次数

向Shiny发送POST请求

我看到很多人问这个问题的各种版本,但我还没有找到明确的答案。

我想向 R Shiny 应用程序发送 POST 请求,以便在收到请求后,Shiny 应用程序可以呈现请求正文中的数据。例如,考虑这样一个用例:我编写了某种特殊的analyzeData(data)R 函数,某人可以在笔记本电脑上本地运行该函数。在该函数中,将有一个httr::POST将数据上传到 Shiny 服务器的请求,然后用户将弹出浏览器并看到显示在服务器上分析的数据的 UI。从某种意义上说,它有点像“上传数据”按钮的奇特版本,但它们不是从 Shiny UI 中上传数据,而是在通过函数请求打开 UI 之前完成上传。

所以流程是:

  1. 用户运行analyzeData(data)函数
  2. 该函数向 Shiny 服务器发送 POST 请求以发送数据
  3. 浏览器会为该用户弹出,以便他们可以看到 Shiny 分析的结果。

据我所知,Shiny无法以这种方式接受 POST 请求。事实上,我不确定除了通过 UI 之外还有什么方法可以让 Shiny 接受数据。这几乎就像我想让 Plumber 和 Shiny 在同一台机器上运行(Plumber 接受数据 POST 请求,Shiny 然后渲染生成的 UI),但这感觉像是过度设计。

我错过了什么吗?有没有办法让这个流程与 Shiny 直接接受 POST 请求一起工作?

post r shiny plumber

6
推荐指数
0
解决办法
738
查看次数

使用管道工包提供静态文件 - 找不到文件 (404)

我想为一个静态文件plumber的描述在这里。带有路线等的文件是server.R

#* @get /files
function()
{
  return(dir("files"))
}

#* @static ./files
list() 
Run Code Online (Sandbox Code Playgroud)

这应该使files目录在路径上可用/public。里面files有一个文件index.html。运行上面的代码:

library(plumber)
r <- plumb("server.R")
r$run()
Run Code Online (Sandbox Code Playgroud)

调用localhost:8000/files返回:

["index.html"]
Run Code Online (Sandbox Code Playgroud)

但是,调用localhost:8000/public/index.html会出现 404 错误:

{"error":["404 - Resource Not Found"]}
Run Code Online (Sandbox Code Playgroud)

打印r对象,公共路径似乎已定义:

> r
<plumber>
  Public:
    addAssets: function (dir, path = "/public", options = list()) 
    ...
Run Code Online (Sandbox Code Playgroud)

我哪里出错了?

r plumber

5
推荐指数
1
解决办法
1439
查看次数

在闪亮的应用程序中显示来自管道工 API 的 html 小部件

我正在尝试显示通过管道工 API 请求的交互式图形并将其显示在闪亮的应用程序中。我不知道如何使它工作,例如使用 highcharter。下面是我使用 api 的带有基本图和 highcharter 图的示例应用程序。

我有 api 工作,但有谁知道如何解析 htmlwidget 输入以显示?

谢谢您的帮助!

示例api,开始使用

library(plumber)
r <- plumb("api.R") 
r$run(port=8000)
Run Code Online (Sandbox Code Playgroud)

api.R

#' Plot out data from the iris dataset
#' @param spec If provided, filter the data to only this species (e.g. 'setosa')
#' @get /plot
#' @png
function(spec){
  myData <- iris
  title <- "All Species"

  # Filter if the species was specified
  if (!missing(spec)){
    title <- paste0("Only the '", spec, "' Species")
    myData <- subset(iris, Species == spec)
  } …
Run Code Online (Sandbox Code Playgroud)

r shiny plumber r-highcharter

5
推荐指数
1
解决办法
1570
查看次数

Plumber API 在服务器上工作,但在我使用 systemd 设置时不起作用

因此,如果我手动运行管道工命令,我有一个可以在本地和服务器上正常工作的 API,我的意思是在服务器中 ssh-ing 并运行:

r <- plumb("plumber.R")
r$run(port=8000, host = "0.0.0.0")
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

#* @serializer contentType list(type="application/html")
#* @get /test
function(res){

  include_rmd("test.Rmd", res)

}

#* Echo the parameter that was sent in
#* @param msg The message to echo back.
#* @get /echo
function(msg=""){
  list(msg = paste0("The message is: '", msg, "'"))
}
Run Code Online (Sandbox Code Playgroud)

他们都没有问题。但是当我使用 systemd 使它们在服务器上保持活动状态时,只有 /echo 有效。另一个只是说“发生异常”。

systemd 设置如下所示:

[Unit]
Description=Plumber API
# After=postgresql
# (or mariadb, mysql, etc if you use a DB with Plumber, otherwise leave this commented) …
Run Code Online (Sandbox Code Playgroud)

plumber

5
推荐指数
1
解决办法
738
查看次数

R/Plumber:通过 Nginx 反向代理重新路由 Swagger UI

背景

我有一个远程服务器,通过 Plumber 在该服务器上运行 R API 服务。从我可以从外部调用我的服务的意义上来说,它是完全可操作的。

我正在使用 Ubuntu/Nginx 反向代理设置。Plumber 服务正在侦听端口 1163。我随后实现了以下 Nginx 重新路由,以便 API 侦听https://server.net/API/

location /API/ {
 proxy_pass http://localhost:1163/;
 proxy_redirect http://localhost:1163/ $scheme://$host/;
}
Run Code Online (Sandbox Code Playgroud)

这工作正常。现在,默认情况下,Swagger UI 会监听

http://127.0.0.1:1163/__swagger__/
Run Code Online (Sandbox Code Playgroud)

由于上面的配置,这意味着我可以成功访问 Swagger UI

https://server.net/API/__swagger__/
Run Code Online (Sandbox Code Playgroud)

问题

我想配置 Nginx 以便 Swagger UI 监听https://server.net/API/documentation/。我尝试了以下嵌套 Nginx 配置:

location /API/ {
 proxy_pass http://localhost:1163/;
 proxy_redirect http://localhost:1163/ $scheme://$host/;

 location /API/documentation/ {
 proxy_pass http://localhost:1163/__swagger__/;
 proxy_redirect http://localhost:1163/__swagger__/ $scheme://$host/;
 }

}
Run Code Online (Sandbox Code Playgroud)

现在,在浏览器中输入所需的 URL https://server.net/API/documentation/时,我检索 Swagger 界面,但它返回以下错误代码:

招摇错误

显然,Nginx 重定向期间解析了错误的 swagger URL。考虑到 url 应该说明这一点,这一点很清楚

https://server.net/API/swagger.json?schemes=https&host=server.net&path=/API/
Run Code Online (Sandbox Code Playgroud)

代替

http://petstore.swagger.io/v2/swagger.json
Run Code Online (Sandbox Code Playgroud)

如何确保在 …

r nginx swagger plumber

5
推荐指数
0
解决办法
1390
查看次数