【发布时间】:2020-11-14 04:57:44
【问题描述】:
首先,我想解释一下我编造的Hierarchical REST API和Normalized REST API的含义。
- 分层 REST API
- 请求 URL:可以使用具有多种内容类型的层次结构。 (例如
http://www.example.com/customers/12345/orders) - 响应正文:可以包含所有请求的内容,没有任何遗漏,包括其他相关数据类型(例如,
customer包含order)- 例如
http://www.example.com/customers/12345
- 例如
- 请求 URL:可以使用具有多种内容类型的层次结构。 (例如
{
"name": "John Doe",
"orders": [{
"id": 1,
"price": 10,
"delivered": true
}, {
"id": 2,
"price": 11,
"delivered": false
}
]
}
- 标准化 REST API
- 请求 URL:禁止来自 URL 的层次结构。
- 不行
http://www.example.com/customers/12345/ordershttp://www.example.com/customers/12345/orders/1http://www.example.com/customers/12345/orders?accepted=true
- 好的
http://www.example.com/customershttp://www.example.com/customers?firstName=Johnhttp://www.example.com/customers/12345http://www.example.com/orders/1
- 不行
- 响应正文:包含所请求内容类型的所有内容。如果其他类型相关,则只返回它的 ID。
- 例如
http://www.example.com/customers/12345
- 例如
- 请求 URL:禁止来自 URL 的层次结构。
{
"name": "John Doe",
"orderIds": [1, 2]
}
我认为这两种方法各有优缺点
- 分层 REST API
- 优点
- 可以在单个请求中获取所有必需类型的内容(例如,来自
http://www.example.com/customers/12345的客户、订单、地址)
- 可以在单个请求中获取所有必需类型的内容(例如,来自
- 缺点
- 如果数据的层次结构很深,响应可能会呈指数级增长且速度很慢
- 可能发生循环引用
- 数据重复(例如,
http://www.example.com/customers/12345和http://www.example.com/stores/1的结果可以包含相同的order数据)
- 优点
- 标准化 REST API
- 优点
- 响应速度更快(负载小,数据源没有或很少连接,业务逻辑更少)
- 通过规范化没有数据重复
- 缺点
- 如果您需要多种类型的内容,则需要多个请求(例如,要从某个
customer检索所有orders,至少需要来自客户端的 2 个请求)
- 如果您需要多种类型的内容,则需要多个请求(例如,要从某个
- 优点
我的问题是:
-
Hierarchical REST API和Normalized REST API是否有术语? - 哪一个更适合 REST API 指南?我也愿意接受其他选择。
【问题讨论】: