[Swift] Alamofire 사용해보기_(2)

나는 사과·2021년 1월 28일
0

Alamofire

목록 보기
2/4

이전 포스트에서는 Almaofire 설치, Request, HTTP Method에 대해 정리했는데 이번엔 Response와 Validate에 대해 알아보려고 한다.


Response

앞서 Request를 했으면 당연히 그에 따른 response가 있을 것 이다.
Alamofire에서는 requese 뒤에 response를 붙여주면 된다.

AF.request(url).response()


위 코드를 실행하면 아래와 같은 값을 확인 할 수 있다.
즉, www.naver.com 서버에 request하면 그에 대한 responsesuccess가 넘어왔다.

그럼, response에는 한 방법만 있나? 아니다. Alamofire에는 6가지의 response handler가 있다.
참고로 response handler는 서버에서 반환되는 유효성 검사를 하지는 않는다. 이 부분은 Response Validation에서 짚어보려고 한다.

  1. response Handler
    URLSessionDelegate에서 직접 모든 정보를 전달하고 응답 데이터를 평가하지 않는다.

    URLSessionDelegate : URLSession 인스턴스가 세션 수준의 이벤트를 처리하기 위해 Delegate에서 호출하는 메서드를 정의하는 프로토콜

아래와 같이 사용한다.

 AF.request(url).response { response in 
    print(response)
 }
  1. responseData Handler
    DataResponseSerializer를 사용해 서버에서 반환된 데이터를 추출하고 유효성 검사를 진행한다.
  • DataResponseSerializer : 최소 응답 검사를 수행하고 모든 응답 데이터를 그대로 반환하는 ResponseSerializer다.
  • ResponseSerializer : 응답을 모두 처리 할 수있는 직렬 변환기다.
AF.request(url).responseData { response in 
   print(response)
}
  1. responseString Handler
    StringResponseSerializer를 사용해 서버에서 반환된 데이터를 지정된 인코딩을 사용하는 문자열로 변환한다. 만약, 인코딩이 지정되지 않은 경우 Alamofire는 서버의 HTTPURLResponse에 지정된 텍스트 인코딩을 사용한다.

StringResponseSerializer : 응답 데이터를 문자열로 디코딩하는 ResponseSerializer.

AF.request(url).resonseString { response in 
	print(response)
}
  1. responseJSON Handler
    아마 가장 많이 사용되는 방법이지 않을까 싶다. 이것은 JSONResponseSerializer를 사용해 서버에서 반환된 데이터를 지정된 JSONSerialization.ReadingOptions를 사용하는 Any타입으로 변환한다.
  • JSONResponseSerializer : JSONSerialization을 사용하여 응답 데이터를 디코딩하는 ResponseSerializer.
  • JSONSerialization.ReadingOptions : JSON 데이터에서 Foundation 개체를 만들 때 사용되는 옵션
  1. responseDecodable Handler
    DecodableResponseSerializer를 사용해 서버에서 반환된 데이터를 지정된 DataDecoder을 사용하는 Decodable타입으로 변환한다.
  • DecodableResponseSerializer : DataDecoder를 따르는 모든 타입을 사용해 응답 데이터를 제네릭 값으로 디코딩하는 ResponseSerializer.
  • DataDecoder : 데이터를 Decodable타입으로 디코딩 할 수 있는 모든 타입.

앞서서는 6가지라고했던게 5가지만 소개된 이유는 response Handler가 2가지 방식으로 사용되기 때문이다.

Validation

유효성검사는 요청에 대한 response를 하기 전에 .validate()를 호출함으로써 유효하지 않은 상태 코드나 MIME타입이 있는 경우 response하지 않도록 한다.

일반적인 사용 방법은 아래와 같고

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

상태 코드나 MIME 타입 조건을 넣는 방법은 다음과 같다.

AF.request(url)
  .validate(200..<300) // 200~300 사이 상태코드만 허용
  .validate(contentType:["application/json"]) // JSON 포맷만 허용
  .response { response in 
      print(response)
}

주석처럼 위 코드는 해당 URL에 대한 응답 처리를 상태코드가 200~300이면서 JSON 포맷일 때 응답처리를 한다.

MIME 타입 목록


참고문서

0개의 댓글