在URL查询中表示约200个布尔标志

时间:2016-03-09 15:12:23

标签: php url

公共Web服务通过URL接受配置选项。每个请求将使用大约20个可用的200个选项,每个选项都是truefalse值。该服务是无状态的,响应将被缓存。

到目前为止的典型例子:

http://api.milk.shake/?likesVanilla&likesChocolate=true&likesStrawberry=true

假设每个值都为false,除非指定,因此缩写为:

http://api.milk.shake/?likesVanilla&likesChocolate&likesStrawberry

生成的网址仍然很长且不适合20个选项。如何让它们更短,更整洁并保持它们在野外有效和可用?

在下面的示例中,假设URL重写将URI转换为查询参数

方法1 - 为每个选项指定一个字符

例如A = likesVanillaB = likesChocolateC = likesStrawberry

典型的通话是http://api.milk.shake/ABC

失败,因为URLs can use A-Z,a-z,0-9和$-_.+!*'(),仅覆盖了可用的200个选项中的73个。

方法2 - 二进制表示

例如1 = likesVanilla2 = likesChocolate4 = 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 = likesVanillaB = likesChocolateC = likesStrawberry

第2组选项A = likesCreamB = likesSprinkles

典型的通话是http://api.milk.shake/ABC/AB(第一组/第二组等)

到目前为止,这是我首选的方法。可能会回答我自己的问题!

方法4 - 逃脱字符

如果字符为escaped correctly,则可以使用大约220个字符。

典型的通话是http://api.milk.shake/%41%42%43

最多220个选项不是面向未来的,但可以与方法3一起使用。看起来不整洁。

2 个答案:

答案 0 :(得分:1)

如果您将选项分解为较小的集合,例如4组,每组50位,则选项2可以工作。

刚刚意识到你已经像选项3那样已经说过了,没有那么远。但是,您可以使用BCMath将其作为一个大整数。

答案 1 :(得分:-1)

你有什么理由需要它作为GET吗?有了这么多潜在参数,看起来POST似乎是一个更好的选择,可以解决URL长度问题。