2010-10-27 74 views
2

斜槓資源處理有任何REST約定嗎?斜槓資源的REST約定

舉例來說,假設一個正常的REST資源是這樣的:

  • /ice cream/chocolate - 返回的巧克力冰淇淋 成分
  • /ice cream/rocky road - 返回的岩石路冰淇淋 成分
  • /ice cream/strawberry/banana - 返回stawberry香蕉 配料

只有/ice cream/strawbery/banana不起作用,因爲這看起來像草莓的資源與香蕉的子組件....不完全是我們要去的。

當您嘗試使用'%2F'轉義'/'時,許多Web服務器(包括glassfish和apache)默認將其作爲可能的安全違規進行阻止。有服務器覆蓋,但我需要得到一個不同的團隊參與......我寧願自己處理它。

那麼,一個有着REST風格的人呢?我不能很好地阻止某人命名他們的冰淇淋「草莓/香蕉」。

我正在考慮使用一些自定義轉義序列(如stawberry*slash*banana),然後強制任何顯示組件在它們的最後執行轉換,但我認爲其他人必須面臨類似問題,爲什麼不要求最佳實踐(或至少對於一些有意義的想法)?

+0

如果您有PATHS資源,其中包含有關路徑的元數據,該怎麼辦?在我看來,這應該得到RESTful API的支持,否則就是範式的一個不必要的限制。編碼時遇到什麼問題? – magritte 2017-01-30 15:09:56

回答

1

如果您正在設置URI,那麼您可以決定如何對URI進行編碼。要成爲真正的RESTful URI並不一定有意義。/XYZ/12345可能是巧克力而/ ABC/zzzzz是岩石路。全取決於你。你已經決定讓你的URI有一些意義,現在遇到這個問題,在URI中有斜線,但這與REST無關,但是與你自己的URI編碼約定相關。實際上,REST會傾向於從一些基礎起點列出您的資源,然後用戶使用您提供的URI進行導航。你可以提供一個列表(其它格式)爲:

Chocolate Ice Cream http://base.com/XYZ/12345 
Rocky Road Ice Cream http://base.com/ABC/zzzzz 
Strawberry/Banana Ice Cream http://base2.com/G789 

和用戶從那裏導航。

+0

+1表示「URI並非真的有意義」。這在乾淨的URL的喧鬧聲中迷失了方向。 – rojoca 2010-11-01 17:33:17

2

看看堆棧溢出與他們的問題。他們添加一個連字符而不是空格。您可以通過用連字符替換斜槓來做同樣的事情。這樣你保持你的URI的可讀性,但你避免保留的字符。

您不需要資源名稱來完全映射到冰淇淋的名稱,因爲您不應該使用該名稱構建URI。如果有人想要找到草莓香蕉冰淇淋,那麼他們應該使用一些標準進行搜索,然後顯示與鏈接匹配的列表並選擇草莓香蕉。用戶不關心你是否將斜槓換成連字符,因爲冰淇淋的名稱中仍然包含斜線。