使用 R 编程构建 REST API
REST(Representational state transfer) API 是一种架构风格,它包含构建 API 的特定约束,以确保它们一致、高效和可扩展。 REST API 是一组语法和约束,用于 Web 服务的开发和操作,包括通过端点发送和接收信息,即提供到外部环境的接口的 URL。
REST 于 2000 年由 Roy Fielding 首次提出。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 代码转换为端点。
R
# Installing the package
install.packages("plumber")
# Loading package
library(plumber)
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)
使用包构建 API
使用管道工包构建 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)
}
服务器
电阻
# 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 行业。