如何使用Alamofire和swift 4为Clarifai API编写POST请求?

时间:2018-05-31 15:45:35

标签: json swift post alamofire clarifai

我对Swift中的网络相对较新,尤其是POST请求。我已经阅读了Clarifai API和Alamofire的文档,但还没有弄清楚如何使用Alamofire编写工作请求。到目前为止,我已经找到了以下代码,它创建了一个符合Clarifai API的结构,它希望请求的结构如下:

curl -X POST \
  -H "Authorization: Key YOUR_API_KEY" \
 -H "Content-Type: application/json" \
-d @https://api.clarifai.com/v2/models/aaa03c23b3724a16a56b629203edc62c/outputs << FILEIN
 {
   "inputs": [
    {
    "data": {
      "image": {
        "base64": "$(base64 /home/user/image.png)"
      }
    }
  }
]
}
FILEIN

这是我发现的快速代码:

struct ImageObj:Codable {             让base64:String         }

    struct DataObj: Codable {
        let image: ImageObj
    }

    struct InputObj: Codable {
        let data: DataObj
    }

    struct InputsContainerObj: Codable {
        let inputs: [InputObj]
    }

    let imageObj = ImageObj(base64: "abc123")
    let dataObj = DataObj(image: imageObj)
    let inputObj = InputObj(data: dataObj)
    let inputsContainerObj = InputsContainerObj(inputs: [inputObj])

    let encoder = JSONEncoder()
    do {
        let jsonData = try encoder.encode(inputsContainerObj)
        let jsonString = String(data: jsonData, encoding: .utf8)!

        print(jsonString) //{"inputs":[{"data":{"image":{"base64":"abc123"}}}]}
    } catch _ as NSError {

    }

现在我不知道在这之后应该做些什么。我尝试使用POST编写Alamofire请求,但是卡在参数上?和可编码?对于参数我尝试了类似的东西:

let parameters: Parameters = [
        "Authorization: Key":"f58fce8f9cac4a6a9e6d45a57223599a",
    "Content-Type":"application/json"]

但我不知道它是否正确。如果有人能帮助我,我会非常感激!祝每个人都过得愉快!

1 个答案:

答案 0 :(得分:1)

看起来您已经根据对象和标头构造了jsonString(您将其称为“参数”)。您应该可以通过以下方式发送:

let headers: [String: AnyObject] = [
    "Authorization: Key":"xxxxxxxxxxxxxxxxxxxxxxxx",
    "Content-Type":"application/json"
]

Alamofire.request(.POST, "https://api.clarifai.com/v2/inputs", parameters: jsonString, headers: headers, encoding: .JSON)
    .responseJSON { request, response, JSON, error in
        print(response)
        print(JSON)
        print(error)
    }

我已经将它们重命名为标题,以使其在上方更加清晰。请注意,我已经屏蔽了授权密钥(在答案和原始问题中都包括在内)-通常,您不想将其公开。