我(只是为了好玩)尝试实施高分网络服务。我希望它与REST原则兼容。我希望能够使用像这个http://mydomain.com/hs/add&name=John&score=987
这样的url参数添加新的高分。根据REST,这必须使用POST请求完成。这会导致空POST请求,其中包含URL参数中包含的所有数据。这会被认为是一种不好的做法吗?
更新的
安全目前不是一个大问题。
答案 0 :(得分:12)
执行此操作的常用方法是使用内容发送POST到http://mydomain.com/hs/add
:
name=John&score=987
(对于简单的urlencoded数据,对于例如多部分编码数据会有所不同; POST请求体的格式是任意的,超出了REST建议的范围 - 它甚至可以是任意加密数据,如其他人建议)。
添加新的高分的GET请求不仅违反了REST原则,而且违反了RFC 2616,这要求GET请求是幂等的。
修改强>
在查询字符串中传递数据并发布空体是不好的做法吗?
是。 URL应描述受HTTP方法描述的操作的资源。因此,最好的选择可能是将http://mydomain.com/hs
作为一个URL,然后让正文完整地描述该行为。
查询字符串可能用于进一步限定没有正文的请求,例如:
http://mydomain.com/hs?period=lastmonth
(GET)
答案 1 :(得分:2)
您在参数前使用问号,因此它将是:http://mydomain.com/hs/add?name=John&score=987
。但是,我们的想法是URL应该是资源的名称,请求方法应该决定做什么。
因此,正确的URL只是http://mydomain.com/hs
,您可以在POST数据中发送参数。因为它是一个POST请求,它会将数据添加到资源中。
答案 2 :(得分:1)
不,就REST而言,在POST中使用url参数并不是坏习惯。这对我来说似乎是一种非常有效的方法。
从美学角度来看,我建议使用诸如
之类的网址 POST http://mydomain.com/highscores?name=John&score=987
答案 3 :(得分:0)
非常糟糕......用户可以操纵分数。在通过查询字符串提交分数之前,您应该应用某种加密,即使它很简单
答案 4 :(得分:0)
获取数据时应使用GET。添加或操作数据时,应始终使用POST。
这样用户就不会:
答案 5 :(得分:0)
使用POST请求来防止以下情况: