RESTFul API及幂等性

发布时间 2023-05-17 14:20:29作者: 小z姑娘001

RESTful是一种API设计风格用于clientserver之间的数据交互。它不是标准也不是协议而是一组设计原则和约束条件。

RESTful的主要原则有

  1. 使用HTTP方法:GET查询资源,POST创建资源,PUT更新资源,DELETE删除资源。
  2. 资源(Resources)设计API结构化为可识别的资源每个资源都有唯一的URL来标识。
  3. 无状态(Stateless):请求之间不保存状态每个请求必须包含所有的信息。
  4. 层次结构(Hierarchy):资源可组成层次结构从而形成连贯的API
  5. 用途统一(Uniform Interface):使用标准的HTTP方法操作资源返回标准HTTP状态码。
  6. 可缓存(Cacheable):资源的响应可以标记为可缓存以提高系统性能。
  7. 客户端-服务器(Client-Server):RESTful API遵循C/S架构客户端和服务器之间进行资源请求和响应。
  8. 分布式的(Layered System):客户端不需要知道服务器的结构服务器也不需要知道数据的来源。
  9. 代码即链接(Code on Demand):允许返回可执行代码JavaScript

RESTful API的主要优点是

  1. 简单易于理解灵活扩展, loose coupling
  2. 服务端与客户端之间解耦服务器无状态适合于分布式环境。
  3. 缓存支持可以提高性能。
  4. 易于测试自动化支持持续集成。

主流Web服务框架 wie SpringMVC Express 都支持构建RESTful APIRESTful API已经被广泛应用于互联网领域是当下主流的API设计规范。所以理解RESTful设计原则和如何构建RESTful API对于开发高质量的Web服务至关重要。它是现代Web应用开发人员必备的一项重要技能。

 

幂等性(Idempotence)RESTful API的一个重要特性。一个幂等的API意味着对同一个资源执行同一操作多次服务端状态不发生变化且返回相同的结果。

RESTful API中的幂等操作主要是

  - GET:查询资源永远是幂等的。无论查询多少次服务器状态不变返回相同结果。

  - PUT:更新资源也应该是幂等的。多次 PUT 同一资源服务器状态不变返回相同结果。

  - DELETE:删除资源同样应该是幂等的。无论删除多少次服务器状态相同返回相同结果。

  - POST不是幂等操作因为执行多次POST会在服务器上创建多个资源状态和结果发生变化。

为什么RESTful API需要支持幂等性主要有以下几点原因

  1. 网络不可靠客户端可能发送了请求但没有收到响应。此时无法判断服务端是否已经处理如果再次发送请求就需要确保服务端状态不变。
  2. 防止重复提交。用户可能多次点击提交按钮如果每个提交都产生影响就可能导致意外的状态变化。
  3. 支持缓存。中间代理可以直接返回缓存结果而不需要转发请求到服务器。这需要请求是幂等的。
  4. 简化重试机制。如果请求是幂等的客户端可以简单地重试而不需要额外判断服务端的状态。

幂等性是RESTful系统的必要约束条件。若不满足就不再是RESTful。所以设计RESTful API对于可能造成状态变化或副作用的操作要慎重考虑其幂等性。如果不满足幂等性在实现上也要做相应措施以防止重复执行导致意外。幂等性是RESTful API设计的一个重要的原则和特性理解它的含义和如何在设计中体现对构建高质量RESTful API非常重要。