MPNetworking 0.4.0

MPNetworking 0.4.0

Kutan Çıngısız维护。



  • Kutan Çıngısız

MPNetworking

CocoaPods compatible CocoaPods compatible

用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)
}