一、简介
Moya是一个网络抽象层,它在底层将Alamofire进行封装,对外提供更简洁的接口供开发者调用。在Objective-C中,大部分开发者会使用AFNetwork进行网络请求,当业务复杂一些时,会对AFNetwork进行二次封装,编写一个适用于自己项目的网络抽象层。在Objective-C中,有著名的YTKNetwork,它将AFNetworking封装成抽象父类,然后根据每一种不同的网络请求,都编写不同的子类,子类继承父类,来实现请求业务。Moya在项目层次中的地位,有点类似于YTKNetwork。可以看下图对比
二、模块组成
- Provider:provider是一个提供网络请求服务的提供者。通过一些初始化配置之后,在外部可以直接用provider来发起request。
- Request:在使用Moya进行网络请求时,第一步需要进行配置,来生成一个Request。首先按照官方文档,创建一个枚举,遵守TargetType协议,并实现协议所规定的属性。为什么要创建枚举来遵守协议,枚举结合switch语句,使得API管理起来比较方便。
根据创建了一个遵守TargetType协议的名为YShareAPI的枚举,我们完成了如下几个变量的设置。
- baseURL
- path
- method
- sampleData
- task
- headers
三、简单使用Demo
引入框架
pod 'Moya', '~> 14.0'
# or
pod 'Moya/RxSwift', '~> 14.0'
# or
pod 'Moya/ReactiveSwift', '~> 14.0'
YShareApI.swift
//
// YShareApI.swift
//
//
// Created by bruce yao on 2019/4/10.
// Copyright © 2019 bruce yao. All rights reserved.
//
import UIKit
import Moya
import RxCocoa
import Result
import SwiftyJSON
//初始rovider
let YShareApiProvider = MoyaProvider<YShareAPI>()
/** 请求的endpoints)**/
//请求分类
enum YShareAPI {
case shareNavList:
case shareList(pageSize: Int, pageNum: Int):
}
//请求配置
extension YShareAPI: TargetType {
//服务器地址
public var baseURL: URL {
switch self {
default:
return URL(string: HD_Search_Base)!
}
}
//各个请求的具体路径
public var path: String {
switch self {
case .shareNavList:
return "manage/navigation/getNavigationList"
default:
return "ddddd/list"
}
}
//请求类型
public var method: Moya.Method {
switch self {
default:
return .get
}
}
//请求任务事件(这里附带上参数)
public var task: Task {
switch self {
case .shareNavList:
return .requestPlain
case .shareList(let pageSize, let pageNum):
var params: [String: Any] = [:]
params["pageSize"]