我正在考虑为现有的基于HTTP的纯Web服务创建REST API。
到目前为止,客户端可以向服务发送HTTP POST请求以检索数据。这些请求的HTTP正文 包含类似查询参数的内容。它是一种XML方言。这些查询的大小通常超过30 kB。
此外,查询还需要加密。因此,查询参数不能通过HTTP GET作为查询字符串进行传输。
我的问题是:是否违反了REST原则" POST更改服务器状态",如果我使用HTTP POST检索数据?
每次检索操作(成功与否)后,都会将日志条目添加到数据库中的日志表中。
更新
因此,查询参数不能被HTTP GET作为查询字符串传输
我从评论和答案中了解到,查询字符串已加密。但是不建议在查询字符串中传输安全敏感数据。
答案 0 :(得分:3)
虽然技术上违反了REST,但如果您的查询参数很大,听起来就像是这样,那么POST可能是唯一的方法。 此外,并非所有客户都支持使用身体参数进行GET。
ElasticSearch还允许POST查询:
HTTP GET和HTTP POST都可用于执行body搜索。由于并非所有客户端都支持GET with body,因此也允许POST。 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html
与Azure Search API一样 https://msdn.microsoft.com/en-gb/library/azure/dn798927.aspx
我试图做的一点是,虽然它违反了REST原则,但有时候规则会被打破。
您总是可以将其视为POSTing(创建)查询; - )
作为附注:GET请求/查询字符串
HTTPS会话的整个文本由SSL保护/加密 这包括查询和标题 在这方面,POST和GET将完全相同。