公共web服务通过url接受配置选项。每个请求将使用200个可用选项中的大约20个,每个选项都是true
或false
值。服务是无状态的,响应将被缓存。
迄今为止的典型例子:http://api.milk.shake/?likesVanilla&likesChocolate=true&likesStrawberry=true
假设每个值都为false,除非指定,因此缩写为:http://api.milk.shake/?likesVanilla&likesChocolate&likesStrawberry
生成的url仍然很长,不适合20个选项。我怎样才能使它们更短、更整齐,并在野外保持有效和可用?
在下面的示例中,假设url重写将uri转换为查询参数
方法1-为每个选项指定一个字符
例如A = likesVanilla
,B = likesChocolate
,C = likesStrawberry
典型的呼叫是http://api.milk.shake/ABC
失败的原因是URLs can usea-z、a-z、0-9和$-_.+!*'(),
仅涵盖了可用200个选项中的73个。
方法2-二进制表示
例如1 = likesVanilla
,2 = likesChocolate
,4 = likesStrawberry
典型的调用是http://api.milk.shake/7
(可能是dec或hex)
其中7 = 1 + 2 + 4 = vanilla + chocolate + strawberry
失败,因为指数是指数型的-第63个选项的数组索引是4611686018427387904
,第64个选项中断php,除非我测试错误。
高效,因为参数顺序是统一的,并且所有类似的请求都被缓存。
方法3-用1或2分组
我可以在url中定义选项组。这限制了每组中可用选项的数量,并允许方法1或2。
例如:
第一组选项A = likesVanilla
,B = likesChocolate
,C = likesStrawberry
第2组选项
典型的呼叫是A = likesCream
(第一组B = likesSprinkles
第二组等)
到目前为止,这是我的首选方法。可能是在回答我自己的问题!
方法4-转义字符
如果字符escaped correctly则大约有220个字符可用。
典型的呼叫是http://api.milk.shake/ABC/AB
最多220个选项不是未来的证明,但可以用于方法3。看起来不整洁。
最佳答案
选项2可以工作,如果你把选项分成更小的集合,比如说4个50位的集合。
刚刚意识到你已经说过了和选项3一样多的话,还没有那么远。但是,您可以使用BCMath作为一个大整数来执行此操作。
关于php - 在URL查询中表示〜200个 bool 值标志,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35895409/