Alamofire

10093 단어 iOSiOS

Alamofire 깃허브 문서 를 살펴보자

Alamofire

HTTP 네트워킹 라이브러리로 애플에서는 자체적으로 네트워크 통신을 위해 URLSession을 제공하지만 보다 편리한 인터페이스를 제공하는 것이 Alamofire이다.

URLSession을 기반으로 어려운 네트워킹 작업을 보완하기 때문에 주요 로직에 집중할 수 있게 해주고 데이터 접근이 보다 수월하여 코드의 가독성이 좋아진다.

Alamofire 사용

먼저 프로젝트 파일에 라이브러리를 설치하고 프로젝트 상단에 import Alamofire 를 작성한다. Alamofire5 버전 이후부터는 AF가 Session.default에 대한 참조이다.

Alamofire의 주요 함수

통신과 관련된 모든 함수를 다룰 수 있지만 그 중에서도 자주 사용하는 주요 함수는 다음과 같다.

  • AF.upload : 멀티파트, 스트림, 파일 메소드를 통해 파일을 업로드 한다.
  • AF.download : 파일을 다운로드 하거나, 이미 진행 중인 다운로드를 재개한다.
  • AF.request : 파일과 관련 없는 기타 HTTP를 요청한다.

Request

서버 통신 시 요청을 할 때 사용하는 함수

-> Alamofire에는 HTTPMethod라는 열거형이 저장되어 있고 이 값들은 요청을 보낼 때 메소드에 넣을 인자로 사용된다.

get에 body를 넣을 수 없다.

Response

Response를 확인하고 싶을 때는 request 뒤에 response를 붙여주면 된다. Alamofire에서 응답을 처리할 때는 6가지로 나눌 수 있다.

  1. response
    : URLSessionDelegate에서 직접 모든 정보를 전달하고 응답 데이터를 평가하지 않는다.
AF.request(url).response { response in 
    print(response)
 }
  1. responseData
    : DataResponseSerializer를 사용해 서버에서 넘어온 데이터를 받고 유효성 검사를 진행한다.
AF.request(url).responseData { response in 
   print(response)
}
  1. responseString
    : StringResponseSerializer를 사용해 서버에서 반환된 데이터를 지정된 인코딩을 사용하는 문자열로 변환한다.
AF.request(url).responseString { response in 
   print(response)
}
  1. responseJSON
    : JSONResponseSerializer를 사용해 서버에서 반환된 데이터를 지정된 JSONSerialization.ReadingOptions를 사용하는 Any타입으로 변환한다.
AF.request(url).responseJSON { response in 
   print(response)
}
  1. responseDecodable
    : DecodableResponseSerializer를 사용해 서버에서 반환된 데이터를 지정된 DataDecoder을 사용하는 Decodable타입으로 변환한다.
AF.request(url).responseDecodable { response in 
   print(response)
}

Validation

.validation()를 호출하여 유효성 검사를 실시한다. 만약 여기서 유효하지 않다고 판단되는 경우 response가 넘어올 수 없다.

AF.request(url)
  .validate()
  .response { response in 
     print(response)
}

공식문서를 보면 위와 같이 나와있다.

특정한 조건에 유효한 경우로 분기처리를 하고 싶다면 아래와 같이 작성하면 된다.

        AF.request(UserRouter.signIn(signIn: SignInRequestModel(email: email, password: password)))
            .validate(statusCode: 200...500)
            .responseData { response in
                switch response.result {
                case .success(let data):
                    switch response.response?.statusCode {
                    case 200, 400:
                        guard let jsonData = try? JSONDecoder().decode(UserResponseModel.self, from: data) else { return }
                        return completion(.success(jsonData))
                        
                    default: completion(.networkFail)
                    }
                    
                case .failure(let err):
                    print(err)
                }
            }

좋은 웹페이지 즐겨찾기