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์์ ๋ค๋ฃฐ ์์ . )
response
HandlerURLSessionDelegate
์์ ์ง์ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ณ ์๋ต ๋ฐ์ดํฐ๋ฅผ ํ๊ฐํ์ง ์์URLSessionDelegate : URLSession ์ธ์คํด์ค๊ฐ ์ธ์ ์์ค์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด Delegate์์ ํธ์ถํ๋ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ํ๋กํ ์ฝ
์๋์ ๊ฐ์ด ์ฌ์ฉ
AF.request(url).response { response in print(response) }
responseData
HandlerDataResponseSerializer
๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์งํ- DataResponseSerializer : ์ต์ ์๋ต ๊ฒ์ฌ๋ฅผ ์ํํ๊ณ ๋ชจ๋ ์๋ต ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ ResponseSerializer - ResponseSerializer : ์๋ต์ ๋ชจ๋ ์ฒ๋ฆฌ ํ ์์๋ ์ง๋ ฌ ๋ณํ๊ธฐ
AF.request(url).responseData { response in print(response) }
responseString
HandlerStringResponseSerializer
๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ ๋ฌธ์์ด๋ก ๋ณํ ๋ง์ฝ, ์ธ์ฝ๋ฉ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ Alamofire๋ ์๋ฒ์HTTPURLResponse
์ ์ง์ ๋ ํ ์คํธ ์ธ์ฝ๋ฉ์ ์ฌ์ฉStringResponseSerializer : ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๋์ฝ๋ฉํ๋ ResponseSerializer.
AF.request(url).resonseString { response in print(response) }
responseJSON
Handler ์๋ง ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ..!JSONResponseSerializer
๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋JSONSerialization.ReadingOptions
๋ฅผ ์ฌ์ฉํ๋Any
ํ์ ์ผ๋ก ๋ณํ- JSONResponseSerializer : JSONSerialization์ ์ฌ์ฉํ์ฌ ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋์ฝ๋ฉํ๋ ResponseSerializer - JSONSerialization.ReadingOptions : JSON ๋ฐ์ดํฐ์์ Foundation ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉ๋๋ ์ต์
responseDecodable
HandlerDecodableResponseSerializer
๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋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