当前位置: 首页 > backend >正文

一文详解REST风格

一文详解REST风格

    • 一、REST风格的核心概念
      • 1.1 什么是REST?
      • 1.2 REST与HTTP的关系
    • 二、REST风格的核心原则
      • 2.1 资源为中心,URI表示资源
      • 2.2 用HTTP方法表示操作类型
      • 2.3 用HTTP状态码表示结果
      • 2.4 响应格式标准化
        • 2.4.1 成功响应
        • 2.4.2 错误响应
      • 2.5 无状态通信
    • 三、RESTful API设计实战案例
      • 3.1 资源定义
      • 3.2 API设计清单
      • 3.3 进阶设计:关联资源与过滤排序
        • 3.3.1 关联资源(如用户的订单)
        • 3.3.2 过滤、排序、分页
    • 四、常见误区与最佳实践
      • 4.1 误区1:过度追求“纯REST”
      • 4.2 误区2:忽略幂等性设计
      • 4.3 最佳实践

REST(Representational State Transfer,表现层状态转移)是一种被广泛采用的Web API架构风格,它并非协议或标准,而是一组设计原则,旨在通过HTTP协议天然特性构建简洁、可扩展、易于理解的API。

一、REST风格的核心概念

1.1 什么是REST?

REST由Roy Fielding在2000年的博士论文中提出,核心是**“以资源为中心”**,将一切数据(如用户、订单、商品)视为“资源”,通过HTTP方法对资源进行操作。

  • 资源(Resource):API操作的对象(如/users表示用户资源集合,/users/1表示ID为1的用户);
  • 表现层(Representation):资源的展示形式(如JSON、XML,现代API多采用JSON);
  • 状态转移(State Transfer):通过HTTP方法(GET/POST/PUT/DELETE)实现资源状态的改变,客户端无需了解服务器内部实现。

1.2 REST与HTTP的关系

REST并非独立于HTTP的技术,而是充分利用HTTP协议特性的设计风格:

  • 用HTTP方法(GET/POST/PUT/DELETE)表示操作类型;
  • 用HTTP状态码(200/201/404/500等)表示请求结果;
  • 用HTTP头(如Content-Type)表示数据格式;
  • 用URI标识资源(如/products)。

简言之:REST是“如何正确使用HTTP”的设计指南。

二、REST风格的核心原则

遵循以下原则是设计RESTful API的关键,也是区分“REST风格”与“普通API”的核心。

2.1 资源为中心,URI表示资源

  • URI应标识资源(名词),而非操作(动词);
  • 用复数表示资源集合(如/users),单数表示单个资源(如/users/1);
  • 避免在URI中包含版本号、操作动词(如/getUser/deleteOrder)。
错误URI 正确URI 说明
/getUser?id=1 /users/1 避免动词,用名词+ID表示资源
/deleteOrder/1 /orders/1 删除操作通过HTTP方法(DELETE)表示
/v1/users /users(版本放HTTP头) 避免URI包含版本号

2.2 用HTTP方法表示操作类型

HTTP方法本身具有语义,REST通过方法表示对资源的操作:

HTTP方法 操作类型 示例URI 说明
GET 查询资源 /users 查询用户列表(安全、幂等)
GET 查询资源 /users/1 查询ID为1的用户(安全、幂等)
POST 创建资源 /users 新增用户(非幂等,多次调用可能创建多个)
PUT 全量更新资源 /users/1 更新用户全部信息(幂等)
PATCH 部分更新资源 /users/1 更新用户部分信息(如仅修改姓名,幂等)
DELETE 删除资源 /users/1
http://www.xdnf.cn/news/15918.html

相关文章:

  • 一个适合MCU的分级菜单框架
  • .NET SDK 9.0.200引入对SLNX解决方案文件的支持
  • django filter按两个属性 去重
  • Linux——自制shell命令行解释器
  • 【LeetCode 热题 100】208. 实现 Trie (前缀树)
  • 剖析Sully.ai:革新医疗领域的AI助手功能启示
  • ssms(SQL 查询编辑器) 添加快捷键 Ctrl+D(功能等于Ctrl+C + Ctrl+V),一步到位
  • Bun v1.2.19发布,node_modules隔离,sql比node快6倍
  • Kotlin 高阶函数初步学习
  • Laravel 系统版本查看及artisan管理员密码找回方法针对各个版本通用方法及原理-优雅草卓伊凡
  • 信息学奥赛一本通 1576:【例 2】选课 | 洛谷 P2014 [CTSC1997] 选课
  • 子网划分核心原理 (网络原理1)
  • [学习] Hilbert变换:从数学原理到物理意义的深度解析与仿真实验(完整实验代码)
  • 《通信原理》学习笔记——第五章
  • Spring 源码阅读(二) 核心概念解析 ApplicationContext、类型转化
  • 【PyTorch】图像二分类项目
  • 【JS逆向基础】数据库之mysql
  • 7.19-7.20 Java基础 | File类 I/O流学习笔记
  • pyhton基础【27】课后拓展
  • 【Linux】3. Shell语言
  • 深度相机的工作模式(以奥比中光深度相机为例)
  • SQL Server(2022)安装教程及使用_sqlserver下载安装图文
  • 《计算机网络》实验报告四 TCP协议分析
  • 0719代码调试记录
  • IsaacLab学习记录(四)
  • Milvus Dify 学习笔记
  • 题单【循环结构】
  • 基于单片机出租车计价器设计
  • 30天打牢数模基础-决策树讲解
  • 【C语言】字符串与字符函数详解(上)