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

REST架构的6大约束与API

🎯 详细解答:REST架构的6大约束与API

1️⃣ Client-Server Architecture(客户端-服务器架构)

核心概念: 关注点分离

  • 客户端:负责用户界面和用户体验(如网页、手机App)
  • 服务器:负责数据存储和业务逻辑处理

实际例子:

你用手机点外卖 App(客户端)↓ 发送请求
外卖平台服务器处理订单↓ 返回数据
App显示订单状态

好处:

  • 客户端和服务器可以独立开发和更新
  • 服务器可以同时服务多个不同的客户端(网页版、iOS、Android)

2️⃣ Statelessness(无状态性)

核心概念: 每个请求都是独立的

服务器不保存客户端的状态信息,每次请求必须包含所有必要信息。

实际例子:

❌ 有状态(不符合REST):
第1次请求:登录 → 服务器记住你
第2次请求:查询订单 → 服务器知道是你✅ 无状态(符合REST):
每次请求都带上身份令牌(Token)
请求:GET /orders + Token:abc123
服务器根据Token识别用户

好处:

  • 服务器更简单,不需要记住每个用户
  • 容易扩展(可以随意增加服务器)
  • 更可靠(服务器崩溃不会丢失状态)

3️⃣ Layered System(分层系统)

核心概念: 中间可以有多层代理

客户端不需要知道是否直接连接到最终服务器。

实际例子:

用户 → CDN(内容分发) → 负载均衡器 → API网关 → 应用服务器 → 数据库

每一层只知道相邻层的存在,就像:

  • 你点外卖不需要知道餐厅的厨房结构
  • 你只需要和配送员交互

好处:

  • 可以添加安全层、缓存层
  • 提高系统灵活性和可扩展性

4️⃣ Cacheability(可缓存性)

核心概念: 响应数据应该标明是否可以缓存

实际例子:

第1次请求:GET /weather/beijing
服务器返回:
{"temp": "25°C","Cache-Control": "max-age=3600"  ← 可缓存1小时
}第2次请求(1小时内):
直接使用缓存,不再请求服务器

常见缓存场景:

  • ✅ 可缓存:天气数据、商品列表、新闻文章
  • ❌ 不可缓存:银行余额、实时股票价格

好处:

  • 减少服务器负担
  • 提高响应速度
  • 降低网络带宽消耗

5️⃣ Uniform Interface(统一接口)

核心概念: 所有API遵循统一的设计规范

四个约束:

a) 资源识别(通过URI)

GET /users/123        ← 获取ID为123的用户
GET /products/456     ← 获取ID为456的商品

b) 通过表述操作资源(HTTP方法)

GET    /users/123   ← 查询
POST   /users       ← 创建
PUT    /users/123   ← 更新
DELETE /users/123   ← 删除

c) 自描述消息

{"id": 123,"name": "张三","email": "zhangsan@example.com"
}

d) 超媒体作为应用状态引擎(HATEOAS)

{"id": 123,"name": "张三","links": [{"rel": "self", "href": "/users/123"},{"rel": "orders", "href": "/users/123/orders"}]
}

6️⃣ Code on Demand(按需代码) ⚠️ 可选

核心概念: 服务器可以向客户端发送可执行代码

实际例子:

  • 服务器返回JavaScript代码,浏览器执行
  • 网页中的脚本、Java Applet
<!-- 服务器返回的HTML包含脚本 -->
<script>function validateForm() {// 客户端验证逻辑}
</script>

注意: 这是REST中唯一可选的约束,因为:

  • 可能有安全风险
  • 不是所有客户端都能执行代码

🔗 综合实例:一个REST API的完整请求

GET /api/users/123 HTTP/1.1
Host: example.com
Authorization: Bearer abc123token
Accept: application/json

符合的约束:

  1. Client-Server:客户端请求,服务器响应
  2. Stateless:包含完整的认证信息(Token)
  3. Layered:可能经过CDN、负载均衡器
  4. Cacheable:响应头可以指定缓存策略
  5. Uniform Interface:使用标准HTTP方法和URI
  6. Code on Demand:可选,通常不使用

💡 学习建议

  1. 实践为主:尝试调用真实的API(如天气API、GitHub API)
  2. 使用工具:Postman、curl 来测试API
  3. 阅读文档:看看知名公司的API文档(Twitter、Stripe)
  4. 动手开发:用Flask/Express创建简单的REST API
http://www.dtcms.com/a/438663.html

相关文章:

  • 深圳婚纱摄影网站建设网络维护工程师工资多少
  • 北京企业网站搭建wordpress 国际化
  • uniappx几个生命周期说明
  • 网站推广策划思路的内容企业网组建
  • R语言绘制股票K线图及布林线
  • 【C++】26. 智能指针
  • 职业中学网站建设织梦 公司网站模板
  • 微信 网页版优化系统
  • 如何在 Linux 中更改用户的默认主目录 ?
  • AI人工智能进阶——解读80页DeepSeek应用与部署【附全文阅读】
  • 建网站需要什么服务器合肥知名网站制作公司
  • 安卓基础组件022-ViewPager2
  • 怎样做模具钢网站做怎么网站推广
  • Java学习之旅第一季-28:Java基础语法测试题
  • 网站上的flv视频看不了百度网站两两学一做心得体会
  • 【QDialog】对话框
  • 无重复字符的最长字串 Java
  • 做网站读哪个专业企业注册名字查询
  • 机器视觉Halcon3D读取3D点云数据后的三维对象模型检查参数详解
  • 什么是商业网站湖北黄石市黄石市建设材料价格信息在哪个网站查询
  • Polyglot 全解析:多语言处理的利器与中文支持实践
  • 湖北省住房和城乡建设厅官方网站栖霞企业网站建设
  • 吕梁seo网站建设网站开发的技术支撑 经验能力
  • VAE-NPN跨域室内定位的实战与思考
  • 题库批量(文件)导入接口文档(补充)
  • Day93 基本情报技术者 单词表29 ビッグデータ基礎
  • 网站制作是不是要一个后台wordpress的目录结构
  • 域名对网站有什么影响吗在线网址免费的
  • 什么网站做h5没有广告国内免费saas crm正在
  • 【成功解决windows端tensorrt报错】Unable to load library: nvinfer_builder_resource.dll