새로운 API 호출 만들기 가이드라인

Posted on 2021-10-20 by GKSRUDTN99
Swift&Xcode Swift RxSwift

새로운 API 호출 만들기 가이드라인

1. Request Parameter 만들기
struct GetUserProfile: Codable {
    let userId: Int
    let type: UserType
    let address: Address

    enum UserType: String, Codable {
      case user
      case partner
    }

    struct Address: Codable {
      let address: String
      let postNumber: Int
    }
}
2. API 열거형에 추가
enum USERAPI {
  case getUserProfile(param: GetUserProfile)
}
3. 위에서 추가한 case의 path 작성
extension USERAPI: TargetType {
  var path: String {
    switch self {
      case .getUserProfile:
        return "/user"
    }
  }
}
4. method 작성
extension USERAPI: TargetType {
  var method: Moya.Method {
    switch self {
      case .getUserProfile:
        return .get
    }
  }
}
5. task 등록
extension USERAPI: TargetType {
  var task: Task {
    switch self {
      case .getUserProfile(let param):
        return .requestParameters(parameters: try! param.asDictionary(), encoding: URLEncoding.default)
    }
  }
}

POST 요청의 경우 return .requestJSONEncodable(param) Task를 사용한다.

6. Response 모델 정의
struct UserProfile: Codable {
  let id: Int
  let nickname: String
  let profileImage: String?
}

API 요청 예시

APIService.shared.userAPI.rx.request(.getUserProfile(param:param))
  .retryWithAuthIfNeeded()
  .filterSuccessfulStatusCode()
  .map(UserProfile.self)
  .flatMap { response in 
    // Something..
  }
  .catchError { error in
    // Error handling..
  }