R语言 构建REST API
REST(Representational state transfer)API是一种架构风格,包括构建API的特定约束,以确保它们是一致的、高效的和可扩展的。REST API是一个语法和约束的集合,用于网络服务的开发和运行,包括通过 端点 即提供外部环境接口的URL发送和接收信息。
REST是由Roy Fielding在2000年首次提出的。REST中信息的抽象化被称为资源。REST使用一个资源标识符来识别组件之间互动的特定资源。它允许一个应用程序访问另一个服务器上的资源或功能,该服务器与该应用程序的架构和安全域相距甚远。
理论
REST使用资源方法来执行所需的转换。一个API只有在满足以下条件时才能被认为是RESTful。
- 统一的接口: 在服务器和客户端之间有一个定义明确的接口。
- 无状态: 通过请求本身而不是通过外部服务的支持来管理状态。
- 可缓存: 响应应该是可缓存的,以便提高可扩展性。
- 客户端-服务器: 客户和服务器之间有明确的分离。
- 分层系统: 客户应该不知道客户和服务器之间的中介机构。
- 按需编码: 响应可以包括客户端可执行的逻辑。
4种最重要的HTTP协议方法。
- GET: 从远程服务器检索数据,可以是单一资源或资源列表。
- POST: 在远程服务器上创建一个新的资源。*
- PUT : 更新远程服务器上的数据。
- DELETE: 从一个远程服务器上删除数据。
REST API可以用于任何语言,因为请求是基于通用的HTTP协议的。在R语言中,我们使用 httr包 和 jsonlite包来 进行GET请求,解析结果,并最终翻阅所有的数据。这需要将GET请求中的原始数据转换为JSON格式,然后再转换为经过解析的数据框架。
在R中的实现
包
Plumber包 用于创建REST API,如为分析仪表板提供数据等。它允许轻松地将R代码转换为一个端点。
# Installing the package
install.packages("plumber")
# Loading package
library(plumber)
使用包构建API
使用plumber包建立一个API。制作两个文件,一个是包含所有端点的 my_api.r ,第二个是 server.r ,通过启动服务器加载API的所有端点。
my_api.R
# Loading package
library(plumber)
#* Revert back the input
#* @param msg Input a message to revert
#* @get /revert
revert <- function(msg = "")
{
list(msg = paste0("The input message is: ",
msg, "'"))
}
#* Plotting a bar graph
#* @png
#* @get /plot
function(){
normal_func <- rnorm(60)
barplot(normal_func)
}
服务器.R
# Loading package
library(plumber)
# Routing API
r <- plumb("api.R")
# Running API
r$run(port = 8000, swagger = TRUE)
输出
- Normal_func:
正态函数用 rnorm() 输出 。
- 运行API。
api.R文件的运行端口为8000,swagger为TRUE。
- 在Swagger上Revert()。
输入的信息被要求执行该函数。
输入的信息以JSON格式和响应头文件输出。
- Swagger上的Plot()。
plot() 是用Swagger UI执行的,也可以用Curl语句来执行。
运行 plot() 后,会输出条形图 。
响应头的生成没有默认的响应。
因此,REST API在软件行业和IT行业中每天都被全面使用。