Alamofire
라이브러리를 사용해 빠르게 구현했음.Api 문서 확인: api의 엔드포인트, 요청메서드, 헤더, 파라미터 등을 이해함
postman을 통해 API 응답확인: 문서를 통해 정상적으로 요청했을 경우 어떤 값이 응답되고 있는지 봐야 한다. 이를 통해 model을 작성함.
struct MovieResponse: Codable{
let page: Int
let results: [Movie]
}
struct Movie: Codable {
let title: String
let posterPath: String?
let releaseDate: String
let voteAverage: Double
let overview: String
enum CodingKeys: String, CodingKey{
case title
case posterPath = "poster_path"
case releaseDate = "release_date"
case voteAverage = "vote_average"
case overview
}
}
// 필요한 정보만 model로 설정하였음.
API 통신 코드 작성: URLSession, URLRequest 등을 사용해 API 요청을 전송하는 코드를 작성함. 이때 API 문서에 있는 요청메서드, 헤더, 파라미터등을 설정함
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let requestURL = URL(string: "https://api.themoviedb.org/3/trending/movie/week?api_key=\(APIKey.apiKey)")
guard let url = requestURL else {
let error = NSError(domain: "", code: 0)
completion(.failure(error))
return
}
private func performRequest(url: URL, completion: @escaping (Result<Data, Error>) -> Void) {
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let dataTask = session.dataTask(with: url) { data, response, error in
if let error = error {
completion(.failure(error))
return
}
guard let data = data else {
let error = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey: "Data not found"])
completion(.failure(error))
return
}
completion(.success(data))
}
dataTask.resume()
}
performRequest(url: url) { result in
switch result {
case .success(let data):
do {
let decoder = JSONDecoder()
let movieResponse = try decoder.decode(MovieResponse.self, from: data)
completion(.success(movieResponse))
} catch let error {
completion(.failure(error))
}
case .failure(let error):
completion(.failure(error))
}
}
응답데이터 처리
Alamofire를 사용하지 않고, URLSession을 이용해 구현을 하면서 네트워크 통신 작업의 흐름을 다시 한번 되짚어 볼 수 있었음.
이에 다른 라이브러리의 사용하더라도 유사한 흐름으로 작업할 수 있겠다는 생각을 했음.