使用 Moya 将参数附加到每个网络调用
Posted
技术标签:
【中文标题】使用 Moya 将参数附加到每个网络调用【英文标题】:Append parameters to each network call with Moya 【发布时间】:2018-11-09 13:03:19 【问题描述】:如何使用 (Rx) Moya 将默认请求参数(例如 AppID)附加到每个 API 调用?
【问题讨论】:
检查this 和this。他们应该可以帮助您找到自己的方式。 【参考方案1】:Moya 中的Endpoint
类有adding(newHTTPHeaderFields:)
,它需要一个字典,在这里您可以提供您的附加http 标头,这些标头将为每个请求发送。文档link
let endpointClosure = (target: TargetType) -> Endpoint in
let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target)
return defaultEndpoint.adding(newHTTPHeaderFields: ["AppID": "MY_APP_ID"])
let provider = MoyaProvider<TargetType>(endpointClosure: endpointClosure)
【讨论】:
谢谢!但这并不能解决附加默认参数的问题。据我所知,该代码仅允许附加 HTTP 标头。【参考方案2】: //Create a BaseMoyaProvider class and add default paramaters
import Moya
import Result
import SwiftyJSON
class BaseMoyaProvider
static func create<T: TargetType>(service: T.Type) -> (T)->(Endpoint)
let closure = (target: T) -> Endpoint in
let endpoint = MoyaProvider.defaultEndpointMapping(for: target)
switch endpoint.task
case .requestParameters(
let _parameters,
let _encoding):
let parameters = _parameters
.appending([
"AppID" : "XXXXXXXXXXX"
])
let task = Task.requestParameters(
parameters: parameters,
encoding: _encoding
)
return endpoint
.replacing(task: task)
default: return endpoint
`enter code here`
return closure
//Extend MoyaProvider class
extension MoyaProvider
static func build() -> MoyaProvider<Target>
let provider = BaseMoyaProvider
.create(service: Target.self)
return MoyaProvider<Target>(
endpointClosure: provider,
plugins: [ ApiLogger() ]
)
// MARK: Request
func rx_request<T: Mappable>(_ target: Target) -> Observable<T>
return Observable.create( (observer) -> Disposable in
let request = self.request(target, completion: (result) in
//Handle response
)
return Disposables.create
request.cancel()
)
【讨论】:
以上是关于使用 Moya 将参数附加到每个网络调用的主要内容,如果未能解决你的问题,请参考以下文章