R语言中的plumber介绍
- 基本用法
- 常用 API 方法
- 1. GET 方法
- 2. POST 方法
- 3. 带路径参数的 GET 方法
- 使用 R 对数据进行操作
- 处理 JSON 输入和输出
- 运行 API 的其他选项
- 其他功能
plumber 是个强大的 R 包,用于将 R 代码转换为 Web API,通过使用 plumber,可轻松地创建 RESTfulI,以便将 R 的数据处理和分析功能暴露给其他应用程序或用户,plumber是一个非常方便的工具,无论是简单的函数调用还是复杂的数据处理,plumber 都能轻松应对
基本用法
示例
library(plumber)
#* @apiTitle 简单 API 示例
#* @get /echo
#* @param msg Query parameter
#* @response 200 返回传递的消息
function(msg = "") {
list(message = paste("你发送的消息是:", msg))
}
其中#* @标记请求参数格式
可将上面的代码保存在一个名为 api.R 的文件中,然后使用以下代码启动 API:
# 启动 API
library(plumber)
r <- plumb("api.R") # 载入 API 定义
r$run(port = 8000) # 启动 API 服务器
然后可通过访问 http://localhost:8000/echo?msg=Hello 来测试 API
常用 API 方法
1. GET 方法
#* @get /hello
function() {
list(message = "Hello, world!")
}
2. POST 方法
#* @post /add
#* @param a:num 第一个数字
#* @param b:num 第二个数字
#* @response 200 返回两个数字的和
function(a, b) {
result <- as.numeric(a) + as.numeric(b)
list(sum = result)
}
可以使用 POST 请求将数据发送到 /add,比如通过 curl 或 Postman
3. 带路径参数的 GET 方法
#* @get /square/<num>
#* @param num:num 需要平方的数字
#* @response 200 返回平方值
function(num) {
result <- as.numeric(num)^2
list(square = result)
}
访问 http://localhost:8000/square/4 将返回 { “square”: 16 }
使用 R 对数据进行操作
你可以在 API 中使用 R 的数据操作功能。示例如何计算数据框的统计信息:
#* @get /summary
#* @param dataset:string 数据集名称
#* @response 200 返回数据集的描述性统计
function(dataset) {
data(mtcars) # 加载示例数据集
if (dataset == "mtcars") {
summary(mtcars)
} else {
list(error = "数据集不存在")
}
}
处理 JSON 输入和输出
例如处理 JSON 输入的示例:
#* @post /mean
#* @param numbers:json 一个数字数组
#* @response 200 返回平均值
function(numbers) {
mean_value <- mean(unlist(numbers))
list(mean = mean_value)
}
可向 /mean 发送一个 JSON 数组,例如:
{
"numbers": [1, 2, 3, 4, 5]
}
运行 API 的其他选项
除了直接在脚本中启动 API,还可以使用 RStudio 或命令行工具将其作为服务运行
library(plumber)
# 创建 API 定义
#* @apiTitle 示例 API
#* @apiVersion 1.0.0
#* @get /hello
function() {
list(message = "Hello, world!")
}
#* @post /multiply
#* @param a:num 第一个数字
#* @param b:num 第二个数字
#* @response 200 返回乘积
function(a, b) {
list(product = as.numeric(a) * as.numeric(b))
}
# 启动 API
# r <- plumb("path/to/your/api.R")
# r$run(port = 8000)
其他功能
- 身份验证:可以通过添加认证逻辑来保护 API
- 文档生成:使用注释可以生成 API 文档,便于用户了解如何使用
- 错误处理:可以自定义错误响应
# 安装和加载 plumber 包
# install.packages("plumber")
library(plumber)
# 创建自定义错误处理函数
custom_error_handler <- function(req, res, err) {
# 创建一个新的响应对象
res$status <- 400 # 自定义状态码
res$body <- list(
error = "400 - Bad Request",
message = err$message
)
return(res)
}
# 定义一个算术加法的 API 路由
# @param a number 被加数
# @param b number 加数
# @post /add
# @error custom_error_handler # 使用自定义错误处理函数
function(a, b) {
# 尝试将参数转换为数值类型
a_numeric <- as.numeric(a)
b_numeric <- as.numeric(b)
# 检查是否成功转换
if (is.na(a_numeric) || is.na(b_numeric)) {
stop("参数 a 和 b 必须为有效的数值")
}
# 执行加法
result <- a_numeric + b_numeric
list(result = result)
}
整理不易 如果觉得有帮助,可以打赏下^ _ ^