rest - 为什么要向 REST API 的响应添加链接?
问题描述
为什么开发人员要在 REST API 的响应中添加链接?例如,在本教程中的分页响应中。
{
"_links": {
"self": {
"href": "http://example.org/api/user?page=3"
},
"first": {
"href": "http://example.org/api/user"
},
"prev": {
"href": "http://example.org/api/user?page=2"
},
"next": {
"href": "http://example.org/api/user?page=4"
},
"last": {
"href": "http://example.org/api/user?page=133"
}
}
"count": 3,
"total": 498,
"_embedded": {
...
}
}
在前端生成这样的链接非常容易。
解决方案
对此有多种说法。因此,在我的回答中,我戴上了想要添加这些链接的人的帽子。这里有几个原因:
- 逻辑较少的客户端有点好。您可能有多个客户端,因此您不必重新实现相同的逻辑。
- 它允许服务器完全改变逻辑而无需更新客户端。例如,现在您用于
?page=x
进入下一页,但这种特定的分页方法可能会给您带来某些规模/某些数据集的问题。例如,如果您想更改为?offset=x
客户端将透明地升级。 - 如果
next
链接不存在,它也很容易告诉客户端没有下一页。 - 这与前面的原因有些重叠,但是如果您正在创建一个由多个服务器实现的 API 标准,您不会强制服务器实现您的特定分页策略。通过使用链接,您基本上可以为 API 的其他实现打开大门,以选择更适合其基础架构的不同分页策略。
- 这是一个“统一的界面”。API 中的所有内容都是资源(包括“下一页”),这意味着所有内容的行为通常都相同。不仅页面应该这样工作,其他类型的关系也应该这样工作。例如,也许您的“用户”是“组”的一部分。不要指定“groupId”,指定组链接。
最后,您可以轻松地为此生成简单的通用 HTML 接口,这可能对您的开发人员有用。那里有很多 HAL 浏览器。
推荐阅读
- mysql - 在 laravel 中与数据透视表连接的表格
- php - 如何在迁移过程中播种特定表 - Laravel 5?
- c# - 在 C# .NET 中使用队列
- php - 在 WooCommerce 购物车页面的 AJAX 调用中未加载 JavaScript
- r - 在闪亮的服务器上增加堆栈维度
- django - 将数据导入数据库时出现 django-import-export 错误
- java - 如何更改谷歌令牌到期时间?
- c# - 如果 DataSource 是 FeatureDataTable,如何在 VectorLayer 上应用 SharpMap.VectorStyle 主题?
- python - 如何模拟文件写入python中的多个文件
- adsense - 我在 Google Adsense 上的网站未获得批准“无内容”