我需要设计一个RESTful查询应用程序接口,它基于一些过滤器返回一组对象。通常的HTTP方法是GET。唯一的问题是,它可能至少有十几个过滤器,如果我们将所有过滤器都作为查询参数传递,URL可能会变得很长(长到足以被某些防火墙阻止)。
减少参数的数量不是一种选择。
我能想到的一种替代方法是在URI上使用POST方法,并将过滤器作为POST主体的一部分发送。这是否有悖于RESTfull (对查询数据进行POST调用)。
有人有更好的设计建议吗?
发布于 2013-01-10 17:02:56
许多人已经接受了这样的做法,即查询字符串太长或太复杂的GET (例如,查询字符串不容易处理嵌套数据)可以作为POST发送,复杂/长数据表示在请求的主体中。
在HTTP规范中查找POST规范。它是非常广泛的。(如果你想驾驶一艘战舰穿过休息区的漏洞...使用POST。)
你失去了GET语义的一些好处...就像自动重试一样,因为GET是幂等的,但是如果你能接受这一点,用POST处理非常长或复杂的查询可能会更容易一些。
(哈...我最近发现,根据HTTP规范,GET可以包含文档体。有一节说,套用一下,“任何请求都可以有一个文档体,除了这一节列出的那些”……并且它引用的部分没有列出任何内容。我搜索并找到了HTTP作者正在讨论这一点的一个帖子,这是有意的,这样路由器等就不必区分不同的消息。然而,在实践中,许多基础设施组件确实丢弃了GET的主体。因此,您可以使用主体中表示的过滤器,比如POST,但这样做是在掷骰子。)
https://stackoverflow.com/questions/14202257
复制相似问题