如果你有一个 API 并且仅仅因为 URL 长度限制和请求中传递复杂的参数而支持 POST 操作,你还能说你有一个 RESTful 架构吗?
以上基本上暗示的是,对于这个特定的(只读)API,GET 和 POST 之间没有语义差异,因此可以用 GET 完成的操作也可以用 POST 完成(但反之则不然)到限制)。
这仍然会使架构的风格成为一种 RESTful 风格吗?
如果你有一个 API 并且仅仅因为 URL 长度限制和请求中传递复杂的参数而支持 POST 操作,你还能说你有一个 RESTful 架构吗?
以上基本上暗示的是,对于这个特定的(只读)API,GET 和 POST 之间没有语义差异,因此可以用 GET 完成的操作也可以用 POST 完成(但反之则不然)到限制)。
这仍然会使架构的风格成为一种 RESTful 风格吗?
从技术上讲,您没有违反任何约束。但是,您正在严重减少请求的自我描述性。这将导致失去缓存响应的能力。能够缓存响应是构建有效 REST 系统所需的基本功能。
您肯定会失去 HTTP 为 GET 请求提供的功能。例如,代理对 GET 请求(幂等性、可缓存性)做出某些假设。
POST 本身没有任何问题,但也许 REPORT 方法更合适。
Roy Fielding 于 2000 年在他的博士论文中引入并定义了代表性状态转移一词。第 6.3 节解释了如何将 REST 应用于 HTTP: http: //www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm#sec_6_3
Fielding 并未声称禁止使用 POST。
Wikipedia 还提到 POST 作为 RESTful Web 服务的合法 HTTP 操作: http ://en.wikipedia.org/wiki/Representational_State_Transfer#RESTful_web_services
所以这里的问题是关于宁静的架构而不是宁静的网络服务。如果我们按照Wiki-RestfulArch-Constraints上提供的信息进行 ,是的。
为什么不直接切换到在 GET 中包含正文而不是使用查询字符串?
RFC 说明如下:
服务器应该在任何请求上读取并转发消息体;如果请求方法不包括为实体主体定义的语义,则在处理请求时应该忽略消息主体
规范中没有任何内容说主体不能包含在任何方法中。并且所有代理、服务器等都必须包含正文。是否忽略正文取决于处理程序(您)。
至于 GET 方法,没有任何说明它不能包含主体。
这意味着只要您的 Web 服务器支持,您就可以使用 GET 正文。