分层REST API与规范化REST API对比

6

首先,我要解释一下我所创造的 Hierarchical REST APINormalized REST API 的含义。

  • Hierarchical REST API
    • 请求URL:可以使用多种类型内容的分层结构 (例如: http://www.example.com/customers/12345/orders)
    • 响应主体:可以包含所有请求的内容而不遗漏,包括其他相关数据类型(例如:一个customer 包含一个 order)
      • 例如:http://www.example.com/customers/12345
{
  "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
{
  "name": "John Doe",
  "orderIds": [1, 2]
}

我认为这两种方法都有各自的优点和缺点。

  • 分层REST API
    • 优点
      • 可以在单个请求中获取所有所需类型的内容(例如从 http://www.example.com/customers/12345 获取客户、订单、地址等)
    • 缺点
      • 如果数据的层次结构很深,响应可能会变得非常庞大和慢
      • 可能会出现循环引用
      • 数据重复(例如,http://www.example.com/customers/12345http://www.example.com/stores/1 的结果都可能包含相同的order数据)
  • 规范化REST API
    • 优点
      • 响应更快(有效载荷小,数据源中没有或很少的连接,业务逻辑较少)
      • 通过规范化避免了数据重复
    • 缺点
      • 如果需要多种类型的内容,则需要进行多个请求(例如要从特定的customer检索所有orders,则客户端至少需要2个请求)

我的问题是:

  • 这两种方法是否有术语?
  • 哪种更适合REST API准则?我也可以考虑其他选项。

相关问题:https://softwareengineering.stackexchange.com/q/335768/244298 - user2652379
1个回答

4

关于分层式REST API和规范化REST API是否有术语?

没有。

哪一个更符合REST API指南?

两者都“可以”。

考虑全球网络以及我们如何向浏览器提供CSS指令。我们可以直接将CSS嵌入HTML页面吗?可以。我们可以链接到通过不同资源获取的CSS吗?可以。

这两种方法都“符合REST API指南”。更准确地说,它们之所以有效,是因为HTML是通用标准化的媒体类型,有关于如何引用CSS的规则;而这些规则被每个人都理解相同的方式。


我明白了,那一定是个人偏好的问题。谢谢你。 - user2652379

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接