检查敏感数据输入是否有效的适当REST动词是什么?

3

我需要发送数据并比较它是否存在于API服务器中。例如:

$a['foo'] = 'hello';
$a['bar'] = 'world';
$rest->verb('resource', $a);

如果API服务器中存在foobar的值,应返回OK,否则返回Bad Request。我想使用GET作为动词,因为这听起来更合适,并且只在查询字符串中发送数据,但如果foobar是敏感信息,并且更安全地通过post/put传输,则该怎么办?但我不添加或更新任何内容。在这种情况下,什么是最好的动词?
2个回答

3

好的,考虑到安全问题,排除了GET方法,只留下POST/PUT方法(忽略DELETE方法)。

在这些可用选项中,我建议使用POST方法,因为它是更常见的HTTP动词(特别是在REST之外),而且总体上不太具体。

来自REST for the Rest of Us的信息

POST动词可以承载各种意义。 它是HTTP动词的瑞士军刀。 对于某些资源,它可能被用于更改内部状态。 对于其他一些资源,其行为可能类似于远程过程调用


1 GET方法的问题在于,任何发送到服务器的数据必须通过URI(资源名称和查询字符串)传输。本回答因此假定,使用POST方法的请求不会使用URI传输敏感信息,否则它将与GET方法没有什么区别。How Secure are Query Strings over HTTPS?一文讨论了一些关于URIs中数据的问题,即使使用HTTPS连接(应该用于所有敏感请求)。


所以基本上POST就是REST的RPC。这是我第一次看到这个解释。我希望“REST警察/纯洁主义者”能够同意这个说法 :-) - IMB
1
请注意,上面对“意识形态”一词的使用是为了模仿警察/纯粹主义者,并且是夸张的 ;-)请注意,上面使用“意识形态”这个词只是为了像警察/纯主义者那样,并不是字面意义上的;-) - user166390

1

如果您向服务器发送这样的问题并收到OK回复,那么一毫秒后,它可能不再是OK的。因此,如果您使用旧的(几毫秒前但仍然旧的)服务器响应作为接受某些客户端输入的真相,当您尝试稍后存储该数据时,仍可能出错。

您应该简单地尝试在服务器上创建某些内容,这意味着应该是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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接