2012-12-04 37 views
0

對於我正在構建的遊戲,我希望將代幣放置在棋盤上的某個位置。棋盤上的位置由2D矢量表示,但現在我正在摸索着在URL中表示這些矢量的普通問題。什麼是在RESTful url中表示矢量的好方法

我能想到幾個方案,其中沒有一個是特別令人高興的:

  1. /point/{x}/{y}前。 /point/10/3
  2. /point/{y}/{x} ex。 /point/3/10
  3. /point/({x},{y}) ex。 /point/(10,3)

前兩個問題是它是相當隨意的矢量的哪個部分最先出現的問題。第三個似乎有風險;我可以想象這對調試會很有趣,因爲有些用戶代理可能會對'(',')'或','字符進行編碼,儘管我希望我的服務器端框架能夠容忍這一點。

你有沒有試過類似的東西?我錯過了一個明顯優越的選擇?

+0

你可以試試/點X = 10&Y = 3 –

+0

肯定的,但是這不會是REST然後將它? – iwein

+0

爲什麼不呢?這不會以任何方式違反REST! –

回答

1

沒有什麼可言unRESTful約三個例子你能給:

  1. /point/{x}/{y}前。 /point/10/3
  2. /point/{y}/{x} ex。 /point/3/10
  3. /point/({x},{y}) ex。 /point/(10,3)

不過,我不會試圖代表了它自己的URI板每平方。客戶希望單獨獲得任何廣場,還是僅獲得整個董事會?例如,如果這是跳棋,則需要64次往返服務器才能獲得每個棋盤格的狀態。 效率低下!使用單一的URI整個董事會指每平方米的狀態已經是一個屬性:

PATCH /board 
{ "x": "10", "y": "3", "token": "black", .. [other params] .. } 

PATCH /board 
{ "10,3": "black", .. [other params] .. } 

不要忘了,你可以隨時POST如果你不能PATCH董事會。

你必須定義首先來到你的API文檔(XŸ請不要定義Ÿ作爲第一:-)

+0

我喜歡PATCH的建議。我從來沒有在每個點上使用GET來獲得棋盤狀態。但是對於PUT來說,使用更精緻的URI是有意義的。所以GET /板,PUT /板/(10,3){令牌:「黑」} – iwein

+0

PUT/POST的益處/ PATCH是,它們標記請求URI爲在任何高速緩存失效(例如,用戶的瀏覽器或操作系統高速緩存)。因此,使用稍後獲取的相同URI通常是有意義的。另外,在RESTful設計中,URI代表資源。資源應始終通過GET請求返回自己的表示形式。因此,您的URI'/ board /(10,3)'仍然需要返回GET請求的響應,使其成爲RESTful。 –

相關問題