(一般)为什么Alamofire(ios)排序查询字符串参数

时间:2015-09-15 04:15:49

标签: ios alamofire

我在Alamofire代码库中发现,他们在将查询字符串编码为url之前对其进行排序。它背后有什么理由吗?

https://github.com/Alamofire/Alamofire/blob/092022fb5b1580e28ce1f1344484e04820c168e0/Source/ParameterEncoding.swift#L92

func query(parameters: [String: AnyObject]) -> String {
            var components: [(String, String)] = []
            // why sort the keys?
            for key in Array(parameters.keys).sort(<) {
                let value = parameters[key]!
                components += queryComponents(key, value)
            }

            return (components.map { "\($0)=\($1)" } as [String]).joinWithSeparator("&")
        }

由于

1 个答案:

答案 0 :(得分:0)

一个可能的原因是没有定义字典的遍历顺序。因此,即使对于相同的请求,如果不进行排序,查询也可能是不同的。如果参数顺序很重要(可能是由于服务器错误),这可能会导致一些不良行为。它也会使测试更难。

通过对参数进行排序,无论操作系统版本和平台如何,我们都可以保证生成的查询字符串始终相同。