2012-12-04 44 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。 –

相关问题