【问题标题】:Is it considered RESTful if single POST requests create multiple resources?如果单个 POST 请求创建多个资源,是否被视为 RESTful?
【发布时间】:2017-08-02 19:37:47
【问题描述】:

我们的客户 API 采用 {customer-name, customer-mobile, customer-email} 并在数据库中创建客户。

我们还有接受 {productId, customer-name, customer-mobile, customer-email} 的订单 API。

订单API代码:

  1. 首先根据订单 API 中传递的 {name,mobile,email} 创建客户并返回 customerId。
  2. {productId, customerId} 进一步保存在数据库的订单表中。

一个 API 在内部首先创建一些其他资源是一种平静的做法吗?

请注意,这是一个过于简化的示例,其中 API 要求订单 API 中只有一种类型的产品。

【问题讨论】:

    标签: rest api restful-architecture


    【解决方案1】:

    单个 POST 调用可以导致创建多个资源。这通常不是最好的主意,但有些用例是有意义的 - 示例案例可能包括(通常的法律免责声明......不限于......)

    • POST 方法是对所有所创建资源的父资源。因此,POST /accounts 调用可能会导致创建 /accounts/<accountId> 资源,但也会创建 /accounts/<accountId>/tweets 资源。在这种情况下,/accounts/<accountId> 父级是正在创建的“实际”资源。

    • POST 方法可能会创建多个资源,这些资源表示资源可以与系统的其他部分交互的多种方式。因此,POST /accounts 响应可能在/accounts/<accountId>/users/<accountId>创建 资源(因为帐户是-a 用户和用户ID 是帐户ID 的超级集,为了参数)。然而,客户端真的 只被告知'/accounts' 路径下的那个(通过 Location 标头)。其他创建的资源基本上是副作用。

    真正的关键点在于 POST 方法返回一个 single Location 标头 - 表示创建的“主要”资源 - 并且该 URI 上的后续 'GET' 能够定位任何其他通过链接获取资源。

    如果您发现自己通过单个 POST 请求创建多个资源导致您必须为 Location 标头返回 不同 值,那么您的资源细分有问题。应该清楚的是,'POST' 将始终创建 一个 特定类型的资源,即在标头中返回的 URI。其他资源可能被创建为副作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-22
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      相关资源
      最近更新 更多