How to append default request parameters, for example AppID, to each and every API call with (Rx) Moya ?
Append parameters to each network call with Moya
2k Views Asked by Blackbeard At
2
There are 2 best solutions below
0

//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()
}
})
}
}
Endpoint
class in Moya hasadding(newHTTPHeaderFields:)
which takes a dictionary, here you can provide your additional http headers which will be sent for every request. Documentation link