假设某个服务提供了一些我可以像这样使用的功能:
GET /service/function?param1=value1¶m2=value2
我可以将它与 POST 查询一起使用,这样说对吗?
POST /service/function { param1 : value1, param2 : value2 }
这两个查询相同吗?在任何情况下我都可以使用第二种变体吗?或者文档应该明确说明我可以同时使用 GET 和 POST 查询?
最佳答案
出于以下原因,我将 POST 正文用于任何重要的业务线应用程序:
- 安全性 - 如果我们将 GET 与查询字符串和 https 一起使用,则查询字符串可以保存在服务器日志中并作为引用链接转发。现在,服务器/网络管理员以及用户离开应用程序后前往的下一个域都可以看到这两个域。因此,如果我们发送包含 secret PII 数据(例如客户姓名)的查询,这可能是不需要的。
- URL 最大长度 - 不是一个大问题,但某些浏览器对长度有限制。因此,如果我们的 URL 中有多个项目,例如查询、分页、要返回的字段等...
- 默认情况下不缓存 POST。有人说需要缓存;有人说需要缓存;有人说需要缓存。但是,在缓存超时之前,针对该特定客户的该特定对象的完全相同的搜索条件集出现的频率是多少?
顺便说一句,我还将要返回的字段放入我的 POST 正文中,因为我可能不希望公开我的字段名称。安全就像洋葱;它有很多层,让我们哭泣!
关于post - 使用 POST 而不是 GET 的 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19637459/