RESTful详解:核心思想、框架、与HTTP的区别,API的设计风格

RESTful

  • Representation State Trandfer

    • 表现层状态转义

    • 如何设计Web API ,让URL、HTTP方法、状态码等各司其职的规范/风格

    • 核心思想

      • 一切可以被操作的东西,都可以看成资源Resource

      • eg:

        复制代码
          用户       User
          商品       Product
          订单       Order
          文章       Article
          评论       Comment
        • 对应URL

          复制代码
          /users
          /products
          /orders
          /articles
          /comments
        • 具体某个资源

          复制代码
          /users/1001
          /products/2001
          /orders/3001

          /users/1001----->"ID为1001的用户这个资源"操作HTTP Method决定

    核心:HTTP Method

    Method 含义 常见操作
    GET 获取 查询
    POST 创建 新增
    PUT 更新 整体更新
    PATCH 部分更新 修改部分字段
    DELETE 删除 删除

核心架构

复制代码
          RESTful API
│
┌───────────┴───────────┐
│ │
资源 操作
Resource Method
│ │
/users GET → 查询
/products POST → 创建
/orders PUT → 更新
PATCH → 部分更新
DELETE → 删除
│
↓
HTTP Status Code
│
┌────┼─────┐
↓ ↓ ↓
200 201 404
成功 创建 不存在

RESTful = 用 URL 表示资源,用 HTTP Method 表示操作,用 HTTP Status Code 表示结果。

  • 复杂业务----->设计成**"动作型API"**

    复制代码
    订单
     │
     ├── 查询       → GET /orders/1001
     ├── 修改       → PUT /orders/1001
     ├── 删除       → DELETE /orders/1001
     │
     ├── 支付       → POST /orders/1001/pay
     ├── 取消       → POST /orders/1001/cancel
     ├── 退款       → POST /orders/1001/refund
     └── 确认收货   → POST /orders/1001/confirm

RESTful和HTTP的关系

复制代码
         REST
│
API设计思想/风格
│
↓
HTTP
│
┌─────────┼─────────┐
↓ ↓ ↓
URL Method Status Code
│ │ │
/users GET 200
/users/1 POST 201
PUT 404
DELETE 500

HTTP

  • 浏览器(客户端)与服务器之间的通信协议

内容 HTTP 负责
请求方式(GET、POST...)
URL
请求头(Header)
请求体(Body)
响应体(Response)
状态码(200、404...)
  • HTTP解决的是"数据怎么传"

RESTful

  • 不是协议,而是一种API设计思想,如何合理的使用HTTP

复制代码
HTTP
 ↓
提供 GET、POST、PUT、DELETE、状态码、Header、Body......
 ↓
RESTful
 ↓
利用这些 HTTP 能力,把 API 设计成
"URL 表示资源 + Method 表示操作"

API设计风格通信双方(客户端&服务器)的数据格式约定

登录:

  • 客户端--->用户名+密码---->服务器

    • GET login?name=cjj&passwd=123----->不安全

    • POST /login

  • 服务器---->登录成功/失败-->客户端

RestFul风格的API设计:

  • 使用POST/DELETE/PUT/GET 表示资源增删改查

  • 使用path 表示要操作的资源

  • 使用json/xml系列化格式对正文进行序列化

json序列化方式:一种简单的独立于语言的数据交换格式

  • 数据类型:

    JSON 类型 示例 说明
    String(字符串) "hello" 必须用双引号
    Number(数字) 1233.14 整数、小数都属于 Number
    Boolean(布尔) truefalse 只有这两个值
    Null(空值) null 表示没有值
    Object(对象) {"name":"Tom","age":20} 键值对集合
    Array(数组) ["Java","Python","Go"] 有序数据集合
相关推荐
IT_陈寒2 小时前
Vue的响应式更新有时候真的不听话
前端·人工智能·后端
向生3 小时前
Ubuntu Caddy 保姆级完整教程
后端
tntxia3 小时前
Docker权限的问题
后端
明月_清风3 小时前
看完这段关于"全插件化架构"的技术分析后,我整理了一份笔记
前端·后端
摇滚侠4 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 14
spring boot·笔记·后端
她的男孩4 小时前
我把管理系统接给AI,它改条数据都要先问我
java·后端·架构
元界metalite4 小时前
SpringBoot分页接口怎么设计-pageSize不设上限会发生什么
后端
IT爱学堂5 小时前
Go开发疑难杂症终结者通关指南
后端
大勇前进6 小时前
从10分钟到10秒:一个真实慢查询的SQL Server优化全记录
后端