Moya 사용법
iOS
기록
기존에 내가 EndPoint
프로토콜을 정의하고, 해당 프로토콜을 채택한 EndPointCases
를 만드는 방식과 유사하게 사용한다.
먼저 ***Service
라는 타입의 열거형을 선언한다.
enum PaymentService {
case getUserCoupon(size: Int)
}
그 다음에 해당 서비스를 확장해서, TargetType
을 채택하고 구현한다.
이 때 구현해야 하는 필수 요소는 다음과 같다.
protocol TargetType {
var baseURL: URL { get }
var path: String { get }
var method: Method { get }
var task: Task { get }
var headers: [String: String]? { get }
}
그 다음에는 MoyaProvider
라는 인스턴스를 만들고 (제네릭 타입, 위에서 만든 Service
를 넣어서 생성)
let provider = MoyaProvider<PaymentService>()
provider
를 통해 request
를 날리고, 클로저로 응답받은 데이터를 처리하면 된다.
provider.request(.getUserCoupon(size: 100)) { result in
// do someting
}
provider를 어딘가에 유지해야 하는데, 그렇지 않으면 자동으로 해제되고 잠재적으로 응답을 받기 전에 해제 된다.
Moya (for Rx)
일반적인 request 날리는 방법
provider.request(Service.something) { result in
// do something
}
for Rx
provider.rx.request(Service.something)
.subscribe(with: self) { owner, response in
// do something
}
.disposed(by: disposeBag)
생각
-
Endpoint
를 만드는 것도 나와 있는데 이건 좀 더 살펴봐야 할 거 같음 (무엇이 이점이 있는지) -
온전히
Alamofire
를 wrapping 한 라이브러리인줄 알았는데, 무거운 작업은Alamofire
를 사용하고 그걸 다시Moya
로 wrapping 해서 보여준다는 말이 있는 걸 보아.. 또 그건 아닌 듯