3

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

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

如果 和 的值foo存在bar于 API 服务器中,它应该返回OKelse Bad Request

我想GET用作动词,因为它听起来更合适,只是在查询字符串中发送数据,但是如果是敏感信息foo并且bar通过 post/put 传输更安全,该怎么办?但是我没有添加或更新任何东西。

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

4

2 回答 2

3

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

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

我们其他人的 REST 开始

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


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

于 2012-08-23T21:43:03.017 回答
1

如果您将这样的问题发送到服务器并返回 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

于 2012-08-23T22:20:25.253 回答