如何将大量输入参数传递给RESTful服务?

如何将大量输入参数传递给RESTful服务?,rest,asp.net-web-api,Rest,Asp.net Web Api,我有一个RESTful服务,它通过提供的ID列表返回关于机器的详细数据。获取api/machine/ http://service.com/api/machine/1,2,3,4 到目前为止,这还不错,因为我一次只能得到少量的机器,但现在我需要得到所有的机器(超过1000台)。这超过了URL上2000个字符的限制 我已经得到了下面两个选项来工作,我正在寻找一些社区反馈意见 选项1:拆分我的GET。使用ID的子集进行多个调用。优点:我正在做一个get,所以使用HTTP动词get是有意义的。缺点:

我有一个RESTful服务,它通过提供的ID列表返回关于机器的详细数据。获取api/machine/

http://service.com/api/machine/1,2,3,4
到目前为止,这还不错,因为我一次只能得到少量的机器,但现在我需要得到所有的机器(超过1000台)。这超过了URL上2000个字符的限制

我已经得到了下面两个选项来工作,我正在寻找一些社区反馈意见

选项1:拆分我的GET。使用ID的子集进行多个调用。优点:我正在做一个get,所以使用HTTP动词get是有意义的。缺点:如果一个新加入该服务的人不知道这个限制,或者不使用我的客户端,这将导致问题


选项2:添加PUT/POST方法,并在正文中包含ID的完整列表。优点:打一个电话获取所有数据。缺点:我现在正在做一个PUT/POST的get。

Facebook API使用的另一个选项是创建一个“/batch”POST方法,该方法可用于一次性发出多个请求

因此,与其拥有,。。。。您将有一批带有/machine/1、/machine/2、/machine/3等的请求

其优点是,您可以保持干净的RESTful URL(没有更多的值),并且它的伸缩性非常好,因为您可以根据需要批量处理任意多的请求

缺点是它的构建稍微复杂一些


请参见此处以了解更多信息-

您最好的做法可能是在选项2的行中,您可以在消息正文中创建一个JSON,其中包含要发送的数字数组。如果可能仍然太大,您可以将其拆分为多条消息,当您收到其中一条消息的响应时,您将发送队列中的下一个项目,依此类推。

Rest服务在您手中,还是您有机会影响Rest服务?如果是,为什么不使用间隔:
http://rest/api/1-2000
如果没有,我会使用选项2,我会在他的第一条评论中使用@Alu suggest之类的方法,某种分页。清单2000的结果到底有什么用?发布海豚名单并不是一件轻松愉快的事。@Alu我完全可以控制这项服务,但范围不起作用的原因很复杂。也许我正在使用的ID的一个更准确的例子会有所帮助。(示例ID:3432341556885689)。然后我会按照第二个答案的建议做一些事情。