2017-08-02 47 views
1

我们的客户API采用{customer-name,customer-mobile,customer-email}并在数据库中创建客户。如果单个POST请求创建多个资源,它是否被认为是RESTful?

我们也有订单API,需要{productId,客户名称,客户手机,客户电子邮件}。

代码订单API:

  1. 首先基于订单API中传递,并返回客户ID {姓名,手机,电子邮件}创建客户。
  2. {productId,customerId}进一步保存在订单表中的数据库中。

这是宁静的做法,一个API是在内部首先创建一些其他资源?

请注意,它是一个过于简化的示例,其中API仅在订单API中预期只有一种产品。

回答

1

单个POST调用可以导致创建多个资源,这很好。这不是一般的好主意,但是有些情况下是有意义的使用情况 - 例如情况下可能包括(通常法律声明...不限于...)

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

  • POST方法可能会创建表示该资源可与系统的其他部分进行交互多种方式多种资源。因此,一个POST /accounts反应可能/accounts/<accountId>/users/<accountId>下创建资源(因为账号是,用户和用户ID是一个超集帐户ID的,为了讨论)。但是,客户端真的只得到讲述了一个关于“/账户”路径下的一个(通过Location头)。另一个创建的资源基本上是一个副作用。

关键点,真的,则该POST方法返回单个 Location头 - 表示创建的“主要”资源 - 和对URI的后续“GET的是能够定位任何其它资源的通过链接。

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

相关问题