2017-08-02 51 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在頭返回。其他資源可能被創建爲副作用。

相關問題