我正在考虑为现有的纯基于 HTTP 的 Web 服务创建 REST API。
到目前为止,客户端可以向服务发送 HTTP POST 请求以检索数据。这些请求的 HTTP 正文 包含诸如查询参数之类的内容。它是一种 XML 方言。这些查询的大小通常超过 30 kB。
此外,查询需要加密。因此,查询参数不能通过 HTTP GET 作为查询字符串进行传输。
我的问题是:如果我使用 HTTP POST 检索数据,是否违反了 REST 原则“POST 更改服务器状态”?
每次检索操作(成功与否)后,都会将日志条目添加到数据库中的日志记录表中。
更新
So, the query parameters can't be transfered by HTTP GET as a query string
正如我从评论和答案中了解到的,查询字符串是加密的。但不建议在查询字符串中传输安全敏感数据。
最佳答案
虽然从技术上来说它违反了 REST,但如果您的查询参数很大(听起来确实如此),那么 POST 可能是唯一的方法。 此外,并非所有客户端都支持带有正文参数的 GET。
ElasticSearch 还允许 POST 查询:
Both HTTP GET and HTTP POST can be used to execute search with body. Since not all clients support GET with body, POST is allowed as well. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html
与 Azure 搜索 API 一样
https://msdn.microsoft.com/en-gb/library/azure/dn798927.aspx
我想说的是,虽然它违背了 REST 原则,但有时规则是需要被打破的。
您始终可以将其视为 POST(创建)查询 ;-)
作为旁注:GET 请求/查询字符串
HTTPS session 的整个文本均由 SSL 保护/加密。
这包括查询和 header 。
在这方面,POST 和 GET 是完全相同的。
关于web-services - RESTful Web 服务,POST 用于数据检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275271/