Alamofire?
iOS 및 macOS 애플리케이션에서 네트워크 요청을 간편하게 처리할 수 있도록 도와주는 HTTP 네트워킹 라이브러리입니다.
Apple의 기본 네트워킹 프레임워크인 URLSession을 기반으로, 더 쉽게 네트워킹 작업을 처리할 수 있도록 다양한 기능을 제공합니다.
RESTful API와의 통신, 파일 업로드/다운로드, JSON 데이터 처리 등과 같은 네트워킹 작업을 간결하고 직관적으로 구현할 수 있습니다.
그렇다면 Alamofire는 어떻게 사용할지 알아보도록 하겠습니다.
AF.requset() .... 형태를 기본적으로 갖고있는데요.. 요 request부분을 자세히 확인해보면
기본적으로 네트워크 통신을 하기 위해 필요한 요소들을 확인해볼 수 있습니다.
옵셔널 처리가 돼있는 요소도 있고, 필수적으로 들어가야하는 요소들도 확인해볼 수 있습니다.
하나씩 살펴보면
- url : 요청할 URL
- method : 요청 형식 - get(기본값), post, put, delete, patch 등
- parameters : 요청 시 같이 보낼 파라미터
- encoding
- URLEncoding
- Get 요청과 같이, URL에 파라미터를 추가하는 경우에 주로 사용
- JSONEncoding
- Post 요청과 깉이, 파라미터를 JSON 형식으로 변환하여 서버에 전송하는 경우 사용
- URLEncoding
- header
- [String : String] 형태로 가능
- 위의 문서만 보면 알 수 없지만 문서를 타고타고 들어가보면 name, value라는 string으로 구성
이를 바탕으로 날씨를 받아오는 네트워크 메서드를 구현했는데요
func callWeather(lat: Double, lon: Double, completionHandler: @escaping (Weather) -> Void) {
let url = "https://api.openweathermap.org/data/2.5/weather?"
let param: Parameters = [
"APIKey" : APIKey.key,
"lat" : "\(lat)",
"lon" : "\(lon)",
"units" : "metric",
"lang" : "kr"
]
AF.request(url, parameters: param, encoding: URLEncoding.default).responseDecodable(of: Weather.self) { response in
switch response.result {
case .success(let value):
completionHandler(value)
case .failure(let error):
print(error)
}
}
}
이전에 사용하던 URLSession 코드에 비해 훨씬 더 간결한 것 같아요 👍👍
+
기본적으로 Alomofire는 비동기이기 때문에 서버로부터 응답을 다 받을때까지 기다리는 것이 아니라 콜백을 통해 응답을 처리해줍니다.
그렇기에 @escaping을 활용해 Weather라는 데이터를 탈출 시켜주고 있습니다.
또한 Weather라는 데이터를 살펴보면
struct CloudsInfo: Decodable {
let all: Int
}
struct WindInfo: Decodable {
let speed: Double
let deg: Int
}
struct WeatherInfo: Decodable {
let temp, feels_like, temp_min, temp_max : Double
let pressure, humidity: Int
}
struct TodayWeather: Decodable {
let id: Int
let main, description, icon: String
}
struct Coord: Decodable {
let lon, lat: Double
}
struct Weather: Decodable {
let coord: Coord
let weather : [TodayWeather]
let base: String
let main: WeatherInfo
let visibility: Int
let wind: WindInfo
let clouds: CloudsInfo
let dt: Int
let name: String
}
다음과 같은 형태로 구성되어 있습니다.
여기서 Decodable은 디코딩(데이터를 읽는 과정)만을 담당합니다. 서버에서 받은 JSON을 Swift모델로 변환해주는 것이죠.
반대로 사용자의 데이터를 서버로 전송할 때는 Encodable을 사용하면 됩니다.
그런데 보통 사용할 때는 이 두가지 역할을 모두 하는 Codable 이라는 프로토콜을 사용하더라구요!
마지막의 데이터 모델과 관련된 프로토콜은 URLSession에서도 사용되기 때문에 잘 알고 구분하면 좋을 것 같습니다.
그럼 여기까지 Alamofire의 기본적인 형태 + 사용할 속성에 대해서 간단하게 풀어보았습니다~~
.
.
.
.
'Swift' 카테고리의 다른 글
[iOS] About 싱글턴 패턴 (0) | 2024.06.29 |
---|---|
[iOS] About Router pattern (0) | 2024.06.27 |
[iOS] About URLSession - 2 (0) | 2024.06.19 |
[iOS] About URLSession - 1 (0) | 2024.06.12 |
[iOS] About App SandBox (0) | 2024.05.20 |