2013-08-31 44 views
0

我有一些問題應該允許將參數傳遞給我編程的RESTful API。REST風格的API體系結構約定:應該如何傳遞參數

E.g.我想檢索有關用戶的信息:與方法GET API調用將是:/api/users/
如果該ID在URL /api/users/5或實際GET數據/api/users/?id=5

從傳遞什麼我已閱讀並總結自己,我會往往會選擇一個(通過url中的參數),因爲它看起來更直觀,非常乾淨。

但是,該選項對於更精細的查詢將會很困難。示例:按年齡或上次登錄日期或甚至嵌套查詢獲取用戶(獲取用戶5的所有帖子)。對於這些使用情況下,它會更以無限便捷數據傳遞的請求參數,因爲這些將包含可容易地識別(/api/users/?age=20

我很想在你看來鍵值對:
哪個更好去這裏的方式,爲什麼?
如果您更喜歡選項2:理想情況下應該如何構建參數?

回答

2

兩者都是適用

GET /api/users/5返回與ID用戶5. GET /api/users/?age=20返回該組的用戶的年齡是20。 GET /api/posts/?user_id=5返回組帖子的由用戶5

通常ID是一個的特殊情況,因爲它確定了資源。你不會通過ID來搜索用戶 - 你只需要一個你想要的。

0

請記住,對於REST,整個URI(包括查詢字符串)是資源的原子標識符。只要URI始終標識相同的資源並由服務提供,而不是由客戶構建,就沒有更好或更糟糕的了。

從這個意義上來說,/api/users/5並不多於或少於RESTful,而是/api/users?id=5,但它們指的是不同的東西。當您考慮URI語義時,使用查詢資源集合的參數,/api/users/5標識單個用戶資源,而/api/users?id=5標識由id過濾並具有單個元素結果的用戶集合。