簡單的問題..REST風格的URL中使用不同的字段,以獲取資源
如果我有一個REST Web服務,而我的設計不使用URL參數,我怎麼能指定兩個不同的鍵返回相同的資源?
例 我想(和已實施)
/Person/{ID}
預期它返回一個人。
現在我也想
/Person/{Name}
它的名字返回的人。
這是正確的RESTful格式嗎?或者是這樣的:
/Person/Name/{Name}
簡單的問題..REST風格的URL中使用不同的字段,以獲取資源
如果我有一個REST Web服務,而我的設計不使用URL參數,我怎麼能指定兩個不同的鍵返回相同的資源?
例 我想(和已實施)
/Person/{ID}
預期它返回一個人。
現在我也想
/Person/{Name}
它的名字返回的人。
這是正確的RESTful格式嗎?或者是這樣的:
/Person/Name/{Name}
您應該只使用一個URI來引用單個資源。擁有多個URI只會造成混淆。在你的例子中,由於兩個同名的人會產生混淆。他們指的是哪一個人資源?也就是說,你可以讓多個URI指向一個資源,但對於除「真實」URI之外的任何其他資源,只需使用狀態碼301 - Moved Permanently
將客戶端重定向到正確的位置即可。
就我個人而言,我永遠不會實現多ID方案或重定向來支持它。選擇一個識別方案並堅持下去。你的API的用戶會感謝你。
您真正需要構建的是一個查詢API,因此請專注於如何實現類似於/personFinder
資源的資源,該資源可能會將名稱作爲參數,並在響應中返回潛在的多個匹配的/person/{ID}
URI。
我想從技術上,你可以同時擁有的URI指向相同的資源(也許他們中的一個作爲典型的資源),但我想你不會想從這樣做實施視角。如果ID和名稱之間有重疊,該怎麼辦?
它肯定不會看起來像使用查詢參數的好地方,但如果你堅持不這樣做,也許你可以做
person/{ID}
和
personByName/{Name}
我認爲會有一個標準的做法,似乎對我來說很普遍。感謝您的輸入。 – Erix
我認爲這樣做的最標準方法就是你已經排除了 - 查詢參數。順便說一句,你的URL的內容並不會使它成爲RESTful,但這似乎並不是問題的核心。 – pc1oad1etter
如果你只是創建一個新的URI模式來進行名稱搜索(比如/ personByName/{Name},那麼你最終會爲每個你想到的新參數(以及這些參數的每個組合)創建一個新模式。對於這種可能性你可以做到這一點,我感覺很好,你可以這樣做。然而,更爲標準的做法是讓/ person?name = {Name}返回匹配的人員列表按名字。 – pc1oad1etter