Rest API를 호출하기 위해 가장 유명한 Swift 라이브러리인 Alamofire를 사용해보겠습니다.
Alamofire에 대한 정보는 다음 주소에서 확인할 수 있습니다.
https://github.com/Alamofire/Alamofire
우선 CocoaPods를 이용하여 설치를 진행하겠습니다.
테스트에 사용할 API를 curl을 통해 다음과 같이 확인하였습니다.
이제 확인한 API를 Alamofire를 통해 사용해보겠습니다.
//
// RestViewController.swift
// Sample
//
// Created by francis on 2020/04/24.
// Copyright © 2020 Aircook. All rights reserved.
//
import UIKit
import Alamofire
class RestViewController: UIViewController {
@IBOutlet weak var resultTextView: UITextView!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.resultTextView.text = ""
self.resultTextView.textContainerInset = UIEdgeInsets(top: 15, left: 15, bottom: 15, right: 15);
//let headers: HTTPHeaders = [
// "Authorization": "Basic VXNlcm5hbWU6UGFzc3dvcmQ=",
// "Accept": "application/json"
//]
//let headers: HTTPHeaders = [
// .authorization("Basic VXNlcm5hbWU6UGFzc3dvcmQ="),
// .accept("application/json")
//]
Logger.debug("view did load")
//https://swapi.dev/api/films
guard let url = URL(string: "https://httpbin.org/get") else {
return
}
AF.request(url,
method: .get,
parameters: ["args1": "value1"],
interceptor: Interceptor(indicator: activityIndicator))
.validate()
.responseJSON(completionHandler: { res in
var result: String = "";
switch res.result {
case .success(let data):
if let jsonObject = data as? [String: Any] {
if let origin = jsonObject["origin"] {
Logger.debug("origin is \(origin)")
result += "origin: \n"
result += "\(origin as! String) \n"
}
if let headers = jsonObject["headers"] as? [String: String] {
//Logger.debug("headers is \(headers)")
if let host = headers["Host"], let userAgent = headers["User-Agent"] {
Logger.debug("host is \(host), userAgent is \(userAgent)")
result += "host: \n"
result += "\(host) \n"
result += "userAgent: \n"
result += "\(userAgent) \n"
}
}
self.resultTextView.text = result
}
case .failure(let err):
Logger.debug("error is \(String(describing: err))")
}
self.activityIndicator.stopAnimating()
self.activityIndicator.isHidden = true
})
}
}
// 이렇게 해봤는데 되네..
class Interceptor: RequestInterceptor {
private let indicator: UIActivityIndicatorView
init(indicator: UIActivityIndicatorView){
self.indicator = indicator
}
func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) {
Logger.debug("interceptor adapt..")
DispatchQueue.main.async {
self.indicator.startAnimating()
self.indicator.isHidden = false
}
completion(.success(urlRequest))
}
}
다음과 같이 콘솔창에서 결과를 확인할 수 있습니다.
다음에는 JSON 변환을 SwiftyJSON을 통하여 진행해야 겠습니다.
'ios' 카테고리의 다른 글
Kakao Maps API with Swift (7) | 2020.08.21 |
---|---|
Xcode 에서 GitLab 연동하기 (0) | 2020.04.22 |
위치서비스를 위한 권한 상태값 가져오기 (0) | 2020.04.20 |
Location updates in Background Modes (0) | 2020.04.19 |
Migration in Realm (0) | 2020.04.18 |