我想用查詢參數設計一個RESTful搜索URI。例如,這個URI返回所有用戶的列表:如何使用HATEOAS和查詢參數進行RESTful搜索?
GET /用戶
而且前25個用戶姓氏爲 「哈維」:
GET /用戶?姓氏= Harvey & maxResults = 25
如何使用超媒體來描述「/ users」允許的查詢參數urce?我注意到新的Google Tasks API僅記錄參考指南中的所有查詢參數。我將記錄這份清單,但我也想用HATEOAS來做。
預先感謝您!
我想用查詢參數設計一個RESTful搜索URI。例如,這個URI返回所有用戶的列表:如何使用HATEOAS和查詢參數進行RESTful搜索?
GET /用戶
而且前25個用戶姓氏爲 「哈維」:
GET /用戶?姓氏= Harvey & maxResults = 25
如何使用超媒體來描述「/ users」允許的查詢參數urce?我注意到新的Google Tasks API僅記錄參考指南中的所有查詢參數。我將記錄這份清單,但我也想用HATEOAS來做。
預先感謝您!
使用在URI template spec目前草案中描述的語法,你會怎麼做:
/users{?surname,maxresults}
URI模板規範看起來非常有用。 – 2011-06-01 21:37:36
另一種選擇是使用HTML表單:
<form method="get" action="/users">
<label for="surname">Surname: </label>
<input type="text" name="surname"/>
<label for="maxresults">Max Results: </label>
<input type="text" name="maxresults" value="25"/> <!-- default is 25 -->
<input type="submit" name="submitbutton" value="submit"/>
</form>
像這樣的形式完全文檔可用的選項和任何默認值,它會創建指定的URL,並且可以使用您關心的其他任何文檔進行註釋。
也許我錯過了這一點,但如果您的資源不是HTML,這將無法正常工作。 – 2012-06-21 18:57:59
這個html表單是制定GET請求的一種方式,你得到的是你要求的任何媒體類型格式...可能(可能會是)完全不同的東西。 – HDave 2012-07-06 18:24:56
我沒有休息的專家,但讓我在我的2¢拋出:
在人類的Web,HTML表單經常被用來建立一個URI到搜索結果的表示。問題是,可編程Web沒有形式。但是你可以很容易地定義一些類似的東西你自己,那就是:
定義介質類型搜索的描述,讓我們說application/prs.example.searchdescription+json
(但注意的附言:在這個答案的末尾);
公開表示搜索用戶的子資源/users/search
。
第二步將通過從其他地方鏈接到該子資源來實現。例如,假設客戶要求GET /users
。它可能會收到這樣的:
{ _links: [ …, { rel: "search", href: "https://stackoverflow.com/users/search" }, …] }
客戶端可以遵循該鏈接,POST
搜索規範到資源的URI,例如:
POST /users/search
…
Content-Type: application/prs.example.search-definition+json
…
{ criteria: { surname: "Harvey" }, maxResults: 25 }
這裏,criteria
包含的(部分)表示要找到的對象。這可以做成任意複雜的描述。
要請求如上所述,服務器可能然後用狀態碼200 OK
回覆,並在實體主體,鏈接,表示對張貼的搜索結果的資源:
{ _links: [ { rel: "results", href: "/users?surname=Harvey&maxResults=25" } ] }
客戶端可以然後使用results
關係導航到URI以獲取搜索結果,而無需自己組裝URI。
P.S.:當我最初寫這篇文章的時候,我還沒有意識到定義新媒體類型會一直存在問題。 Mark Nottingham blogged about "media type proliferation" and how to combat it利用the
profile
link relation。
我希望我能+10這個問題。 – 2012-06-21 18:56:09