在之前的博客 文章中,我介绍了实现REST体系结构的一些想法和提示。在这篇文章中,我会介绍更多的想法和提示。
高速缓存
- 缓存是原始论文的重要组成部分。
- 战略包括验证(客户检查它有最新版本)和到期(客户假定它有最新版本直到指定时间)
- 有效期:
- 当资源即将到期时,Expires头告诉客户端。值0意味着避免缓存
-
- 缓存控制
- 使用max-age指令指定响应应被视为有效的时间长度; s-maxage共享缓存
- 也可以在请求中使用no-cache意味着重新验证服务器的响应
- 缓存控制
- 验证
- Etag - 资源的唯一版本。与If-none-match请求标头一起使用
- Last-Modified - 告诉客户端资源上次更改的时间
控制器API
- 当某些东西完全适合CRUD操作时,请考虑使用Controller API
处理日期
- 在您的日期使用ISO-8601 - 更适合自然分类,处理时区,地区数据,大多数编程语言的支持
- 接受任何时区,因为世界上任何人都可能会调用您的API
- 以UTC格式存储,不在服务器的时区中。坚持时不应该有抵消。
- 以UTC返回。允许客户根据需要调整其时区
- 如果你不需要,不要使用时间。如果只有日期就足够了,只需要保留日期。这意味着,时区复杂性消失。
头
- HEAD操作应该返回响应头
头
- 总是返回什么标题是有用的。考虑:
- 内容类型
- 内容长度
- 上一次更改
- ETag的
- 位置
超媒体(优势)
- 更少的耦合
- 一致的链接格式=>更干净的客户端代码
- 开发人员的工作效率:API更易于浏览
- 更容易以更细化的方式引入服务
- 代码更易于调试 - 消息始终具有通过自链接创建它们的URL
超媒体(选择)
- HAL - 减少地址耦合
- SIREN - 减少地址和动作耦合
- 集合+ JSON(CJ) - 减少地址,动作和对象耦合
幂等
- 可以多次调用并返回相同的结果
- 选项,GET,HEAD,PUT和DELETE都是幂等的
长时间运行的请求
- 有些操作需要很长时间。在这种情况下,请考虑返回202,并将位置字段设置为客户端可以轮询的URL以检查操作进度。
方法不允许
- 如果一个API只支持GET,它应该为任何PUT,POST,DELETE等返回一个405
必须忽略原则
- 客户应该忽略他们不感兴趣的数据。这使API更容易向后兼容。如果一个API返回额外的数据,而有些客户不期待它,他们会忽略它。
不能接受的
- 当某个资源不支持特定的媒体类型时,当所请求的媒体类型无法提供时,它应该返回406(即,Masse,规则:406(“不可接受”)
OPTIONS
- 选项应该返回资源上可用的操作
部分更新
- 使用PATCH处理部分更新
询问
- 应该使用URI的查询组件来过滤集合
资源创建
- 当一个资源成功创建后,应该返回一个201
- 该位置头部应注明网址获取资源。
安全
- 如果操作不修改资源,则认为操作是安全的
- 选项,GET和HEAD是安全的
自我链接
- 响应组织应始终包含一个自我链接 - 用于返回资源的URL。
单数还是复数?
- 对单数文档类型资源使用Singular - 只能有一个。例如:/ humans / 12343343 / head
- 否则是复数