如果GET URI太长,我应该创建GET REST端点的后期版本吗?

如果GET URI太长,我应该创建GET REST端点的后期版本吗?,rest,post,get,http-post,api-design,Rest,Post,Get,Http Post,Api Design,我有一个REST端点GET/api/rules。它使用多个查询参数进行筛选/查询,如类型、名称、所有者、说明、以及标记。因此,您可能会得到如下URI: GET/api/rules?name=rule1,rule2&owner=john,jane&description=VeryLongDescription 具体地说,我担心查询的描述可能非常长,并使URI太长(我忘记了限制)。我是否应该为从服务器获得414uri太长响应的用户创建同一端点的发布版本 我的意思是,一般来说,什么时候发表一篇文章来获

我有一个REST端点
GET/api/rules
。它使用多个查询参数进行筛选/查询,如
类型
名称
所有者
说明
、以及
标记
。因此,您可能会得到如下URI:

GET/api/rules?name=rule1,rule2&owner=john,jane&description=VeryLongDescription

具体地说,我担心查询的描述可能非常长,并使URI太长(我忘记了限制)。我是否应该为从服务器获得
414uri太长
响应的用户创建同一端点的发布版本


我的意思是,一般来说,什么时候发表一篇文章来获取资源才有意义?任何时候引入查询参数?

理论上URI都没有限制,但实际上它们可能受到实现的限制。如果您必须绕过实现施加的限制,而这些限制不是协议固有的,那么您应该尝试将它们与应用程序分离

如果您是一个纯粹主义者,通过POST方法支持功能的标准方式或多或少是使用
x-http-method-override
头,如果将其实现为请求预处理器,则可以将其与应用程序解耦。您可以让预处理器将POST请求转换为应用程序期望的GET请求,将有效负载转换为查询字符串

下面是Google Translate API中这种方法的一个示例:

如果你不是一个纯粹主义者,或者这对你的用户来说太复杂了,或者你不想使用一个自定义的头,我认为制作一个获取资源的POST端点是很好的,只要它被正确地记录并且被查询的资源由URI标识