기간

2022/03/14 → 2022/03/20

전공

소프트웨어학부 컴퓨터과학전공

학번

1815364

이름

@김도이


1) Alamofire와 RESTful API 공부 * feat. Retrofit

Alamofire

https://github.com/Alamofire/Alamofire

https://github.com/Alamofire/Alamofire

Alamofire는 Swift로 쓰인 HTTP 네트워킹 라이브러리

JSON 파싱 등 네트워킹을 위한 다양한 메서드를 제공

애플에서 기본으로 제공하는 URLSession을 통해서도 HTTP 통신이 가능하지만 Alamofire를 쓰는 이유는 코드의 간소화. 여러 기능을 직접 구축하지 않아도 (e.g. Status 검증 코드 등) 사용할 수 있도록 제공하는 라이브러리.

Alamofire를 이용한 코드의 길이가 눈에 띄게 짧은 것을 확인할 수 있다.

// Alamofire
AF.request("<https://api.mywebserver.com/v1/board>", method: .get, parameters: ["title": "New York Highlights"])
    .validate(statusCode: 200..<300)
    .responseDecodable { (response: DataResponse) in
        switch response.result {
        case .success(let board):
            print("Created board title is \\(board.title)") // New York Highlights
        case .failure(let error):
            print("Board creation failed with error: \\(error.localizedDescription)")
        }
}
// URLSession
enum Error: Swift.Error {
    case requestFailed
}

// Build up the URL
var components = URLComponents(string: "<https://api.mywebserver.com/v1/board>")!
components.queryItems = ["title": "New York Highlights"].map { (key, value) in
    URLQueryItem(name: key, value: value)
}

// Generate and execute the request
let request = try! URLRequest(url: components.url!, method: .get)
URLSession.shared.dataTask(with: request) { (data, response, error) in
    do {
        guard let data = data,
            let response = response as? HTTPURLResponse, (200 ..< 300) ~= response.statusCode,
            error == nil else {
            // Data was nil, validation failed or an error occurred.
            throw error ?? Error.requestFailed
        }
        let board = try JSONDecoder().decode(Board.self, from: data)
        print("Created board title is \\(board.title)") // New York Highlights
    } catch {
        print("Board creation failed with error: \\(error.localizedDescription)")
    }
}