감자주먹밥

[IOS] Alamofire! API사용해보기 본문

IOS/UIKit

[IOS] Alamofire! API사용해보기

JustHm 2022. 2. 25. 02:59
728x90

Alamofire는 네트워크 통신을 지원해주는 라이브러리입니다.

Swift에서 기본으로 지원해주는 URLSession이라는 라이브러리가 있지만, Alamofire를 사용하면 더 간편하게 통신을 할 수 있습니다.

 

Alamofire 사용해보기

먼저 Alamofire를 사용하려면 Cocoapods을 설치해야합니다.

터미널에 brew가 깔려 있다면 아래 명령어를 이용해 CocoaPods을 설치할 수 있습니다.

brew install cocoapods

설치가 끝났다면 프로젝트를 만들어 놓고 터미널에서 프로젝트 폴더로 이동합니다.

pod init

이동한 디렉터리에서 위 명령어를 이용하면 Podfile이라는 파일이 하나 생성됩니다.

그 다음 Podfile에 사용할 외부 라이브러리를 넣어주면 됩니다.

pod 'Alamofire', '~>5.5'

위 텍스트를 Podfile에 추가해주면 됩니다.

Alamofire 설치법과 설명은 아래 링크에서 확인 할 수 있습니다!

https://github.com/Alamofire/Alamofire

 

GitHub - Alamofire/Alamofire: Elegant HTTP Networking in Swift

Elegant HTTP Networking in Swift. Contribute to Alamofire/Alamofire development by creating an account on GitHub.

github.com

 

Alamofire은 3가지 주요 기능이 있습니다!

  • AF.upload -> multifile, stream, file or data method를 업로드 할 수 있습니다.
  • AF.download -> 파일을 다운로드 할 수 있습니다. 이미 진행중인 파일도 다운로드 할 수 있습니다.
  • AF.request -> 파일 전송과 관련되지 않은 모든 HTTP 요청을 처리할 수 있습니다.

API를 사용하기 위한 request 메서드만 알아보겠습니다. 

open func request<Parameters: Encodable>(_ convertible: URLConvertible,
                                         method: HTTPMethod = .get,
                                         parameters: Parameters? = nil,
                                         encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default,
                                         headers: HTTPHeaders? = nil,
                                         interceptor: RequestInterceptor? = nil) -> DataRequest

파라미터가 없는 GET방식 통신을 한다면 url만 넣어줘도 잘 동작합니다.

func fetchCovidOverview(completionHandler: @escaping (Result<CityCovidOverview, Error>) -> Void) {
    let url = "https://api.corona-19.kr/korea/country/new/"
    let param = [
        "serviceKey": "----"
    ]
    AF.request(url, method: .get, parameters: param)
        .validate(statusCode: 200..<300)
        .responseData(completionHandler: { response in
            switch response.result {
            case let .success(data):
                do {
                    let decoder = JSONDecoder()
                    let result = try decoder.decode(CityCovidOverview.self, from: data)
                    completionHandler(.success(result))
                } catch {
                    completionHandler(.failure(error))
                }
            case let .failure(error):
                completionHandler(.failure(error))
            }
        })
}

AF는 Alamofire에 기본 선언되어 있는 전역 변수로 Session.default를 가지고 있습니다.

GET 방식으로 통신을 하고. 파라미터를 넘겨주어 request를 보냅니다.

validate에서 statusCode를 설정한 범위에 있음을 확인해 오류처리를 단순화 시킬 수 있습니다.

responseData에서 응답을 받았을 때 처리할 클로저를 정의해 줍니다.

switch response.result {
case let .success(data):
    do {
        let decoder = JSONDecoder()
        let result = try decoder.decode(CityCovidOverview.self, from: data)
        completionHandler(.success(result))
    } catch {
        completionHandler(.failure(error))
    }
case let .failure(error):
    completionHandler(.failure(error))
}

응답 받았을 때 클로저에서 실행되는 코드를 자세히 보겠습니다.

응답받은 response data는 JSON형식으로 들어옴으로 JSONDecoder를 생성해줍니다.

미리 JSON파싱을 위해 만들어둔 struct를 기준으로 잡아 데이터를 파싱합니다. 성공하면 함수 파라미터로 받았던 탈출 클로저를 실행시킵니다.

JSON파싱은 기본으로 지원해주는 라이브러리도 있지만 SwiftyJson이라는 간편한 외부 라이브러리도 있어서 나중에 사용해보고 정리해 보겠습니다!

https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#aside-the-af-namespace-and-reference

 

GitHub - Alamofire/Alamofire: Elegant HTTP Networking in Swift

Elegant HTTP Networking in Swift. Contribute to Alamofire/Alamofire development by creating an account on GitHub.

github.com

https://www.raywenderlich.com/35-alamofire-tutorial-getting-started

 

Alamofire Tutorial: Getting Started

Take your first steps into Alamofire, the de facto networking library on iOS powering thousands of apps, by using the Imagga APIs to upload and analyze user photos.

www.raywenderlich.com

 

728x90
Comments