我需要发送数据并比较它是否存在于API服务器中。例如:
$a['foo'] = 'hello';
$a['bar'] = 'world';
$rest->verb('resource', $a);
如果API服务器中存在foo
和bar
的值,则应返回OK
其他Bad Request
。
我想使用GET
作为动词,因为它听起来更合适,只是在查询字符串中发送数据,但如果foo
和bar
是敏感信息并且通过传输更加安全,那该怎么办?交/放?但后来我没有添加或更新任何内容。
这种情况下最好的动词是什么?
答案 0 :(得分:3)
好吧,出于安全考虑而排除GET 1 实际上只留下了POST / PUT(忽略了DELETE)。
在这些可用选项中,我建议使用POST,因为它更常见(特别是在REST之外)和整体上不太具体的HTTP动词。
POST动词可以带有各种含义。 这是瑞士军刀的HTTP动词。对于某些资源,它可能用于改变内部状态。对于其他人,其行为可能是远程过程调用的行为。
1 GET的问题是服务器的任何数据必须通过URI(资源名称和查询字符串)传输。因此,此响应假设使用POST动词的请求不会使用URI来传输敏感信息,或者它不会比GET更好。文章How Secure are Query Strings over HTTPS?讨论了URI中数据的一些问题,即使使用HTTPS连接(应该用于所有敏感请求)。
答案 1 :(得分:1)
如果你将这样的问题发送到服务器并恢复正常。一毫秒之后,它可能不再适用。因此,如果您使用来自服务器的旧的(毫秒级但仍旧的)响应作为接受某些客户端输入的事实,那么当您稍后尝试存储该数据时,仍可能出错。
你应该只是尝试在服务器上创建一些东西,这意味着它应该是PUT或POST。如果您阅读了有关REST的内容,则表明如果您知道生成的资源的URL,则应使用PUT,否则请使用POST。你有它。如果一切正常,您可能希望发送201,否则发送409。
您在使用PUT / POST的服务器上创建的内容不一定是最终数据 - 它可能只是一个表示客户已声明此ID或其他内容的令牌。
现在,如果您仍然希望在服务器上存储任何内容之前进行额外的预检,那么您可能需要查看Expect或Accept等等......不记得了。在使用REST时,这是你的两个朋友。 :)
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
我还推荐这本关于REST的好书:http://shop.oreilly.com/product/9780596529260.do