web-services - RESTful Web 服务,POST 用于数据检索

标签 web-services rest

我正在考虑为现有的纯基于 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/

相关文章:

javax.ws.rs.ProcessingException : could not find writer for content-type application/json

java - 如何将 HashMap 作为 Java Web 服务的输入?

java - 从 Java 客户端应用程序使用 JSON Web 服务

rest - Grails REST 安全性 - 密码过期

django - 使用 django rest 框架代替 django orm 的最佳方式

c# - 从 Web 服务器加载 html 页面时,HtmlAgilityPACK 显示错误 "The given path' s 格式不受支持

database - JMeter测试运行前如何设置数据库状态?

sql-server - 从存储过程到 REST 服务

rest - 我应该将 API key 放置在 REST API 调用中的什么位置?

java - 无法在 Java Spring 中反序列化 JSONObject(在 JSONArray 内部)