美文网首页
Moya 网络请求封装

Moya 网络请求封装

作者: 小王在努力 | 来源:发表于2020-11-10 18:37 被阅读0次

1、前言

任何网络请求主要由三部分构成
a、域名 : 我们经常说的URL
b、头参数 : 我们说的header
c、body : 网络请求参数存放的地方

2、定义一个枚举

每一个请求方法一个枚举上代码
public enum ApiMoya{
    //about user
    case login(username :String,password :String)
    //data upload
    case uploadVideo(data :Data)
}

3、创建一个文件

该文件继承 TargetType并且实现 TargetType的协议

extension ApiMoya : TargetType{
    public var baseURL: URL {
        switch self {
        case .uploadVideo:
            return URL(string: BaseMacro.apiUploadHost())!
        default:
            return URL(string: BaseMacro.apiHost())!
        }
    }
    public var task: Task {
        var params : [String : String] = [:]
        switch self {
        case let .login(username: username, password: password):
            params = ["username":username,"password":password]
            break
        case let .uploadVideo(data: data):
            let time = String().timeStamp
            let auto_key = "FoFHDov5mTn3OriLeE9u3loOnIL6tp7q" + time
            params = ["from":"6","uuid":BaseMacro.uuid()," time":time,"auth_key":auto_key.md5String]
            let formData: [Moya.MultipartFormData] = [Moya.MultipartFormData(provider: .data(data), name: "video", fileName: "video.mp4", mimeType: "video/mp4")]
            return .uploadCompositeMultipart(formData, urlParameters: params)
        default:
            break;
        }
        let code = ApiEncry.encodeData(params:params)
        return .requestParameters(parameters: code, encoding: URLEncoding.default)
    }
    public var path: String {
        switch self {
        case .login:
            return "cps/user/login"
        case .uploadVideo:
            return "video"
        }
    }
    public var method: Moya.Method {
        return .post
    }
    public var headers: [String : String]? {
        switch self {
        case .uploadVideo:
            return [:]//["Content-type" : "multipart/form-data"]
        default:
            return [:]
        }
    }
    public var sampleData: Data {
        return Data(base64Encoded: "just for test")!
    }

注意

a、baseURL :网络请求存放的域名
b、task :网络请求的boday
c、headers :网络请求的头参数
d、method :网络请求的方式 POST、GET、PUT、DELETE
e、path :一般是域名后名携带的参数比如域名是http://www.baidu.com 经常需要在域名后添加比如login ,http://www.baidu.com/login,这里path就是login,也可以为空
f、sampleData :单元测试使用

4、基于ApiMoya的封装

extension ApiMoya{
    public static func request(target : ApiMoya,sucesss:@escaping ((_ object : JSON) ->()),failure:@escaping ((_ error : String) ->())){
        let moya = MoyaProvider<ApiMoya>()
        moya.request(target, callbackQueue: DispatchQueue.main, progress: nil) { (result) in
            switch result{
            case let .success(respond):do{
                let json = JSON(respond.data)
                sucesss(json)
            }
            case let .failure(error):do {
                failure(error.errorDescription!)
                break
            }
            }
        }
    }
}

5、方法的调用

ApiMoya.request(target: .login(username: self.accountView.text!, password: self.pwdView.text!)) { (json) in
                print(json)
 } failure: { (error) in

  }

6、网络请求超时设置

private let timeOut = { (endpoint: Endpoint, done: @escaping MoyaProvider<ApiMoya>.RequestResultClosure) in
    do {
        var request = try endpoint.urlRequest()
        request.timeoutInterval = 10
        done(.success(request))
    } catch {
        return
    }
}

只需要在4这一步调用就可以了,比如

let moya = MoyaProvider<ApiMoya>(requestClosure:timeOut)

相关文章

  • iOS开发常用库

    pod 'Moya' 网络请求的封装 pod 'Moya/RxSwift' http://www.jianshu...

  • Moya 上传数据的两种方式

    1、前言 Moya网络请求封装不懂可以点击Moya封装[https://www.jianshu.com/write...

  • Moya + ObjectMapper + RxSwift

    使用此三剑客,访问网络更加优雅。 Moya Moya基于Alamofire的更高层网络请求封装抽象层.使用Moya...

  • Moya(I)

    安装 Moya 介绍  Moya 是一个基于 Alamofire 的更高层网络请求封装抽象层。Moya 也就可以...

  • Moya 网络请求封装

    1、前言 任何网络请求主要由三部分构成a、域名 : 我们经常说的URLb、头参数 : 我们说的heade...

  • Moya+Realm+RxSwift+SwiftyJSON优雅的

    Moya + RxSwift + SwiftyJSON + Realm 封装网络请求 先看一个例子,这段代码是请求...

  • Swift开发之一----常用第三方库

    Alamofire: 网络请求事件处理的框架。 Moya: 这是一个基于Alamofire的更高层网络请求封装抽象...

  • Moya的简单使用

    Moya是对 Alamofire的进一步封装。 简化了网络请求 方便维护 方便单元测试 使用Moya,项目中网络请...

  • 我常用的一些库和框架

    常用的pod库 swift版本 Alamofire 网络请求。 Moya 基于 Alamofire 二次封装。 T...

  • Swift(Moya+KakaJSON+PromiseKit)

    app网络请求封装工具的实现,使用Moya+KakaJSON+PromiseKit,代码如下: 创建Server配...

网友评论

      本文标题:Moya 网络请求封装

      本文链接:https://www.haomeiwen.com/subject/igwjbktx.html