2009-10-25 77 views
2

比方說,你有這樣的允許客戶端查找上市公司A /企業資源,你想客戶能夠通過北京時間,位置和區位和產業如何用不同的查找器「方法」獲取REST資源?

你保持相同的URL的形式來查找企業:

  • GET /公司/ MSFT
  • GET /公司/美國
  • GET /公司/美國&軟件

這看起來不對。有任何想法嗎?

回答

9

怎麼樣?

GET /Companies?ticker=MSFT 

GET /Companies?country=USA 

GET /Companies?country=USA&industry=software 

重要的是識別資源。該資源是「公司名單」。其媒體類型可以是Atom列表,或者只是使用UL LI標籤的HTML文檔。查詢參數會影響列表的內容,但從概念上講,它仍然是「公司列表」。

您可以創建一個獨特的資源,如

GET /Companies/USA 

但你真的需要。你打算髮布到/公司/美國?你要刪除/公司/美國?如果您的應用程序不需要對這些特定公司執行額外操作的能力,那麼爲什麼要將它們建模爲不同的資源呢?

作爲本次討論的一個附註,我希望更清楚地區分何時訪問單個實體與列表的資源。即

GET /Companies/USA 

GET /Company/MSFT 

我意識到這不是一些流行的web框架的工作方式,但我發現它是一個有用的區別。

+0

我們希望在公司層面執行操作。即:/ companies/msft –

+0

看到我的更新。我找到了url/Companies/msft的誤導。它是否返回了具有股票行情的公司名單?或者它是否返回公司資源的表示形式?無論如何,這只是我的偏好。對於REST而言,URL命名對於面向對象編程而言非常重要。 –

+0

明白了。我同意。 –

0

你可以接受任何這些,但是然後返回一個Location:頭指向規範地址(大概是GET/companies/msft)。

+0

後兩個查詢將返回多個公司。 –

0

你只有一家公司,但有多種方式,所以我可能會定義/ companies/[unique-name],然後是諸如/ companies/byticker/msft和/ companies/bylocation /美國等。

+0

這不是一個非常RESTful的方法。 – workmad3

+1

@ workmad3如果您要使用該短語,您需要解釋違反了哪個REST約束。我們看到* WAY *在沒有任何證據的情況下過多地使用了「那不是RESTful」這個短語。 –

+0

這不是RESTful,因爲資源應該具有唯一的名稱。如果您有多個查詢返回「相同的事物」,那麼它們應該返回可以被獲取的資源的唯一名稱,而不是資源本身。具有唯一名稱對於REST體系結構中的緩存一致性非常重要。一個名字,一個緩存策略,一個「地點」來獲取它,改變它,等等。 –

相關問題