Swift-RxMoya基本設定
2914 ワード
HTTPHeaderによる共通要求パラメータの設定
実際の開発では、プラットフォームフラグの識別、インタフェースのバージョン番号の識別など、リクエストヘッダに共通のリクエストパラメータを追加する必要がある場合があります.Endpointの閉パッケージを定義できます
そしてリクエストを作成したProviderに追加します
プラグインによるネットワーク状態のリスニング
通常、loadingのようなネットワークリクエストを行うときにステータス表示を行うと、プラグインで実現できます.Moyaのデフォルトには4つのプラグインがあります.
AccessTokenPlugin AccessTokenを管理するプラグイン
CredentialsPlugin管理認証プラグイン
NetworkActivity Pluginネットワークの状態を管理するプラグイン
NetworkLoggerPluginネットワークロゴを管理するプラグイン
NetworkActivity Pluginの使用方法を説明します.
同じようにリクエストを作成したProviderに追加すればよい
もちろん、いくつかの機能のプラグインをカスタマイズすることもできます.PluginTypeプロトコルを実装するだけで、具体的な機能実装はMoyaのデフォルトのプラグインを参照することができます.
インタフェースのタイムアウト時間の設定
一般的なネットワークのリクエストは、特定のビジネスインタフェースに基づいて適切なタイムアウト時間を設定する必要があります.方法を参照して設定してください.
同じようにリクエストを作成したProviderに追加すればよい
最後に、これらの設定は1つのstructで管理することが望ましい.
Example:
使用時
実際の開発では、プラットフォームフラグの識別、インタフェースのバージョン番号の識別など、リクエストヘッダに共通のリクエストパラメータを追加する必要がある場合があります.Endpointの閉パッケージを定義できます
let endpointClosure = { (target: T) -> Endpoint in
let url = target.baseURL.appendingPathComponent(target.path).absoluteString
let endpoint = Endpoint(url: url, sampleResponseClosure: {
.networkResponse(200, target.sampleData) },
method: target.method,
parameters: target.parameters,
parameterEncoding: target.parameterEncoding)
return endpoint.adding(newHTTPHeaderFields:
["x-platform" : "iOS",
"x-interface-version" : "1.0"])}
そしてリクエストを作成したProviderに追加します
let provider = RxMoyaProvider(endpointClosure: endpointClosure)
プラグインによるネットワーク状態のリスニング
通常、loadingのようなネットワークリクエストを行うときにステータス表示を行うと、プラグインで実現できます.Moyaのデフォルトには4つのプラグインがあります.
AccessTokenPlugin AccessTokenを管理するプラグイン
CredentialsPlugin管理認証プラグイン
NetworkActivity Pluginネットワークの状態を管理するプラグイン
NetworkLoggerPluginネットワークロゴを管理するプラグイン
NetworkActivity Pluginの使用方法を説明します.
let networkPlugin = NetworkActivityPlugin { (type) in
switch type {
case .began:
print(" loading")
case .ended:
print(" loading")
}
}
同じようにリクエストを作成したProviderに追加すればよい
let provider = RxMoyaProvider(plugins:[networkPlugin])
もちろん、いくつかの機能のプラグインをカスタマイズすることもできます.PluginTypeプロトコルを実装するだけで、具体的な機能実装はMoyaのデフォルトのプラグインを参照することができます.
final class CustomPlugin: PluginType {
// MARK: Plugin
}
インタフェースのタイムアウト時間の設定
一般的なネットワークのリクエストは、特定のビジネスインタフェースに基づいて適切なタイムアウト時間を設定する必要があります.方法を参照して設定してください.
let requestClosure = { (endpoint: Endpoint, done: @escaping MoyaProvider.RequestResultClosure) in
guard var request = endpoint.urlRequest else { return }
request.timeoutInterval = 30 //
done(.success(request))
}
同じようにリクエストを作成したProviderに追加すればよい
let provider = RxMoyaProvider(requestClosure: requestClosure)
最後に、これらの設定は1つのstructで管理することが望ましい.
Example:
struct HttpArgument {
let endpointClosure = .....
let requestClosure = ......
let networkPlugin = ......
let accessTokenPlugin = .....
}
使用時
private lazy var provider: RxMoyaProvider = { () -> RxMoyaProvider in
let argument = HttpArgument()
let provider = RxMoyaProvider(endpointClosure: argument.endpointClosure,
plugins:[argument.networkPlugin])
return provider
}()