Alamofire
: ๋น๋๊ธฐ๋ก ์ํํ๋ swift๊ธฐ๋ฐ์ HTTP ๋คํธ์ํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ (ํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
- Apple์ Foundation ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ URL ๋ก๋ฉ ์์คํ
์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์ด์์
URLSession๋ฐURLSessionTask๊ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ๊ตฌํ๋์ด์์
- Alamofire๋ CocoaPods๋ฅผ ์ฌ์ฉํด ์ฝ๊ฒ ์ค์น ๊ฐ๋ฅ
์ฌ์ฉ๋ฒ
Alamofire๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ ์ผ ๋จผ์ import Alamofire ํด์ค
โฑ ์ฐธ๊ณ ) Alamofire ver5 ์ดํ๋ถํฐ๋ AF ๊ฐ Session.default ์ ๋ํ ์ฐธ์กฐ..!!
1. Request
์ ์
// 1 open func request<Parameters: Encodable>(_ convertible: URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default, headers: HTTPHeaders? = nil, interceptor: RequestInterceptor? = nil) -> DataRequest // 2 open func request(_ urlRequest: URLRequestConvertible, interceptor: RequestInterceptor? = nil) -> DataRequest
์ฌ์ฉ
// 1 AF.request(URL, method, parameters, encoder, headers, interceptor) // 2 AF.request(URL, interceptor)
1๋ฒ๊ณผ 2๋ฒ ๋ฐฉ์์ผ๋ก request๋ฅผ ๋ง๋ค ์ ์์ 1๋ฒ : DataRequest๋ฅผ ์์ฑํ๋ฉด์ method๋ parameter๊ฐ์ ๊ฐ๋ณ ๊ตฌ์ฑ ์์ฒญ๋ ํ์ฉ ์์ฒญ๋ง๋ค Encodable์ ๋ง์กฑํ๋ parameter ํ์ฉ 2๋ฒ : Alamofire์ ๋ชจ๋ URLRequestConvertible ํ๋กํ ์ฝ์ ์ค์ํ๋ ๋ชจ๋ ์ ํ์ ๋ํด DataRequest๋ฅผ ์์ฑ
HTTP Method
Alamofire์์๋ HTTP Method ๋ํ ์ง์ ๋ํ์ ์ผ๋ก get, post,put,delete ๋ฑ
AF.request(url, method: .post) AF.request(url, method: .get) ...
Parameters
Headers
2. Response
์์ ๋ณด๋ธ Request ์ ๋ฐ๋ฅธ response
์ฌ์ฉ๋ฒ
Alamofire์์๋ requese ๋ค์ response๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋จ
AF.request(url).response()
์์
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋์ ๊ฐ์ ๊ฐ์ด ์ถ๋ ฅ๋จ
โ www.naver.com ์๋ฒ์ requestํ๋ฉด ๊ทธ์ ๋ํ response๋ก success๊ฐ ๋์ด์จ๋ค
5๊ฐ์ง response handler
(โฑ์ฐธ๊ณ : response handler๋ ์๋ฒ์์ ๋ฐํ๋๋ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ์ง ์๋๋ค ์ด๋ Response Validation์์ ๋ค๋ฃฐ ์์ . )
responseHandlerURLSessionDelegate์์ ์ง์ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ณ ์๋ต ๋ฐ์ดํฐ๋ฅผ ํ๊ฐํ์ง ์์URLSessionDelegate : URLSession ์ธ์คํด์ค๊ฐ ์ธ์ ์์ค์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด Delegate์์ ํธ์ถํ๋ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ํ๋กํ ์ฝ
์๋์ ๊ฐ์ด ์ฌ์ฉ
AF.request(url).response { response in print(response) }
responseDataHandlerDataResponseSerializer๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์งํ- DataResponseSerializer : ์ต์ ์๋ต ๊ฒ์ฌ๋ฅผ ์ํํ๊ณ ๋ชจ๋ ์๋ต ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ ResponseSerializer - ResponseSerializer : ์๋ต์ ๋ชจ๋ ์ฒ๋ฆฌ ํ ์์๋ ์ง๋ ฌ ๋ณํ๊ธฐ
AF.request(url).responseData { response in print(response) }
responseStringHandlerStringResponseSerializer๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ ๋ฌธ์์ด๋ก ๋ณํ ๋ง์ฝ, ์ธ์ฝ๋ฉ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ Alamofire๋ ์๋ฒ์HTTPURLResponse์ ์ง์ ๋ ํ ์คํธ ์ธ์ฝ๋ฉ์ ์ฌ์ฉStringResponseSerializer : ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๋์ฝ๋ฉํ๋ ResponseSerializer.
AF.request(url).resonseString { response in print(response) }
responseJSONHandler ์๋ง ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ..!JSONResponseSerializer๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋JSONSerialization.ReadingOptions๋ฅผ ์ฌ์ฉํ๋Anyํ์ ์ผ๋ก ๋ณํ- JSONResponseSerializer : JSONSerialization์ ์ฌ์ฉํ์ฌ ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋์ฝ๋ฉํ๋ ResponseSerializer - JSONSerialization.ReadingOptions : JSON ๋ฐ์ดํฐ์์ Foundation ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉ๋๋ ์ต์
responseDecodableHandlerDecodableResponseSerializer๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋DataDecoder์ ์ฌ์ฉํ๋Decodableํ์ ์ผ๋ก ๋ณํ- DecodableResponseSerializer : DataDecoder๋ฅผ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ์ ์ ์ฌ์ฉํด ์๋ต ๋ฐ์ดํฐ๋ฅผ ์ ๋ค๋ฆญ ๊ฐ์ผ๋ก ๋์ฝ๋ฉํ๋ ResponseSerializer - DataDecoder : ๋ฐ์ดํฐ๋ฅผ Decodableํ์ ์ผ๋ก ๋์ฝ๋ฉ ํ ์ ์๋ ๋ชจ๋ ํ์
3. 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) }
Uploaded by Notion2Tistory v1.1.0