公共Web服务通过URL接受配置选项。每个请求将使用大约20个可用的200个选项,每个选项都是true
或false
值。该服务是无状态的,响应将被缓存。
到目前为止的典型例子:
http://api.milk.shake/?likesVanilla&likesChocolate=true&likesStrawberry=true
假设每个值都为false,除非指定,因此缩写为:
http://api.milk.shake/?likesVanilla&likesChocolate&likesStrawberry
生成的网址仍然很长且不适合20个选项。如何让它们更短,更整洁并保持它们在野外有效和可用?
在下面的示例中,假设URL重写将URI转换为查询参数
方法1 - 为每个选项指定一个字符
例如A = likesVanilla
,B = likesChocolate
,C = likesStrawberry
典型的通话是http://api.milk.shake/ABC
失败,因为URLs can use A-Z,a-z,0-9和$-_.+!*'(),
仅覆盖了可用的200个选项中的73个。
方法2 - 二进制表示
例如1 = likesVanilla
,2 = likesChocolate
,4 = likesStrawberry
典型的呼叫是http://api.milk.shake/7
(可能是十六进制或十六进制)
7 = 1 + 2 + 4 = vanilla + chocolate + strawberry
失败,因为指数是指数级的 - 第63个选项的数组索引为4611686018427387904
,第64个选项会破坏PHP,除非我测试错误..
高效,因为参数顺序是统一的,所有类似的请求都被缓存。
方法3 - 分组为1或2
我可以在URL中定义选项组。这限制了每个组中可用选项的数量,并允许方法1或2。
例如:
第1组选项A = likesVanilla
,B = likesChocolate
,C = likesStrawberry
第2组选项A = likesCream
,B = likesSprinkles
典型的通话是http://api.milk.shake/ABC/AB
(第一组/
第二组等)
到目前为止,这是我首选的方法。可能会回答我自己的问题!
方法4 - 逃脱字符
如果字符为escaped correctly,则可以使用大约220个字符。
典型的通话是http://api.milk.shake/%41%42%43
最多220个选项不是面向未来的,但可以与方法3一起使用。看起来不整洁。
答案 0 :(得分:1)
如果您将选项分解为较小的集合,例如4组,每组50位,则选项2可以工作。
刚刚意识到你已经像选项3那样已经说过了,没有那么远。但是,您可以使用BCMath将其作为一个大整数。
答案 1 :(得分:-1)
你有什么理由需要它作为GET吗?有了这么多潜在参数,看起来POST似乎是一个更好的选择,可以解决URL长度问题。