2017-12-18 226 views
4

我有一個簡單的服務器API:HTTP Status 201 Created:將N個URL返回給新資源?

客戶端可以上傳文件。如果成功,服務器將返回201 Created。 http響應有一個Location標題,指向新創建的資源。

現在我們面對一個新的用例:一個http請求應該能夠創建N個新的資源。

我不確定如何根據http規範來實現此操作。

AFAIK那裏最多隻有一個Location標題。

如何在http 201 Created響應中返回N個URL?

我的問題是相關的,但不是以下問題的重複,因爲問題顯然回答爲「否」。我的問題是不同的:如何...

我的問題不是「是否允許返回幾個位置標題?」。

Can the Location header be used for multiple resource locations in a 201 Created response?

+0

[位置標題可否用於201創建響應中的多個資源位置?](https://stackoverflow.com/questions/11309444/can-the-location-header-be-used -for-multiple-resource-locations-in-a-201-created) – jonrsharpe

+0

@jonrsharpe我解釋了爲什麼我的問題不是重複的。是的,這兩個問題都是相關的,但它們是不同的。 – guettli

+0

第一個答案說不,第二個答案給出了一個替代方案。 – jonrsharpe

回答

4

如何返回否網址,在一個HTTP 201創建的響應?

簡答:在消息體中。

較長的回答:

我認爲你正在進行有關你的搜索有點倒退。

在HTTP中;狀態碼和響應頭文件是元數據;伴隨着消息給通用http組件一個上下文不可知的方式來理解發生了什麼。

概括地說,元數據來自數據。所以從有效載荷開始。

201 CREATED響應的情況下:

的201響應有效載荷通常描述並鏈接到創建的資源(多個)。

您的第一步是創建此表示法;在使用HTML的情況下,它看起來像一個網頁,上面寫着「祝賀,一切正常」以及一系列帶有超鏈接的標記文本,爲客戶提供對新資源的訪問。

完成,您現在檢查該表示以查看應將哪些信息提升到標準標題中,以便通用組件也能理解正在發生的一些事情。

例如,見的POST響應的描述

如果一個或多個資源已被原始服務器作爲成功處理POST請求的結果上創建的,原始服務器應該發送一個201(創建)響應,其中包含一個Location標頭字段,該字段爲所創建的主資源提供一個標識符(見第7.1.2節),並在引用新資源時描述請求狀態。

所以我們確定創建的資源的其是初級,以及從表示入Location頭解除該資源的標識符。

輔助資源的標識符在郵件正文中仍然可用。如果您還需要將這些資源公開給通用組件,那麼您可以使用Link header

+0

謝謝你這個詳細的答案!只有一個問題:沒有「主要」或「次要」資源。有一組資源沒有排序。但鏈接頭看起來不錯。 – guettli

7

你可以看看rfc4918,它提出了一種新類型的響應,207(多狀態),簡短描述從REST & WOA Wiki複製:

的多狀態響應傳達有關在多個資源信息多種狀態代碼可能適用的情況。默認的Multi-Status響應主體是一個帶有'multistatus'根元素的text/xml或application/xml HTTP實體。其他元素包含方法調用期間生成的200,300,400和500系列狀態碼。 100系列狀態碼不應記錄在「響應」XML元素中。