对查询字符串感到非常困惑

Posted

技术标签:

【中文标题】对查询字符串感到非常困惑【英文标题】:Massively Confused About Query Strings 【发布时间】:2017-01-17 04:34:48 【问题描述】:

我正在使用AlamoFire 发出 API 请求。连接到 API 非常简单,但最大的挑战是查询 API。

我正在尝试创建一个类似这样的查询字符串:

https://api-fxtrade.oanda.com/v3/instruments/USD_CAD/candles?price=BA&from=2016-10-17T15%3A00%3A00.000000000Z&granularity=M1

我觉得我已经在互联网上探索了很多关于这个主题的文档,但都没有得到足够的结果..

有没有人可以分享有关查询字符串的任何资源或建议?

【问题讨论】:

您的问题是关于如何在 Swift 中为 AlamoFire 请求生成查询字符串,或者如何提取查询字符串的组件?还是别的什么? 我的问题是如何生成查询字符串 【参考方案1】:

创建查询字符串的最简单方法是使用URLComponents,它会为您处理所有百分比转义:

// Keep the init simple, something that you can be sure won't fail
var components = URLComponents(string: "https://api-fxtrade.oanda.com")!

// Now add the other items to your URL query
components.path = "/v3/instruments/USD_CAD/candles"
components.queryItems = [
    URLQueryItem(name: "price", value: "BA"),
    URLQueryItem(name: "from", value: "2016-10-17T15:00:00.000000000Z"),
    URLQueryItem(name: "granularity", value: "M1")
]

if let url = components.url 
    print(url)
 else 
    print("can't make URL")

那是纯 Swift,你应该熟悉它。一旦你掌握了基础知识,Alamofire 可以为你简化它:

let params = [
    "price": "BA",
    "from": "2016-10-17T15:00:00.000000000Z",
    "granularity": "M1"
]
Alamofire.request("https://api-fxtrade.oanda.com/v3/instruments/USD_CAD/candles", parameters: params)
    .responseData  response in
        // Handle response
    

【讨论】:

非常感谢您的帮助!

以上是关于对查询字符串感到非常困惑的主要内容,如果未能解决你的问题,请参考以下文章

对 C# 6.0 中的字符串插值感到困惑 [重复]

对 Python 返回 JSON 作为字符串而不是文字感到困惑

Google Protocol Buffers - 对编码解码 base64 char * c 字符串协议缓冲区数据感到困惑

对 Interlocked.Increment 和 Lock 的使用感到困惑

对这个带有 & 不带 = 的代码片段返回类型感到非常困惑

CSS 媒体查询 - 对重叠和顺序感到困惑