用于检查敏感数据输入是否有效的正确REST谓词



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

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

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

我想用GET作为动词,因为它听起来更合适,只在查询字符串中发送数据,但如果foobar是敏感信息,通过post/put传输更安全呢?但我不会添加或更新任何内容。

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

好吧,出于安全考虑,排除GET1实际上只剩下POST/PUT(完全忽略DELETE)。

在这些可用的选项中,我建议使用POST,因为它是更常见的(尤其是在REST之外)和不太具体的HTTP谓词。

从REST到我们其他人:

POST动词可以有多种含义这是HTTP动词中的瑞士军刀对于某些资源,它可能用于更改内部状态。对于其他人,的行为可能是远程过程调用


1GET的问题是,任何到服务器的数据都必须通过URI(资源名称和查询字符串)传输。因此,此响应假设使用POST谓词的请求不会使用URI来传输敏感信息,或者它不会比GET更好。文章HTTPS上的查询字符串有多安全?讨论了URI中数据的一些问题,甚至HTTPS连接(应该用于所有敏感请求)。

如果您向服务器发送这样的问题,并得到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

最新更新