R语言中的plumber介绍

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)
}

整理不易 如果觉得有帮助,可以打赏下^ _ ^
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值