适当的休息动词的检查,如果敏感数据输入是有效的?(Proper REST verb for chec

2019-09-21 13:30发布

我需要发送数据,如果在API服务器中存在比较。 例如:

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

如果值foobar在API服务器存在,它应该返回OK否则Bad Request

我想用GET作为动词,因为它听起来更合适,只是在查询字符串中发送数据,但如果什么foobar是敏感的信息和更安全的通过邮寄/把传播的? 但后来我不添加或更新任何东西。

什么是在这种情况下,最好的动词?

Answer 1:

那么,排除安全顾虑GET 1有效只剩POST / PUT(平掉忽略DELETE)。

出于这些可用的选项,我建议使用POST,因为它是比较常见的(尤其是外REST)和更少的特定的HTTP动词的整体。

从REST为我们其余的人 :

POST谓词可以携带很多种意思的。 这是HTTP动词的瑞士军刀。 对于一些资源,可以用来改变内部状态。 对于其他人, 其行为可能是一个远程过程调用的。


1 GET的问题是,任何数据到服务器必须通过URI(资源名称和查询字符串)被转移。 因此,该响应假定使用POST动词不会使用的URI的请求传送敏感信息,或者它不会比变得更好。 这篇文章怎样安全的查询字符串通过HTTPS? 讨论了在数据的URI,甚至与HTTPS连接(其应该被用于所有敏感的请求)的担忧。



Answer 2:

如果你发送一个问题一样,到服务器并获得OK了。 一毫秒后,它可能无法确定任何更长的时间。 所以,如果你使用旧(旧毫秒但仍然旧)从服务器当作真理来接受一些客户端输入的响应,你仍然可能当您尝试保存以后的数据出错。

你应该简单地尝试在服务器上创建的东西,这意味着它应该放在或POST。 如果你读了关于REST,它指出,如果你知道造成资源的URL和POST否则PUT应该被使用。 你有它。 你可能想送201,如果一切正常,和409除外。

你把服务器上创建什么/ POST并不一定是最终的数据 - 它可能只是一个表明有客户声称此ID或任何令牌。

现在,如果你还是想在服务器上的所有存储任何东西之前,你的额外前检查,你可能想看看在期望或接受或东西...不不太记得。 这是你的两个朋友与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



文章来源: Proper REST verb for checking if sensitive data input is valid?
标签: api rest