如果单个POST请求创建多个资源,它是否被视为RESTful?

时间:2017-08-02 19:37:47

标签: rest api restful-architecture

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

我们还有订单API,需要{productId,客户名称,客户 - 移动,客户 - 电子邮件}。

订单API的代码:

  1. 首先根据订单API中传递的{name,mobile,email}创建客户,然后返回customerId。
  2. {productId,customerId}进一步保存在订单表的数据库中。
  3. 这种宁静的做法是一个API在内部首先创建一些其他资源吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

  • POST方法可能会创建多个资源,表示资源可能与系统其他部分交互的多种方式。因此,POST /accounts响应可能会在/accounts/<accountId>/users/<accountId>创建资源(因为帐户是 - 用户和用户ID是一组超级帐户ID,为了论证缘故)。但是,客户端确实只会被告知“/ accounts”路径下的那个(通过Location标头)。另一个创建的资源基本上是副作用。

关键点,实际上,POST方法返回一个位置标头 - 表示创建的“主要”资源 - 以及该URI上的后续'GET'能够定位任何其他资源通过链接。

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