MPNetworking
用Swift编写的网络抽象层,用于MenaPay iOS项目
安装
MPNetworking支持CocoaPods
pod 'MPNetworking', '0.2.2'
NetworkManager
NetworkManager至少需要四个参数来调用不需要认证令牌的请求
- 基础URL
- 客户端版本
- 客户端类型
- 用户类型
import Foundation
import MPNetworking
class ViewController: UIViewController {
var networking: NetworkManager!
override func viewDidLoad() {
super.viewDidLoad()
networking = NetworkManager(baseURL: "myawesomeplatform.api.com",
userType: "RESELLER",
clientType: "menapay-business",
clientVersion: "v3")
}
}
为了设置令牌,只需调用一次setToken即可
/// token: String
self.networking.setToken(token)
此后无需再次设置令牌。NetworkManager将处理所需端点是否需要令牌头
端点
使用NetworkManager进行调用需要两个参数:一个端点和具有可编码类型的对象。为了创建端点,建议添加一个用于返回Endpoint对象的静态扩展方法
// MARK: Transcation Endpoints
extension Endpoint {
static func getAllTranscations() -> Endpoint {
return Endpoint(path: "/transaction/corporate/filter",
method: .get,
task: .requestParameters(["type": "USER",
"status": "COMPLETED"]),
parametersEncoding: .query)
}
}
如果请求不需要令牌认证,则必须将authenticationRequired设置为false
// MARK: An Endpoint doesn't require authentication
extension Endpoint {
static func getCountries() -> Endpoint {
return Endpoint(path: "/country/list",
method: .get,
task: .requestPlain,
authenticationRequired: false,
parametersEncoding: .query)
}
}
发送请求
NetworkManager会将请求的格式进行解码,因此无需再次解码。
import MPNetworking
// MARK: Country Loader
class CountryLoader {
var networking: NetworkManager
init(networking: NetworkManager) {
self.networking = networking
}
func getCountries() {
networking.request(endpoint: .getCountries()) { result in
switch result {
case .success(let responseData):
self.handleResponse(responseData)
case .failure(let error):
self.handleError(error)
}
}
}
}
网络错误
如果NetworkManager无法完成请求,则返回一个网络错误。
public enum NetworkError: Error {
case networkFailure
case unAuthorized
case emptyJSONData
case noValidEthererumAddressFound
case insufficentEthereumBalance(Data)
}