使水管工 API 在互联网上可用
Making plumber API available over internet
我对 R 中的 plumber 包相当陌生。我在我的机器上本地有一个工作 API 到 运行,我可以从 Web 上的实时 JS 应用程序访问它代码:
r <- plumb("my_api_code.r")
r$run(host = "0.0.0.0", port = 8000)
我读到在我的个人笔记本电脑上托管 r 代码不是一个好主意,但我只是想 运行 上面的代码,打开一个 R 服务器会话,然后然后从另一台机器通过 Internet 访问它以进行演示。
有没有办法根据运行R 会话机器的 IP 地址通过互联网访问此 api?我找不到可用的 r$run
r$host
r$serve
函数的文档。
给你它应该工作得很好
- 知道你笔记本电脑的IP
- 其他人(在您的团队中)可以访问该 ip,即您在同一网络上,或者您的计算机具有全球有效的 ip
- 没有防火墙阻止端口 8000
- CORS 由
之类的东西启用
#' @filter cors
cors <- function(req, res) {
res$setHeader("Access-Control-Allow-Origin", "*")
plumber::forward()
}
显然,这不是生产环境的答案,但仅适用于 showcasing/testing。
你可以试试这个
此 plot/API 可通过互联网获得
plumbr.R
#' @get /plotly
#' @serializer htmlwidget
plotlygraph <- function(){
library(plumber)
library(plotly)
Animals <- c("giraffes", "orangutans", "monkeys")
SF_Zoo <- c(20, 14, 23)
LA_Zoo <- c(12, 18, 29)
data <- data.frame(Animals, SF_Zoo, LA_Zoo)
p <- plot_ly(data, x = ~Animals, y = ~SF_Zoo, type = 'bar', name = 'SF Zoo') %>%
add_trace(y = ~LA_Zoo, name = 'LA Zoo') %>%
layout(yaxis = list(title = 'Count'), barmode = 'group')
return(p)
}
运行 以上代码在 R 控制台上使用以下命令
r <- plumber::plumb("plumbr.R")
r$run(host="0.0.0.0", port=8000)
在运行这个之后
Swagger window 将打开
有按钮 "Get/Plotly" 单击此然后单击 "试用" 单击 "执行"
等几秒
第 1 步:
https://i.stack.imgur.com/mEcg4.png
第 2 步:
https://i.stack.imgur.com/EapIw.png
第 3 步:
https://i.stack.imgur.com/h74C6.png
第 4 步:
[https://i.stack.imgur.com/9CkGc.png][4]
然后它显示 HTML 代码
在此之上,它给出了这样的请求 URL
复制 link 粘贴到浏览器中你会看到剧情
然后使用 terminal/command 提示获取您的 IP...
假设你的IP是"192.168.10.04"
复制并替换为:-
http://192.168.10.04:8000/plotly
然后复制 link 并将其粘贴到另一个网络应用程序的 IFRAME
您将在新框架(网络应用程序)上看到您的 R Plot...
我想这应该对你有帮助
我对 R 中的 plumber 包相当陌生。我在我的机器上本地有一个工作 API 到 运行,我可以从 Web 上的实时 JS 应用程序访问它代码:
r <- plumb("my_api_code.r")
r$run(host = "0.0.0.0", port = 8000)
我读到在我的个人笔记本电脑上托管 r 代码不是一个好主意,但我只是想 运行 上面的代码,打开一个 R 服务器会话,然后然后从另一台机器通过 Internet 访问它以进行演示。
有没有办法根据运行R 会话机器的 IP 地址通过互联网访问此 api?我找不到可用的 r$run
r$host
r$serve
函数的文档。
给你它应该工作得很好
- 知道你笔记本电脑的IP
- 其他人(在您的团队中)可以访问该 ip,即您在同一网络上,或者您的计算机具有全球有效的 ip
- 没有防火墙阻止端口 8000
- CORS 由 之类的东西启用
#' @filter cors
cors <- function(req, res) {
res$setHeader("Access-Control-Allow-Origin", "*")
plumber::forward()
}
显然,这不是生产环境的答案,但仅适用于 showcasing/testing。
你可以试试这个 此 plot/API 可通过互联网获得
plumbr.R
#' @get /plotly
#' @serializer htmlwidget
plotlygraph <- function(){
library(plumber)
library(plotly)
Animals <- c("giraffes", "orangutans", "monkeys")
SF_Zoo <- c(20, 14, 23)
LA_Zoo <- c(12, 18, 29)
data <- data.frame(Animals, SF_Zoo, LA_Zoo)
p <- plot_ly(data, x = ~Animals, y = ~SF_Zoo, type = 'bar', name = 'SF Zoo') %>%
add_trace(y = ~LA_Zoo, name = 'LA Zoo') %>%
layout(yaxis = list(title = 'Count'), barmode = 'group')
return(p)
}
运行 以上代码在 R 控制台上使用以下命令
r <- plumber::plumb("plumbr.R")
r$run(host="0.0.0.0", port=8000)
在运行这个之后 Swagger window 将打开 有按钮 "Get/Plotly" 单击此然后单击 "试用" 单击 "执行" 等几秒
第 1 步:
https://i.stack.imgur.com/mEcg4.png
第 2 步:
https://i.stack.imgur.com/EapIw.png
第 3 步:
https://i.stack.imgur.com/h74C6.png
第 4 步:
[https://i.stack.imgur.com/9CkGc.png][4]
然后它显示 HTML 代码 在此之上,它给出了这样的请求 URL
复制 link 粘贴到浏览器中你会看到剧情
然后使用 terminal/command 提示获取您的 IP...
假设你的IP是"192.168.10.04"
复制并替换为:-
http://192.168.10.04:8000/plotly
然后复制 link 并将其粘贴到另一个网络应用程序的 IFRAME
您将在新框架(网络应用程序)上看到您的 R Plot...
我想这应该对你有帮助