꾸준히 안타치기
Moya 사용법 본문
iOS API통신을 위한 프레임워크 Moya

- Alamofire는 재사용이 불편하다. 그래서 이것을 개선하기 위해 Moya가 등장
- Moya는 Network layer를 템플릿화 하고 사용할때에는 request, response만 처리 하면되는 장점이 있다.
1.구조체를 작성합니다.
import Foundation
// 모델 구조체작성
struct User: Codable {
let id: Int
let name: String
}
2.Userservice extention을 작성합니다.
import Foundation
import Moya
enum UserService {
case createUser(name: String)
case readUsers
case updateUser(id: Int, name: String)
case deleteUser(id: Int)
}
extension UserService: TargetType {
// baseURL
var baseURL: URL {
let urlString = "https://jsonplaceholder.typicode.com"
guard let url = URL(string: urlString) else { fatalError() }
return url
}
// 케이스별 요청경로
var path: String {
switch self {
case .readUsers, .createUser(_):
return "/users"
case .updateUser(let id, _), .deleteUser(let id):
return "/users/\(id)"
}
}
// HTTP요청 메소드
var method: Moya.Method {
switch self {
case .createUser(_):
return .post
case .readUsers:
return .get
case .updateUser(_, _):
return .put
case .deleteUser(_):
return .delete
}
}
// 샘플데이터
var sampleData: Data {
switch self {
case .createUser(let name):
return "{'name':'\(name)'}".data(using: .utf8)!
case .readUsers:
return Data()
case .updateUser(let id, let name):
return "{'id':'\(id)', 'name':'\(name)'}".data(using: .utf8)!
case .deleteUser(let id):
return "{'id':'\(id)'}".data(using: .utf8)!
}
}
// HTTP 작업유형
var task: Task {
switch self {
case .readUsers, .deleteUser(_):
return .requestPlain
case .createUser(let name), .updateUser(_, let name):
return .requestParameters(parameters: ["name": name], encoding: JSONEncoding.default)
}
}
// HTTP헤더
var headers: [String : String]? {
return ["Content-Typer" : "application/json"]
}
}
3.viewcontroller에서의 사용은 userProvieder를 생성후, 파라미터 값을 담아서 요청하면 응답을 받을수 있습니다.
import UIKit
import Moya
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var users = [User]()
let userProvider = MoyaProvider<UserService>()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
readRequest()
}
@IBAction func didTapAdd(_ sender: Any) {
let kilo = User(id: 11, name: "준준") // 파라미터에 값담아 요청
userProvider.request(.createUser(name: kilo.name)) { result in
switch result {
case .success(let response):
print("create: \(response)")
let newUser = try! JSONDecoder().decode(User.self, from: response.data)
self.users.insert(newUser, at: 0)
self.tableView.reloadData()
case .failure(let error):
print("create error : \(error)")
}
}
}
private func readRequest() {
userProvider.request(.readUsers) { (result) in
switch result {
case .success(let response):
print("read: \(response)")
//let json = try! JSONSerialization.jsonObject(with: response.data, options: [])
let users = try! JSONDecoder().decode([User].self, from: response.data)
self.users = users
self.tableView.reloadData()
case .failure(let error):
print("read request error : \(error)")
}
}
}
}
GitHub - Moya/Moya: Network abstraction layer written in Swift.
Network abstraction layer written in Swift. Contribute to Moya/Moya development by creating an account on GitHub.
github.com
https://memohg.tistory.com/123
[TIL] Moya 장점과 간단한 사용법
안녕하세요 오늘은 웹 네트워크 쪽을 공부하다가 우연히 Moya를 알게 되어서 신기해서 사용방법을 정리해 보았습니다 ㅎㅎ Moya의 장점 Alamofire는 재사용이 불편하다 Moya는 Network layer를 템플릿화
memohg.tistory.com
깃예제
iOS-Moya를 이용한 API통신처리
앱개발을 하면 반드시 해야 하는 부분이 http통신으로 restful api 데이터를 받아와서 앱에 데이터를 표시해주거나 데이터를 보내주는 기능이다.라이브러리 없이 순수 swift만으로도 개발이 가능하
velog.io
https://techblog.woowahan.com/2704/
iOS Networking and Testing | 우아한형제들 기술블로그
{{item.name}} Why Networking? Networking은 요즘 앱에서 거의 필수적인 요소입니다. 설치되어 있는 앱들 중에 네트워킹을 사용하지 않는 앱은 거의 없을 겁니다. API 추가가 쉽고 변경이 용이한 네트워킹
techblog.woowahan.com
'iOS > 서버연동' 카테고리의 다른 글
Http Status Code (0) | 2023.03.03 |
---|---|
Socket.IO 사용법 (0) | 2022.07.22 |
ssh_exchange_identification: read: Connection reset by peer 에러 해결 (0) | 2022.07.21 |
네트워크 연결 체크 NMNetworkMonitor (0) | 2022.05.24 |
Alamofire 사용법 (0) | 2022.03.15 |