2012-04-04 21 views
17

我目前正在設計一個API,並且我遇到了一個小問題: RESTful API的URL應如何看起來像應該能夠通過ID或者slu identify識別物品?通過RESTful API中的ID或子彈標識項目

我能想到的三個選項:

GET /items/<id> 
GET /items/<slug> 

這就要求蛞蝓和ID是可區分的,這是沒有必要在這種情況下給出的。我不認爲這個問題的乾淨的解決方案的,除非你做這樣的事情:

GET /items/id/<id> 
GET /items/slug/<slug> 

這會工作得很好,但是這不是我想無論是塞或物品進行識別的唯一的地方身份證,並且當人們想要爲其他行爲實施相同的方法時,它很快會變得非常難看。這只是不是很可擴展性,這使我們對這種做法:

GET /items?id=<id> 
GET /items?slug=<slug> 

這似乎是一個很好的解決方案,但我不知道這是否是一個可以預料到的,因此它可能導致因令人沮喪的錯誤不正確的使用。此外,它並不是那麼容易 - 或者說乾淨 - 爲此實現路由。然而,這將是易於擴展和看起來非常相似方法獲得多個項目

GET /items?ids=<id:1>,<id:2>,<id:3> 
GET /items?slugs=<slug:1>,<slug:2>,<slug:3> 

但是,這也是一個缺點:如果有什麼人想找出一些他想獲取的項目與ID,但其他與slu??混合使用這些標識符並不容易。

什麼是這些問題的最佳和最廣泛接受的解決方案? 一般來說,設計這樣一個API時重要的是什麼?

+5

問題中的問題,什麼是slu?? – 2012-04-04 20:00:49

+0

維基百科說:「用於識別和描述資源的用戶和搜索引擎友好的短文本」或類似的東西。 – 2012-04-04 20:02:23

+0

根據該維基百科文章和Wordpress詞彙表(http://codex.wordpress.org/Glossary#Slug)中的示例,它看起來像一個slug是已經分層的url的一部分。所以在你的情況下,可能物品是用於IDS的,但是物品/ /(作爲例子)是用於slu。的。 – 2012-04-04 20:17:24

回答

9

這三個我更喜歡第三個選項,看到這種語法並不罕見;例如Twitter的API的部分允許語法: https://dev.twitter.com/rest/reference/get/statuses/show/id

第四種選擇是一種混合的方法,在這裏你挑一個(比方說,ID)作爲單品的典型接入方式,也讓基於蛞蝓查詢。例如: -

GET /items/<id> 
GET /items?slug=<slug> 
GET /items?id=<id> 

你的路由將明顯地圖/項目/身份證/項目?ID =

擴展到多個ID /蛞蝓,但仍符合匹配的URI底層數據模型的REST模式。

+0

「將URI與基礎數據模型進行匹配的REST範例。」是我所擔心的。但我想我會一起去。 – 2012-04-04 20:06:18

+0

這幾天幾乎是可口可樂/百事可樂的問題。:) 我會說你應該支持/ items/是RESTful認證,但也允許查詢字符串,基於id或slug搜索將在範例之內。 我更喜歡可口可樂。 – Mike 2012-04-04 20:21:24

+0

由於我將有更多的查詢參數用於搜索所有返回數組的項,那麼返回數組也是明智之舉嗎?你可以搜索slug,但是不能清楚地標識它們,所以返回一個數組似乎是合乎邏輯的。 – 2012-04-04 20:29:20

相關問題