我们正在内部构建一个API,通常需要传递带有多个值的参数。
他们使用的方式是:mysite.com?id=1&id=2&id=3
而不是:mysite.com?id=1,2,3
我更喜欢第二种方式,但我想知道第一种方式是否真的是错误的?
我们正在内部构建一个API,通常需要传递带有多个值的参数。
他们使用的方式是:mysite.com?id=1&id=2&id=3
而不是:mysite.com?id=1,2,3
我更喜欢第二种方式,但我想知道第一种方式是否真的是错误的?
searchpart
,应该在?
之后,但似乎没有详细说明其格式。
http://<host>:<port>/<path>?<searchpart>
我没有(费心)查看定义它的RFC标准。(任何了解此项知识的人请在评论中留下参考资料。)但实际上,mysite.com?id=1&id=2&id=3
已经是浏览器在表单中包含重复字段时产生的方式,通常是复选框。在这个w3schools示例页面中可以看到它的应用。因此,无论您使用什么编程语言,已经提供了一些辅助函数来解析这样的输入,并可能返回一个列表。
当然,您也可以采用自己的方法,比如mysite.com?id=1,2,3
,在这种特定情况下也不错。但是,您需要实现自己的逻辑来生成和消耗这种格式。现在,您可能需要自己考虑处理一些边缘情况,例如:如果输入格式不正确,会发生什么,例如mysite.com?id=1,2,
?如果逗号本身也可以作为有效输入,例如mysite.com?name=Doe,John|Doe,Jane
,您是否需要发明另一种分隔符?您是否会使用json字符串作为值,例如mysite.com?name=["John Doe", "Jane Doe"]
?等等等等。您的具体情况可能会有所不同。
vehicle1=Bike&vehicle2=Car&vehicle3=Boat
。我认为问题是在询问vehicle=Bike&vehicle=Car&vehicle=Boat
吗? - vdwees我猜这取决于你使用的技术,它如何变得方便。我目前面临着同样的问题,使用currency=USD,CHF
或currency=USD¤cy=CHF
我正在使用Thymeleaf,并且使用第二个选项使工作变得容易,然后我可以请求类似于:${param.currency.contains(currency.value)}
。当我尝试使用第一个选项时,它似乎将“数组”视为字符串,因此我需要先拆分,然后再进行包含,这导致我的代码更加混乱。
只是我的50美分 :-)
$_GET ['id']
。您必须使用此格式:mysite.com?id [] = 1&id [] = 2&id [] = 3
才能获得数组。 - gligoran
?a=1&a=2,3,4&a=5
被解析为a = [1, 2, 3, 4, 5]
。 - vitaly-t