如何在Xcode中使用带有api密钥的api?

时间:2018-10-10 00:26:20

标签: ios swift api

我目前正在尝试将Tracker Networks API实施到Xcode项目中。我知道如何使用Node.js和html来做到这一点,但似乎无法在Xcode中使用Swift来解决。

网站说使用获取请求,使用此请求->“ GET https://api.fortnitetracker.com/v1/store

然后他们说:“要使用我们的API,我们要求您使用API​​密钥。要使用API​​密钥,您需要将其作为请求的标头传递。”

这是我的API密钥(伪api密钥): TRN-Api-Key:d93742a5-94d0-482c-8714-23c6660225555

如果有人可以告诉我如何进行设置,这对我来说意义重大。谢谢。

2 个答案:

答案 0 :(得分:1)

使用以下示例代码将其添加到标题字段:

if let url = URL(string: "https://api.fortnitetracker.com/v1/store") {
    let request = URLRequest(url: url)
    request.addValue("d93742a5-94d0-482c-8714-23c6660225555", forHTTPHeaderField: "TRN-Api-Key"
    request.httpMethod = "GET"
    let dataTask = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
        //handle response here
    }
    dataTask.resume()
}

答案 1 :(得分:0)

这是一个快速的答案,希望能为您指明正确的方向。

  • 第1步:下载Postman
  • 第2步:打开Postman,将您的网址粘贴到GET字段中
  • 第3步:点击“标题”标签。

TRN-Api-Key将是key,您的API密钥将是该值。看起来像这样。

enter image description here

与Postman进行通话,确保它们可以正常工作,等等。这比通过Xcode设置断点等等进行操作要容易得多。一旦确定,您将知道要拨打的电话正在制作...然后转到Xcode。

一旦您将GET退回JSON,然后将其剪切并粘贴到类似https://app.quicktype.io的地方。对于我正在使用的示例URL中的端点,它可以为您提供:

struct Response: Codable {
    let items: [Item]
}

struct Item: Codable {
    let metadata: [Metadatum]
}

struct Metadatum: Codable {
    let key: String
    let value: String?
}
  • 第4步:调查URLComponents。这就是您创建用于馈送给URLRequests的URL的方式。

  • 步骤5:制作URLRequests时,需要将API密钥名称和API密钥值转储到标头中。在文档页面上应该是不言自明的。

这是基本的“诗人物理学”代码:

let fortniteChallengesURL = URL(string: "https://api.fortnitetracker.com/v1/challenges")
if let unwrappedURL = fortniteChallengesURL {
    var request = URLRequest(url: unwrappedURL)
    request.addValue("YOUR API KEY", forHTTPHeaderField: "TRN-Api-Key")
    // Make your request and handle the response
}

或者(也许最好),您可以使用Alamofire之类的网络框架来发出请求。这是Alamofire中的how to customize headers

这里是how to use the Codable structs,用于解析来自端点的收益。

这里是使用Apple的“工厂”类的成品,如果您想将其倾倒在操场上。您需要自己的API密钥。

struct Response: Codable {
    let items: [Item]
}

struct Item: Codable {
    let metadata: [Metadatum]
}

struct Metadatum: Codable {
    let key: String
    let value: String?
}

let fortniteChallengesURL = URL(string: "https://api.fortnitetracker.com/v1/challenges")
if let unwrappedURL = fortniteChallengesURL {
    var request = URLRequest(url: unwrappedURL)
    request.addValue("YOUR API KEY HERE", forHTTPHeaderField: "TRN-Api-Key")
    let dataTask = URLSession.shared.dataTask(with: request) { (data, response, error) in
        // you should put in error handling code, too
        if let data = data {
            do {
                let json = try JSONDecoder().decode(Response.self, from: data) as Response
                // HERE'S WHERE YOUR DATA IS
                print(json.items.count)
            } catch {
                print(error.localizedDescription)
            }
        }
    }
    dataTask.resume()
}