SeSAC OOD 11/21
今日はどこから何を始めるか考えているうちに、まずサーバー通信をテストすることにしました.しかし、サーバー通信もどこから始めるのか...Alamofireだけ使うのかな…そしてこのプロジェクトのそのプロジェクトのコードを見て、Moyaが気持ちよさそうに見えました.コードだけで何を意味しているのかわかるし、後でサーバーのOODも加えてメンテナンスしやすくなるので、Moyaを使うことにしました
ライブラリハブのホームページ
https://github.com/Moya/Moya ライブラリの使用方法
https://github.com/Moya/Moya/blob/master/docs/Examples/Basic.md
MoyaはAlamofieを直接呼び出してネットワーク抽象層をカプセル化するライブラリである.だから実際にはサーバー通信を行う役割ではなく、きれいに整理されていますか?ライブラリとして理解されました...そうですか.
そこでAlamofire氏は、URLセッションを抽象化すると、Moyaは抽象URLやパラメータなどを抽象化すると述べた. URLSSession->iOSが提供するHTTPでAPIを提供し、データの送受信を支援
優先APIService.swiftという名前のファイルを作成し、使用するすべてのAPIをenumに設定します.各APIに必要なパラメータ(トークン、クエリー、パス、ボディ)は、各エンクロージャのパラメータとして定義することもできます. 作成されたばかりのAPI enumは、Moyaのターゲットタイププロトコル を使用する必要があります.
path:各APIパスを保存(パス変数を指定)
方法:各API CRUDタイプを設定する
task:各APIに必要なパラメータを設定する
->マスターリクエストを同時に送信する必要がある場合は、エンコーディング:JSONNcode.default
->クエリーが必要な場合はエンコーディング:URLエンコーディング.queryString
->画像を返します.uploadMultipart([MultipartFormData])
何もいらなければ、引き返す.requestPlain
SampleData:テスト用データ
ヘッダー:各APIヘッダー(Content-Typeとタグ)を指定します.
この部分は月曜日ではなく月曜日に埋め尽くす^0^,,,
-フォルダのクリーンアップ+plistの光源モード固定&font設定+color asset追加+launchscreen+moya学習
Moya Github
https://github.com/Moya/Moya
https://github.com/Moya/Moya/blob/master/docs/Examples/Basic.md
Moya
MoyaはAlamofieを直接呼び出してネットワーク抽象層をカプセル化するライブラリである.だから実際にはサーバー通信を行う役割ではなく、きれいに整理されていますか?ライブラリとして理解されました...そうですか.
そこでAlamofire氏は、URLセッションを抽象化すると、Moyaは抽象URLやパラメータなどを抽象化すると述べた.
1.すべてのAPIを列挙に設定
enum APITarget { // 토큰 쿼리 패스 바디 모두 입력
case signup(email: String, password: String, nickname: String, exCycle: Int)
case signin(email: String, password: String)
case certiContentUpload(token: String, exTime: String, exIntensity: String, exEvalu: String, exComment: String, certiSport: String)
case certiImageUpload(token: String, image: UIImage, certiId: Int)
case certiByCal(token: String, date: String)
case certiDetail(token: String, certiId: Int)
case certiUpdate(token: String, exTime: String, exIntensity: String, exEvalu: String, exComment: String, certiSport: String, certiId: Int)
case certiDelete(token: String, certiId: Int)
case mypageAllCerti(token: String)
case mypageInfo(token: String)
case settingExCycle(token: String, exCycle: Int)
}
2.enumを採用したTargetType
extension APITarget: TargetType {
var baseURL: URL {
return URL(string: "http://[baeURL]")!
}
var path: String { // path에 들어갈 파라미터 넣어주기
switch self {
case .signup:
return "/user/signup"
case .signin:
return "/user/signin"
case .certiContentUpload:
return "/certi"
case .certiImageUpload(_, _, let certiId):
return "/certi/image/\(certiId)"
case .certiByCal:
return "/certi"
case .certiDetail(_, let certiId):
return "/certi/detail/\(certiId)"
case .certiUpdate:
return "/certi"
case .certiDelete(_, let certiId):
return "/certi/\(certiId)"
case .mypageAllCerti:
return "/mypage"
case .mypageInfo:
return "/mypage/info"
case .settingExCycle:
return "/mypage/cycle"
}
}
var method: Moya.Method { // 각 CRUD
switch self {
case .signup, .signin, .certiContentUpload, .certiImageUpload:
return .post
case .certiByCal, .certiDetail, .mypageAllCerti, .mypageInfo:
return .get
case .certiUpdate, .settingExCycle:
return .put
case .certiDelete:
return .delete
}
}
var sampleData: Data {
return Data()
}
var task: Task { // 바디는 JSONEncoding.default, 쿼리가 들어가면 URLEncoding.queryString, 이미지는 .uploadMultipart
switch self {
case .certiDetail, .mypageAllCerti, .mypageInfo, .certiDelete:
return .requestPlain
case .certiByCal(_, let date): // 쿼리
return .requestParameters(parameters: ["date": date], encoding: URLEncoding.queryString)
case .signup(let email, let password, let nickname, let exCycle):
return .requestParameters(parameters: ["email": email, "password": password, "nickname": nickname, "ex_cycle": exCycle], encoding: JSONEncoding.default)
case .signin(let email, let password):
return .requestParameters(parameters: ["email": email, "password": password], encoding: JSONEncoding.default)
case .certiContentUpload(_, let exTime, let exIntensity, let exEvalu, let exComment, let certiSport):
return .requestParameters(parameters: ["ex_time": exTime, "ex_intensity": exIntensity, "ex_evalu": exEvalu, "ex_comment": exComment, "certi_sport": certiSport], encoding: JSONEncoding.default)
case .certiImageUpload(_, let image, _):
let imageData = MultipartFormData(provider: .data(image.jpegData(compressionQuality: 1.0)!), name: "image", fileName: "jpeg", mimeType: "image/jpeg")
return .uploadMultipart([imageData])
case .certiUpdate(_, let exTime, let exIntensity, let exEvalu, let exComment, let certiSport, _):
return .requestParameters(parameters: ["ex_time": exTime, "ex_intensity": exIntensity, "ex_evalu": exEvalu, "ex_comment": exComment, "certi_sport": certiSport], encoding: JSONEncoding.default)
case .settingExCycle(_, let exCycle):
return .requestParameters(parameters: ["ex_cycle": exCycle], encoding: JSONEncoding.default)
}
}
var headers: [String : String]? {
switch self {
case .signup, .signin:
return ["Content-Type": "application/json"]
case .certiImageUpload(let token, _, _):
return ["Content-Type": "multipart/form-data", "token": token]
case .certiContentUpload(let token, _,_,_,_,_), .certiByCal(let token, _), .certiDetail(let token, _), .certiUpdate(let token, _,_,_,_,_,_), .certiDelete(let token, _), .mypageAllCerti(let token), .mypageInfo(let token), .settingExCycle(let token, _):
return ["Content-Type" : "application/json", "token" : token]
}
}
baseURL:サーバアドレスpath:各APIパスを保存(パス変数を指定)
方法:各API CRUDタイプを設定する
task:各APIに必要なパラメータを設定する
->マスターリクエストを同時に送信する必要がある場合は、エンコーディング:JSONNcode.default
->クエリーが必要な場合はエンコーディング:URLエンコーディング.queryString
->画像を返します.uploadMultipart([MultipartFormData])
何もいらなければ、引き返す.requestPlain
SampleData:テスト用データ
ヘッダー:各APIヘッダー(Content-Typeとタグ)を指定します.
3.Moya providerの使用
この部分は月曜日ではなく月曜日に埋め尽くす^0^,,,
+今日作った
-フォルダのクリーンアップ+plistの光源モード固定&font設定+color asset追加+launchscreen+moya学習
Reference
この問題について(SeSAC OOD 11/21), 我々は、より多くの情報をここで見つけました https://velog.io/@gaebokchi/SeSAC-OOD-1121テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol