的行爲這是一個多部分的問題:REST網址:整數VS串和PUT
- 給定一個REST API與含有自然數作爲路徑段的URL,是通常預期的行爲,該數目是解釋爲索引或鍵?
- 當針對深層資源路徑執行PUT時,通常預期的行爲是路徑被解釋爲狀態聲明?這意味着沿着路徑創建所有不存在的資源。或者如果路徑上的任何資源不存在,應該返回一個錯誤?
- 對問題2進行擴展,如果路徑確實存在,並且路徑定義的資源結構與存在的資源結構不同,則應覆蓋現有資源,再次作爲狀態聲明或者返回指示類型不匹配?
例如,考慮端點:
domain.tld/datasource/foo/2/bar/1/baz
foo
是一個字符串,並確定頂級資源。2
可以被解釋爲索引或鍵。bar
是一個字符串,被解釋爲一個鍵。1
可以被解釋爲索引或鍵。baz
是一個字符串,被解釋爲一個鍵,指向一個葉節點。
換句話說,該標識符foo
下駐留在domain.tld/datasource
數據可以是任何以下的:基於
指數:
[
null,
null,
{
'bar': [
null,
{'baz': null}
]
}
]
基於密鑰:
{
'2': {
'bar': {
'1': {
{'baz': null}
}
}
}
}
基於指數和密鑰:
{
'2': {
'bar': [
null,
{'baz': null}
]
}
}
問題1
應該2
和1
被認爲是一個整數或字符串?由於這可能不可能知道,在REST URL中是否存在用於處理這種情況的類型註釋標準?在白板上的一些解決方案到目前爲止是這樣的斷言2
是一個鍵和1
是索引如下:
domain.tld/datasource/foo/2:str/bar/1:int/baz
- 其中
:str
表示前面的值是一個關鍵 - 和
:int
表示前面的值是一個指數
- 其中
domain.tld/datasource/foo/2/bar/1/baz?types=ki
- 其中
k
,爲的types
構件0,映射到所述第一類似於int的段,和表示該值是一個關鍵 - 和
i
,爲的types
部件1,映射到第二類似於int的段,和表示該值是一個指數
- 其中
問題2
如果沒有ABOV的e數據存在,如果PUT針對此路徑創建這些資源或返回錯誤?如果返回錯誤,每個級別的每個資源是否應該單獨創建,需要多個針對路徑的多個PUT?
問題3
如果從第一圖(基於索引的)中的數據已經存在應該從(基於密鑰)第二插圖中的數據強制地覆蓋在所有級別的所有數據路徑中或者返回一個指示類型不匹配的錯誤?這裏的推論再次表明,對於任何改變類型的分配,都需要多個PUT。
我可能是過於複雜的問題或缺少基本的東西,但我沒有找到明確的指導意見的方式很多。我可以完全控制系統,並可以執行我認爲合適的任何規則。不過,我感興趣的是經驗,這意味着相互作用應該很容易推理,邏輯,預期,確定性等
關於最後2個問題,我認爲這取決於您的RESTful API在什麼級別。例如,查看[Richardson成熟度模型的第3級](http://martinfowler.com/articles/richardsonMaturityModel.html#level3),在執行PUT之前,您必須實際導航到資源,所以你可以假設路徑是有效的。同時,硬編碼網址而不是導航不是正確的方式來消費這樣的API。 –