如何处理冲突的HTTP GET参数

时间:2013-05-15 09:44:18

标签: http rest parameters get api-design

我正在设计一个支持HTTP GET参数的REST API。在大多数情况下,我只接受参数的一个值。但是我应该如何处理重复的参数?

例如,Stack Overflow接受GET参数tab

http://stackoverflow.com/?tab=hot
http://stackoverflow.com/?tab=featured

允许重复参数,传递这两个值是正确的:

http://stackoverflow.com/?tab=hot&tab=featured

我该怎么办?只需使用第一个值,从而默默地忽略其他值(SO的作用)或返回错误,说明只允许一个值?在后一种情况下,我应该使用什么状态代码返回什么错误(可能是409 Conflict)?

2 个答案:

答案 0 :(得分:1)

我同意VKSingla这是一个设计决定,因此在这个问题上没有正确答案的意见。

如果你问我,我会制作一个'严格'的API,只是抛出一个错误(我会确保它是一个明确的错误,而不只是一个无法帮助用户的随机代码)。我更喜欢这种严格的方法,因为如果用户代码两次添加相同的参数,则可能是用户代码中某处的错误。尽早揭示此错误有助于用户尽快发现错误。

如果您选择忽略其他参数,请确保用户知道此行为。例如,文档'在第一个之后的所有重复参数将被忽略'。像这样的未记录的'魔术行为'会使代码非常难以调试。

答案 1 :(得分:0)

这是设计决策。它是您API设计的关于您希望它如何运作的设计 如果你选择忽略任何一个,那么问题是哪个? 所以,这只是一场冲突。或者是  您的API可以使用组合数据进行响应,但对此的请求应该是这样的

https://stackoverflow.com/?tab=hot,featured

另请参阅此问题Extra Query parameters in the REST API Url