返回 导航

Swift

hangge.com

Swift - 网络抽象层库Moya的使用详解2(请求参数说明)

作者:hangge | 2017-09-27 08:10

四、请求参数说明

1,不同请求方法(HTTP Methods)下参数的传递

假设我们使用 Moya 定义了一个网络请求层(HttpbinAPI.swift),具体代码如下:
import Moya

//初始化Httpbin.org请求的provider
let HttpbinProvider = MoyaProvider<Httpbin>()

//请求分类
public enum Httpbin {
    case ip
    case anything(String)  //请求数据
}

//请求配置
extension Httpbin: TargetType {
    //服务器地址
    public var baseURL: URL {
        return URL(string: "http://httpbin.org")!
    }
    
    //各个请求的具体路径
    public var path: String {
        switch self {
        case .ip:
            return "/ip"
        case .anything(_):
            return "/anything"
        }
    }
    
    //请求类型
    public var method: Moya.Method {
        return .post
    }
    
    //请求任务事件(这里附带上参数)
    public var task: Task {
        switch self {
        case .anything(let param1):
            var params: [String: Any] = [:]
            params["param1"] = param1
            params["param2"] = "2017"
            return .requestParameters(parameters: params,
                                      encoding: URLEncoding.default)
        default:
            return .requestPlain
        }
    }
    
    //是否执行Alamofire验证
    public var validate: Bool {
        return false
    }
    
    //这个就是做单元测试模拟的数据,只会在单元测试文件中有作用
    public var sampleData: Data {
        return "{}".data(using: String.Encoding.utf8)!
    }
    
    //请求头
    public var headers: [String: String]? {
        return nil
    }
}
通过修改 method 属性我们可以配置每个请求所使用的请求方法(GETPOST),不同的方法下参数传递的方式也是不同的:
  • 使用 GET 方式请求时:参数会自动拼接在 url 后面
  • 使用 POST 方式请求时:参数是放在在 HTTP body 里传递,url 上是看不到的。


2,可选参数(Optional request parameters)

如果我们将一个参数设为 nil,那么相当于将其从参数列表中删除,发送请求时是不会传递这个参数的。

(1)比如我们对 task 方法做个修改,将 param2 参数置为 nil
public var task: Task {
    switch self {
    case .anything(let param1):
        var params: [String: Any] = [:]
        params["param1"] = param1
        params["param2"] = nil
        return .requestParameters(parameters: params,
                                  encoding: URLEncoding.default)
    default:
        return .requestPlain
    }
}

(2)可以看到发送请求时,param2 这个参数是不会被传递的(不管 GET 方式,还是 POST 方式)
评论

全部评论(7)

回到顶部