【问题标题】:How to make an API call(Mashape) with the below parameters using Alamofire?如何使用 Alamofire 使用以下参数进行 API 调用(Mashape)?
【发布时间】:2017-12-20 20:38:05
【问题描述】:

我在 Swift 3 for iOS 中构建了一个小型应用程序,而我用于获取应用程序数据的 api 有一个 cURL 请求。 API的cURL请求如下:

    //        curl -X POST --include 'https://myApi.mashape.com/' \
    //        -H 'X-Mashape-Key:APIKEY' \
    //        -H 'Content-Type: application/json' \
    //        -H 'Accept: application/json' \
    //        --data-binary '{"parameter1":"value","parameter2":"value"}'

使用 Swift 和 Alamofire,这是我使用 POST 方法获取数据的 api 调用。

    func networkFunction(completed: @escaping DownloadComplete) {


    let headers: HTTPHeaders = [
        "X-Mashape-Key":"APIKEY",
        "Content-Type":"application/json",
        "Accept": "application/json"
    ]
    let parameters: Parameters = [
        "parameter1" : "value",
        "parameter2" : "value"
    ]
    Alamofire.request("https://myApi.mashape.com",method: .post,parameters: parameters, headers: headers).responseJSON
        { response in

            print("Request: \(String(describing: response.request))")   // original url request
            print("Response: \(String(describing: response.response))") // http url response
            print("Result: \(response.result)")

            let result = response.result
            print(response.description)

            if let dict = result.value as? Dictionary<String , AnyObject> {
                if let parameter1 = dict["parameter1"] as? String {
                    self._parameter1= parameter1

                }
                if letparameter2 = dict["parameter2"] as? String {
                    self._parameter2 = parameter2
                    print(parameter2)
                }
            }
        completed()
        }

    }

当我执行上述操作时,我在控制台中收到错误请求。 我试过改变函数调用,但结果是一样的。上面的 API 调用出了什么问题?

编辑:我在下面的答案中添加了解决方案。

【问题讨论】:

  • 您似乎没有使用结束路径,只是使用绝对网址。检查您是否使用正确的 url 和端点,例如 https://myApi.mashape.com/someEndpoint

标签: ios swift api alamofire mashape


【解决方案1】:

替换代码中的那一行..

Alamofire.request(URLRequest(url: URL(string:"https://myApi.mashape.com")!),method: .post,parameters: parameters, headers: headers).responseJSON

【讨论】:

    【解决方案2】:

    我发现错误源于以下事实:

    1. 参数的顺序不对
    2. 我省略了添加 JSON 编码参数。

    最终调用如下所示:

    Alamofire.request("https://myAPI.mashape.com/beta",method: .post,parameters: parameters,encoding: JSONEncoding.default, headers: headers).responseJSON
            { response in
              ...
              ...
              ...
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      相关资源
      最近更新 更多