반응형
안녕하세요!
오늘은 Moya를 이용한 네트워킹을 해보겠습니다 :D
API는 영어 명언을 랜덤으로 출력해 주는 친구를 사용해보았습니다!ㅎㅎ
Moya에 대한 이론적인 부분은 Moya가 뭐야? 글을 참고해주세요!
Moya 설치
Swift Package Manager, CocoaPods, Carthage 를 사용하여 install할 수 있기 때문에 가장 익숙하고 편한 방법으로 설치합니다.
네트워킹을 담당할 enum을 하나 선언해서 사용될 target들 작성
enum AdviceAPI {
case randomAdvice
}
TargetType 구현
- baseURL: 서버의 endpoint 도메인
- path: 도메인 뒤에 추가 될 path (/users, /documents, ...)
- method: HTTP method (GET, POST, ...)
- sampleData: 테스트용 Mock Data
- task: request에 사용될 파라미터 .requestPlain: no param, .requestParameters(parameter:, encoding:)
- plain request : 추가 데이터가 없는 request
- data request : 데이터가 포함된 requests body
- parameter request : 인코딩된 매개 변수가 있는 requests body
- JSONEncodable request : 인코딩 가능한 유형의 requests body
- upload request
- headers: HTTP Header
extension AdviceAPI: TargetType {
var baseURL: URL {
return URL(string: "https://api.adviceslip.com")!
}
var path: String {
switch self {
case .randomAdvice:
return "/advice"
}
}
var method: Moya.Method {
switch self {
case .randomAdvice:
return .get
}
}
var task: Task {
switch self {
case .randomAdvice:
return .requestParameters(parameters: [:], encoding: URLEncoding.queryString)
}
}
var headers: [String : String]? {
return ["Content-type": "application/json"]
}
}
Request 보내고 Response 받아서 처리하기
response 시 받는 JSON의 형태는 아래와 같습니다.
JSON형태와 일치하는 struct를 정의해줍니다.
struct Advice: Decodable {
var slip: Slip
struct Slip: Decodable {
var id: Int
var advice: String
}
}
ViewController에서 button 누를시에 새로운 명언을 받아 올 수 있게 설정해 놓으면 끝!
class ViewController: UIViewController {
@IBOutlet weak var adviceLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func nextButton(_ sender: Any) {
let provider = MoyaProvider<AdviceAPI>()
provider.request(.randomAdvice) { (result) in
switch result {
case let .success(response):
let result = try? response.map(Advice.self)
self.adviceLabel.text = result?.slip.advice
case let .failure(error):
print(error.localizedDescription)
}
}
}
}
결과
이렇게 Moya를 통해 네트워킹을 하게되면 enum을 활용하여 안전한 방식으로 캡슐화된 요청을 할 수 있다는 장점이 있고, 코드를 직관적이고 쉽게 작성할 수 있다는 장점이 있습니다.
참고 사이트
https://github.com/Moya/Moya/blob/master/docs/Examples/Basic.md
반응형
'iOS' 카테고리의 다른 글
[Xcode] Xcode 단축어 정리 (0) | 2023.01.10 |
---|---|
[iOS] App의 생명주기 (Life Cycle) (0) | 2023.01.10 |
[iOS] Moya가 뭐야?! (0) | 2023.01.06 |
[iOS]JSON ObjectMapper vs. Codable (Decodable, Encodable) (0) | 2023.01.06 |
[iOS] MVP패턴 (0) | 2023.01.06 |