Skip to content

Rest API  #6

@zzangzzangguy

Description

@zzangzzangguy

개요

  • Pokemon TCG API를 활용하여 포켓몬 카드 정보 가져오기
  • Moya 라이브러리를 사용하여 API 호출 및 응답 처리
  • Codable을 활용한 데이터 모델링 및 파싱

1. API 타겟 정의

  • PokemonTarget 열거형을 정의하여 API 엔드포인트와 요청 파라미터 설정
  • TargetType 프로토콜 구현을 통해 Moya에서 사용할 수 있는 타겟 생성
  • 기본 URL, 경로, HTTP 메서드, 요청 파라미터, 헤더 등을 지정

2. 네트워크 서비스 구현

final class PokemonRepository: PokemonRepositoryType {
    private var provider: MoyaProvider<PokemonTarget>
    init() { provider = MoyaProvider<PokemonTarget>() }
}

extension PokemonRepository {
    func fetchCards(request: CardsRequest, completion: @escaping (Result<PokemonCards, Error>) -> Void) {
        provider.request(.fetchCards(parameters: request.toDictionary)) { result in
            switch result {
            case .success(let response):
                do {
                    let data = try response.map(PokemonCards.self)
                    completion(.success(data))
                } catch {
                    completion(.failure(error))
                }
            case .failure(let error):
                completion(.failure(error))
            }
        }
    }
}
  • PokemonRepository에서 Moya 프로바이더를 사용하여 네트워크 요청 수행
  • fetchCards 메서드를 통해 포켓몬 카드 정보를 가져오는 API 호출
  • 요청 결과에 따라 성공 시 PokemonCards 모델로 매핑하여 반환, 실패 시 에러 전달

3. 데이터 모델링

struct PokemonCards: Codable {
    let data: [PokemonCard]
}

struct PokemonCard: Codable {
    let id: String
    let name: String
    let images: PokemonCardImage
    // ...
}

struct PokemonCardImage: Codable {
    let small: URL
    let large: URL
}
  • PokemonCards, PokemonCard, PokemonCardImage 등의 구조체를 정의하여 API 응답 데이터 모델링
  • Codable 프로토콜 채택을 통해 JSON 데이터와의 자동 인코딩/디코딩 지원

키 관리

xcconfig 파일을 사용하여 API 키, 시크릿 키 등의 민감한 정보 관리
xcconfig 파일을 .gitignore에 추가하여 Git 추적에서 제외
빌드 시점에 xcconfig 파일의 키 값을 주입받아 사용

  • PokemonTarget을 사용하여 API 호출에 필요한 엔드포인트, 파라미터 등 정의
  • PokemonRepository에서 Moya 프로바이더를 초기화하고 fetchCards 메서드 구현
  • 검색 파라미터를 담은 CardsRequest를 사용하여 API 호출 수행
  • 응답 결과를 PokemonCards 모델로 매핑하여 상위 레이어로 전달
  • 상위 레이어에서는 전달받은 포켓몬 카드 정보를 사용하여 화면 업데이트

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions