Plumber API 是什么?

Plumber API 是什么?

RStudio 去年年底推出的新包plumber,可以把 r 代码转变成 API 请求。前一段时间我尝试学习了这个包,对这个包有了入门级的认识,后来因为发现如果你想把自己写的 Plumber API 部署,你需要购买 RStudio 公司的付费服务:RStudio Connect,显然我是买不起的。但是了解一下还是不错的,蛮有意思的一个 R 包。

首先我们使用 RStudio 新建一个 Plumber API,会自动生成一段示例代码:

R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#
# This is a Plumber API. You can run the API by clicking
# the 'Run API' button above.
#
# Find out more about building APIs with Plumber here:
#
# https://www.rplumber.io/
#

library(plumber)

#* @apiTitle Plumber Example API

#* Echo back the input
#* @param msg The message to echo
#* @get /echo
function(msg = "") {
list(msg = paste0("The message is: '", msg, "'"))
}

#* Plot a histogram
#* @png
#* @get /plot
function() {
rand <- rnorm(100)
hist(rand)
}

#* Return the sum of two numbers
#* @param a The first number to add
#* @param b The second number to add
#* @post /sum
function(a, b) {
as.numeric(a) + as.numeric(b)
}

这里展示了三个函数,第一个函数是文本输出,第二个函数是图片生成,第三个是加法函数,我们运行一下这个 Plumner API。

首先看第一个文本输出的:

这里可以把第一个函数变成一个 curl 请求:

Shell
1
curl -X GET "http://127.0.0.1:7307/echo?msg=czxa" -H  "accept: application/json"

czxa是我输入的参数,返回的结果是:

Shell
1
2
3
4
5
{
"msg": [
"The message is: 'czxa'"
]
}

再在终端试一下:

Shell
1
2
$ curl -X GET "http://127.0.0.1:7307/echo?msg=czxa" -H  "accept: application/json"
{"msg":["The message is: 'czxa'"]}

接下来尝试第二个 API:

curl 请求是:

Shell
1
curl -X GET "http://127.0.0.1:7307/plot" -H  "accept: application/json"

在终端运行一下:

Shell
1
2
3
4
5
$ curl -X GET "http://127.0.0.1:7307/plot" -H  "accept: application/json" -o plumberpng.png

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15175 100 15175 0 0 435k 0 --:--:-- --:--:-- --:--:-- 435k

然后就能得到这幅直方图了:

最后这个加法函数:

同样在终端测试一下:

Shell
1
2
3
$ curl -X POST "http://127.0.0.1:7307/sum?b=100&a=200" -H  "accept: application/json"

[300]

我再自己写个绘图函数:

R
1
2
3
4
5
6
7
8
#* 返回mtcars的相关系数图
#* @get /corr
#* @png
function(){
require(corrplot)
M <- cor(mtcars)
corrplot(M, order = "hclust", addrect = 2)
}

确实挺有趣呢!以后有需要再慢慢学习参考文档吧,另外希望今年双十一能入手一台服务器研究研究。

# R

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×