首先,我要解释一下我所创造的 Hierarchical REST API
和 Normalized REST API
的含义。
- Hierarchical 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/orders
http://www.example.com/customers/12345/orders/1
http://www.example.com/customers/12345/orders?accepted=true
- 可用
http://www.example.com/customers
http://www.example.com/customers?firstName=John
http://www.example.com/customers/12345
http://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个请求)
- 如果需要多种类型的内容,则需要进行多个请求(例如要从特定的
- 优点
我的问题是:
- 这两种方法是否有术语?
- 哪种更适合REST API准则?我也可以考虑其他选项。