
What is RESTful APIs ?
结构: 引言:什么是RESTful API REST架构风格的核心原则 RESTful API的资源设计 状态码 请求和响应格式 实战案例 引言:什么是RESTful API? 在现代 Web 和移动应用的开发中,前后端分离已成为主流开发模式。在这种架构中,前端负责 UI 展示,后端则通过 API 向前端提供数据接口。而提到 API,RESTful API 几乎是最常被提及的关键词之一。 REST,全称 Representational State Transfer,是一种架构风格,而不是具体的协议和技术。它由计算机科学家 Roy Fielding 在他的博士论文中提出,旨在设计更清晰、可扩展、结构化的 Web 服务。一个遵循 REST 原则的 API,通常被称为 “RESTful API”。 那么问题来了: RESTful API到底"长什么样"? 它为什么会成为主流? 在日常开发中,我们该如何设计一个既优雅又实用的RESTful API? 这篇文章将带你从基础概念出发,一步步了解REST的设计理念、资源路由规范、HTTP方法的语义、状态码的使用方式,以及常见的设计技巧和最佳实践。 REST架构风格的核心原则 我们知道REST并不是一种具体的技术和协议,而是一种"架构风格",它使得API更加规范、易用、可维护。下面是 REST 的六大核心原则。 无状态(Stateless) REST 要求每一个请求都必须是自包含的:服务器不会在不同请求之间存储任何客户端的状态信息。换句话说,客户端的每个请求都必须包含完成该请求所需的全部信息(显示传入)。 举例说明:登录后Client发送请求应在Header中附带token,而不是依赖服务器的Session。 那么为什么要这样做呢? Scalability:无状态设计让任何一个服务器节点都可以处理任何一个请求,因为请求中自带了所有信息。这为负载均衡和自动扩容提供了天然支持。 举例:如果一个系统部署了三个后端服务节点(A/B/C),在无状态的设计下,负载均衡器可以将任意请求分发到任一节点,完全不需要考虑"这个用户上次是在哪台服务器登录的" Easy Deployment:由于请求之间没有状态依赖,服务节点可以随时上下线,不会影响用户体验,适合微服务架构或容器化部署(如 Docker/Kubernetes)。 故障恢复更简单:当服务器崩溃时,不需要恢复任何"用户会话"或"中间状态",只需要重新启动实例即可继续处理请求。客户端只需要重新发起请求,不必担心状态丢失。 更高的可测试性和可维护性:测试 RESTful 接口时,每个请求都是独立的,可以单独构造和验证,不需要手动维护前置状态,降低了集成测试和自动化测试的复杂度。 统一接口(Uniform Interface) 统一接口是REST最核心的思想之一,它确保了客户端和服务器之间的通信的一致性和可预期性,从而降低系统复杂度。换句话说,不管你访问的是"用户信息"、“文章评论"还是"订单数据”,它们的请求风格应该看起来是类似的。 其中包括: 使用标准的 HTTP 方法(GET、POST、PUT、DELETE) 使用资源的 URI 来表示数据(如 /users/123) 资源应通过URI来唯一标识,而不是通过动词。 ✅例子: 获取所有用户:GET /users 获取某个用户:GET /users/123 获取用户的订单:GET /users/123/orders ❌例子: /getUserById?id=123 /doCreateUser 这里需要注意URI中含有 “?”, 不一定代表不符合REST,需要区分: 查询参数用于过滤、分页 - ✅ 合理 查询参数用于标识资源 - ❌ 不推荐 使用标准的响应格式(如 JSON) 使用统一的状态码表示处理结果(如 200 OK, 404 Not Found) 可缓存(Cacheable) 在 REST 架构中,服务器响应应该显式地标明是否可以被缓存、缓存多久、缓存的条件等。 💡 REST 的可缓存性意味着客户端或中间代理(如浏览器、CDN、反向代理)可以在某些条件下缓存响应结果,从而减少重复请求,提升性能。 可缓存的优势: 1. 减少服务器负载:当客户端或中间层缓存了响应数据,后续相同请求可以直接返回缓存内容,无需再次访问数据库或计算逻辑。 2. 提高响应速度:缓存一般在本地或边缘节点,响应时间远小于重新生成内容。 3. 带宽优化:对于高频访问的数据(如文章列表、商品页等),缓存可以大幅减少网络传输和 I/O 开销。 REST架构基于HTTP,因此天然可以使用HTTP的缓存机制: ...

