1

私はネットワーク層を改善しようとしているので、よりスケーラブルなコードを作成するためにMoyaを使用しました。

JSON オブジェクトを要求する単純な要求メソッド (Alamofire を使用) があります (このtheMovieDB API を例として使用しています。したがって、これは作業コードです:

class Endpoints{

func getGenres(callback: @escaping (NSDictionary?)->()){
    let headers = [
        "Authorization": "Bearer 1234556789123345",
        "Content-Type": "application/json;charset=utf-8"
    ]

    let parameters: [String: String] = ["api_key": "1234567890"]
    let url = "https://api.themoviedb.org/3/genre/movie/list?"

    Alamofire.request(url, method: .get, parameters: parameters, headers: headers).responseJSON{ (response:DataResponse<Any>) in

        switch(response.result) {
        case .success(_):
            if response.result.value != nil{
                let t: NSDictionary = response.result.value as! NSDictionary
                callback(t)
            }
            break
        case .failure(_):
            print(response.result.error!)
            callback(nil)
            break
        }
    }
}

上記のコードはまったく問題なく動作しますが、Moya と同等の構造をコーディングしたいので、ドキュメントに強く触発されたものを用意しました。

import Foundation
import Moya

enum MyService {
    case getGenres
}

// MARK: - TargetType Protocol Implementation
extension MyService: TargetType {
     var baseURL: URL { return URL(string: 
 "https://api.themoviedb.org/3")! }
    var path: String {
    switch self {
    case .getGenres:
        return "/genre/movie/list?"
    }
}
var method: Moya.Method {
    switch self {
    case .getGenres:
        return .get
    }
}
var parameters: [String: Any]? {
    switch self {
    case .getGenres:
        return ["api_key": "1234567890"]
    }
}
var parameterEncoding: ParameterEncoding {
    switch self {
    case .getGenres:
        return JSONEncoding.default
    }
}
var sampleData: Data {
    switch self {
    case .getGenres:
        return "".utf8Encoded

    }
}
var task: Task {
    switch self {
    case .getGenres:
        return .request
    }
}
var headers: [String: String]? {
    return [
        "Authorization": "Bearer 1234556789123345",
        "Content-Type": "application/json;charset=utf-8"
    ]
}

}

// MARK: - Helpers
private extension String {
var urlEscaped: String {
    return self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
}

var utf8Encoded: Data {
    return self.data(using: .utf8)!
}
}

もやサービスを利用する場合:

let provider = MoyaProvider<MyService>()

    provider.request(.getGenres) { (result) in
        print(result)
    }

Moya サービスを使用すると、常に 504 またはタイムアウト応答が返されます。

何か案は?

4

0 に答える 0