안녕하세요 오늘은 웹 네트워크 쪽을 공부하다가 우연히 Moya를 알게 되어서 신기해서 사용방법을 정리해 보았습니다 ㅎㅎ
Moya의 장점
- Alamofire는 재사용이 불편하다
- Moya는 Network layer를 템플릿화 하고 사용할때에는 request, response만 처리 하면된다
- 테스트가 용이하다
Moya 프레임워크 의존성 ( 왼쪽 일반, 오른쪽 Moya )
Moya 설치방법
pod 'Moya', '~> 14.0'
# or
pod 'Moya/RxSwift', '~> 14.0'
# or
pod 'Moya/ReactiveSwift', '~> 14.0'
TargetType 용어설명
- *baseURL: 서버의 도메인*
- *path: 서버의 도메인 뒤에 추가 될 Path (일반적으로 API)*
- *method: HTTP method (GET, POST, …)*
- *sampleData: 테스트용 Mock Data*
- *task: 리퀘스트에 사용되는 파라미터 설정*
- *validationType: 허용할 response의 타입*
- *headers: HTTP header*
모야의 사용 방법과 형태
-
데이터 네트워크의 형태를 열거형으로 정의한다
import Moya enum GithubAPI { case searchUser(query: String) }
-
열거형으로 정의한 데이터 네트워크를 템플릿 형태로 만들어준다. (TargetType 작성)
각각의 데이터 네트워크 작업에 따른 URL 분배라던가 get, post형태를 잡아준다.
여기서 주의해야 할 점은 각각의 프로퍼티들이 조합되서 완전한 full request를 생성하는지 체크해야 합니다.extension GithubAPI: TargetType { var baseURL: URL { return URL(string: "https://api.github.com")! } var path: String { switch self { case .searchUser: return "search/users" } } //moya의 장점 각 메소드가 get 인지 post인지 설정가능 var method: Method { return .get } var sampleData: Data { return Data() } var task: Task { switch self { case .searchUser(let query): return .requestParameters(parameters: ["q" : query], encoding: URLEncoding.default) } } var validationType: Moya.ValidationType { return .successAndRedirectCodes } var headers: [String : String]? { return nil } }
-
사용법
let provider = MoyaProvider<GithubAPI>() provider.rx.request(.searchUser(query: query)) .subscribe { [weak self] (event) in switch event { case .success(let response): print(response) case .error(let error): print(error.localizedDescription) } } .disposed(by: disposeBag)
좀더 자세한 내용
- https://woowabros.github.io/swift/2020/12/20/ios-networking-and-testing.html
'IOS > iOS' 카테고리의 다른 글
[iOS] PrettyPrintJson, Print Log Debugging 을 편하게 하자 (0) | 2021.06.16 |
---|---|
[TIL] Workspace, Project, Target, Scheme, Build Settings, Configurations, Build Phases 의 의미 (0) | 2021.03.28 |
[iOS] Dynamic View (With: PageView, TableView, CollectionView) / Standard Apple WeatherApp UI (0) | 2021.01.11 |
[iOS] String Interpolation (0) | 2021.01.11 |
[iOS]UTC Time To Date (feat. TimeZone) (2) | 2021.01.08 |