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

一文详解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.lryc.cn/news/595511.html

相关文章:

  • WSL如何安装docker?
  • 人生的意义
  • 培生生成式人工智能(GAI)认证职场应用白皮书
  • CMakeLists.txt 中一些最常见和核心的命令
  • 三大工厂设计模式
  • Oracle自治事务——从问题到实践的深度解析
  • mcu中的调试接口是什么?
  • 阿里思想学习-如何优化大事务提交
  • JAVA后端开发—— JWT(JSON Web Token)实践
  • c语言----文件操作
  • 上海RISC-V峰会-香山开源RISC-V CPU随想随记
  • 软件测试 —— A / 入门
  • 从0开始学习R语言--Day53--AFT模型
  • react-window 大数据列表和表格数据渲染组件之虚拟滚动
  • Spring关于依赖注入的几种方式和Spring配置文件的标签
  • 面试总结第54天微服务开始
  • Spring处理器和Bean的生命周期
  • 线程池与ThreadPoolExecutor源码解析(上)
  • 暴力破解练习
  • Pandas - JSON格式数据操作实践
  • AV1平滑缓冲区
  • iostat的使用说明
  • MongoDB 查询时区问题
  • GUI简介
  • Kafka 如何优雅实现 Varint 和 ZigZag 编码
  • 【每天一个知识点】非参聚类(Nonparametric Clustering)
  • 期权到期会对大盘有什么影响?
  • 如何用 Z.ai 生成PPT,一句话生成整套演示文档
  • 【操作篇】群晖NAS用root权限直接访问系统分区文件
  • 圆柱电池自动分选机:全流程自动化检测的革新之路