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
Alamofire
๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ Encodable
ํ์
์ ๊ฐ์ request
์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฉ
Encodable : a type that can encode itself to an external representation
(์ด๋ค ๋ฐ์ดํฐ ํ์ ์ด ์ค์ค๋ก๊ฐ ๋ค๋ฅธ ํํ์ ํํ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉ ๋ ์ ์๋๋ก ๋ฐ๋ผ์ผํ๋ ํ๋กํ ์ฝ)
Encoder :Encodable
๊ฐ์ฒด๋ฅผ JSON์ด๋ XML์ ๊ฐ์ ๋ค๋ฅธ ํ์์ผ๋ก ๋ณ๊ฒฝํ๋ ์์ ์ ์ํํ๋ ์ธ์ฝ๋์ ํ๋กํ ์ฝ
parameters
๊ฐ ์๋ ๊ฒฝ์ฐ nil๊ฐ์ด ํ ๋น๋จ
Headers
๐ ๋ค์ด๊ฐ๊ธฐ์ ์... Headers๋ ์ธ์ ํ์ํ๊ฐ?
์๋ฒ๊ฐ ๋ณด์์์ ์ด์ ๋ก ์ธ์ฆ๋ ์ฌ์ฉ์์๊ฒ๋ง ๋ฐ์ดํฐ๋ฅผ ์ค๋ค๊ณ ํ์. request๊ฐ ์์ ๋ ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ์์ฒญ์ธ์ง ๋ฏธ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ์์ฒญ์ธ์ง ์ด๋ป๊ฒ ์ ์ ์์๊น?
๐ HTTP header์ “Authorization”์ด๋ key๊ฐ์ผ๋ก ์๋ฒ๊ฐ “์ธ์ฆ๋ ์ฌ์ฉ์๊ตฌ๋”๋ฅผ ์ ์ ์๋ value๊ฐ์ ๋ณด๋ด๋ฉด ๋จ
์ด access key๋ ์ฑ์์ ์ฌ๋ฌ API๋ฅผ ํธ์ถํ ๋๋ง๋ค header์ ์ค์ด๋ณด๋ด์ผํ๋ฏ๋ก ์์ ํ ๊ณณ์ ์ ์ฅํ์ฌ ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํ ์ ์์ด์ผ ํจ
์ด๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก Keychain-swift ์ถ์ฒ !!
- KeychainSwift์ access ๊ด๋ จ๋ฐ์ดํฐ ์ ์ฅ (key-value ๊ฐ์ผ๋ก)
- key์ผ๋ก ํด๋น value๊ฐ ๊ฐ์ ธ์ค๊ธฐ
2. Response
์์ ๋ณด๋ธ Request
์ ๋ฐ๋ฅธ response
์ฌ์ฉ๋ฒ
Alamofire์์๋ requese
๋ค์ response
๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋จ
AF.request(url).response()
5๊ฐ์ง response handler
(โฑ์ฐธ๊ณ : response handler๋ ์๋ฒ์์ ๋ฐํ๋๋ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ์ง ์๋๋ค ์ด๋ Response Validation์์ ๋ค๋ฃฐ ์์ . )
1. response
HandlerURLSessionDelegate
์์ ์ง์ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ณ ์๋ต ๋ฐ์ดํฐ๋ฅผ ํ๊ฐํ์ง ์์์๋์ ๊ฐ์ด ์ฌ์ฉ
AF.request(url).response { response in print(response) }
- URLSessionDelegate : URLSession ์ธ์คํด์ค๊ฐ ์ธ์ ์์ค์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด Delegate์์ ํธ์ถํ๋ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ํ๋กํ ์ฝ
2. responseData
HandlerDataResponseSerializer
๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์งํ
- ResponseSerializer : ์๋ต์ ๋ชจ๋ ์ฒ๋ฆฌ ํ ์์๋ ์ง๋ ฌ ๋ณํ๊ธฐ
AF.request(url).responseData { response in print(response) }
- DataResponseSerializer : ์ต์ ์๋ต ๊ฒ์ฌ๋ฅผ ์ํํ๊ณ ๋ชจ๋ ์๋ต ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ ResponseSerializer
3. responseString
HandlerStringResponseSerializer
๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ ๋ฌธ์์ด๋ก ๋ณํ
๋ง์ฝ, ์ธ์ฝ๋ฉ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ Alamofire๋ ์๋ฒ์ HTTPURLResponse
์ ์ง์ ๋ ํ
์คํธ ์ธ์ฝ๋ฉ์ ์ฌ์ฉ
AF.request(url).resonseString { response in
print(response)
}
- StringResponseSerializer : ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๋์ฝ๋ฉํ๋ ResponseSerializer.
4. responseJSON
Handler
์๋ง ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ..! JSONResponseSerializer
๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ JSONSerialization.ReadingOptions
๋ฅผ ์ฌ์ฉํ๋ Any
ํ์
์ผ๋ก ๋ณํ
- JSONSerialization.ReadingOptions : JSON ๋ฐ์ดํฐ์์ Foundation ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉ๋๋ ์ต์
- JSONResponseSerializer : JSONSerialization์ ์ฌ์ฉํ์ฌ ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋์ฝ๋ฉํ๋ ResponseSerializer
5. responseDecodable
HandlerDecodableResponseSerializer
๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ DataDecoder
์ ์ฌ์ฉํ๋ Decodable
ํ์
์ผ๋ก ๋ณํ
- DataDecoder : ๋ฐ์ดํฐ๋ฅผ Decodableํ์ ์ผ๋ก ๋์ฝ๋ฉ ํ ์ ์๋ ๋ชจ๋ ํ์
- DecodableResponseSerializer : DataDecoder๋ฅผ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ์ ์ ์ฌ์ฉํด ์๋ต ๋ฐ์ดํฐ๋ฅผ ์ ๋ค๋ฆญ ๊ฐ์ผ๋ก ๋์ฝ๋ฉํ๋ ResponseSerializer
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)
}
'Computer Science > swift ๋ฝ๊ฐ๊ธฐ - ์ฐธ๊ณ ์ฌ์ดํธ ์ ์ฅ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Pod error] sudo gem install cocoapods ์คํ ์ ์๋ฌ (ํด๊ฒฐ๋ฒ ํฌํจ) (0) | 2022.06.24 |
---|---|
[xcode] xcode์ audio asset ์ถ๊ฐ (local๋ง๊ณ ..!) (0) | 2022.01.28 |
[ios] swift MVVM vs MVC ์ฐจ์ด (0) | 2022.01.26 |
[xcode] xcode๋น๋์ ์ปดํจํฐ ์ฃฝ์/xcode ๋ฉ๋ชจ๋ฆฌ ๋์ํ์/xcode memory leak (ํด๊ฒฐ๋ฐฉ๋ฒO) (0) | 2022.01.09 |
[swift] Metal vs OpenGL (0) | 2021.12.27 |
[swift] swiftui zindex ์ซ์ (0) | 2021.11.19 |
[swift] swiftui Text ์ฌ์ด์ฆ์ ๋ง์ถฐ์ frameํฌ๊ธฐ ์ ํ๊ธฐ (fixedSize) (0) | 2021.11.18 |
[Xcode] Compiling failed: extra tokens at the end of #sourceLocation directive ์๋ฌ ํด๊ฒฐ โผ๏ธ (0) | 2021.10.30 |