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(数字) 123、3.14 整数、小数都属于 Number
    Boolean(布尔) true、false 只有这两个值
    Null(空值) null 表示没有值
    Object(对象) {"name":"Tom","age":20} 键值对集合
    Array(数组) ["Java","Python","Go"] 有序数据集合
相关推荐
她的男孩3 分钟前
分片上传的大文件人人可下载:文件模块 isPrivate 在合并时被抹成 false,另有 4 个静默坑
java·后端·架构
颜进强10 分钟前
18 · NestJS动态模块与 forRoot:`imports: [ConfigModule.forRoot({...})]` 到底在 import 什么
前端·后端·ai编程
xn713315 分钟前
Personal AI Agent 架构实战:Memory、权限、跨 App 与本地/云端设计
人工智能·后端·agent
谢亮_vipxieliang26 分钟前
Go defer、panic与recover核心知识点
开发语言·后端·golang
颜进强35 分钟前
17 · 自定义 Provider 四形态:useValue / useClass / useFactory / useExisting 到底在选什么
前端·后端·ai编程
碎觉崽41 分钟前
我的 QQ 机器人被腾讯反复踢下线,折腾了半个月才搞明白
后端
打工仔折腾 AI1 小时前
从零写一个CAD 05:以鼠标为中心的滚轮缩放矩阵顺序不能反
后端·python·线性代数·性能优化·矩阵·计算机外设·ai agent 实战
谢亮_vipxieliang1 小时前
Go基础数据类型全解
开发语言·后端·golang
专业程序开发源1 小时前
springboot古城景区管理系统88564-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
小蒜学长2 小时前
基于微信小程序的遇见咖啡店点餐系统设计与实现(代码+数据库+LW)
java·spring boot·后端·微信小程序·咖啡店点餐系统