10

如果你有一个 API 并且仅仅因为 URL 长度限制和请求中传递复杂的参数而支持 POST 操作,你还能说你有一个 RESTful 架构吗?

以上基本上暗示的是,对于这个特定的(只读)API,GET 和 POST 之间没有语义差异,因此可以用 GET 完成的操作也可以用 POST 完成(但反之则不然)到限制)。

这仍然会使架构的风格成为一种 RESTful 风格吗?

4

5 回答 5

5

从技术上讲,您没有违反任何约束。但是,您正在严重减少请求的自我描述性。这将导致失去缓存响应的能力。能够缓存响应是构建有效 REST 系统所需的基本功能。

于 2011-05-10T11:27:27.573 回答
1

您肯定会失去 HTTP 为 GET 请求提供的功能。例如,代理对 GET 请求(幂等性、可缓存性)做出某些假设。

POST 本身没有任何问题,但也许 REPORT 方法更合适。

于 2011-05-10T11:00:48.017 回答
0

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

于 2011-05-10T09:43:17.587 回答
0

所以这里的问题是关于宁静的架构而不是宁静的网络服务。如果我们按照Wiki-RestfulArch-Constraints上提供的信息进行 ,是的。

于 2011-05-10T09:54:39.647 回答
0

为什么不直接切换到在 GET 中包含正文而不是使用查询字符串?

更新

RFC 说明如下:

服务器应该在任何请求上读取并转发消息体;如果请求方法不包括为实体主体定义的语义,则在处理请求时应该忽略消息主体

规范中没有任何内容说主体不能包含在任何方法中。并且所有代理、服务器等都必须包含正文。是否忽略正文取决于处理程序(您)。

至于 GET 方法,没有任何说明它不能包含主体。

这意味着只要您的 Web 服务器支持,您就可以使用 GET 正文。

于 2011-05-10T11:19:00.327 回答