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