【问题标题】:How do I use an api with an api key in Xcode?如何在 Xcode 中使用带有 api 密钥的 api?
【发布时间】:2019-03-14 19:41:33
【问题描述】:

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

网站说要使用 get 请求 -> “GET https://api.fortnitetracker.com/v1/store

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

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

如果有人能告诉我如何设置它,那对我来说意义重大。谢谢。

【问题讨论】:

  • 嗯,该消息很容易解释,您需要在请求的标头中发送 API 密钥。 This question 要求这样做,使用 Alamofire 库(您也应该使用它)。 headers 参数应该像 let headers: HTTPHeaders = ["api_key_header_name" : "my_api_key"] 这样创建。如何命名该标头取决于 API,请查看他们的文档。

标签: ios swift api


【解决方案1】:

这里有一个快速的答案,希望可以为您指明正确的方向。

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

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

玩转 Postman 拨打电话,确保它们正常工作等。这比使用 Xcode 设置断点等要容易得多。一旦你弄清楚了你将要拨打什么电话正在制作...然后转到 Xcode。

一旦您的GETs 回退 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。这就是您创建 URL 以提供给您的 URLRequests 的方式。

  • 第 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()
}

【讨论】:

  • 这对你和@Zaid 都有很大帮助。我还添加了一种让 json 打印得更好的方法,然后将其注释掉。非常感谢。
  • 我一直在你的鞋子那里有一个答案,但有很多空白。当您“掌握它”时,API 会很有趣。我想我可能会给我的孩子一个密钥,这样他就可以修改那个 API。 ?
【解决方案2】:

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

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()
}

【讨论】:

  • 哈哈! OP 听起来像是从零开始,所以我投入的比我需要的多。 ? 你的回答肯定更简洁。
猜你喜欢
  • 2023-02-04
  • 1970-01-01
  • 2015-10-04
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多