RequestKit

codecov.io

RequestKit 是 octokit.swiftTanukiKitTrashCanKitVloggerKit 的基础。

安装

Carthage

# Cartfile
github "nerdishbynature/RequestKit"

CocoaPods

# Podfile
pod "NBNRequestKit"

使用方法

要使用 RequestKit 发起请求,您需要三个部分:一个 Router(路由器)、一个 Configuration(配置)以及通常一个了解两者并将它们连接起来的对象。请参阅 OctoKit

定义路由器 (Router)

路由器 (Router) 通过 Router 协议定义。建议将它们定义为 Enumerations(枚举),每个路由对应一个 case。

这是一个基本的路由器 (Router) 的示例

enum MyRouter: Router {
    case getMyself(Configuration)

    var configuration: Configuration {
        switch self {
        case .getMyself(let config): return config
        }
    }

    var method: HTTPMethod {
        switch self {
        case .getMyself:
            return .GET
        }
    }

    var encoding: HTTPEncoding {
        switch self {
        case .getMyself:
            return .url
        }
    }

    var path: String {
        switch self {
        case .getMyself:
            return "myself"
        }
    }

    var params: [String: Any] {
        switch self {
        case .getMyself(_):
            return ["key1": "value1", "key2": "value2"]
        }
    }
}

定义配置 (Configuration)

由于 RequestKit 被设计为处理 OAuth 请求,我们需要一些东西来存储用户凭据。这就是配置 (Configuration) 发挥作用的地方。配置 (Configuration) 在 Configuration 协议中定义。

public struct TokenConfiguration: Configuration {
    public let accessToken: String?
    public let apiEndpoint = "https://my.webservice.example/api/2.0/"
    public let accessTokenFieldName = "access_token"
    public let errorDomain = "com.my.customErrorDomain"
    
    public init(_ accessToken: String? = nil) {
        self.accessToken = accessToken
    }
}

在上面的 Configuration 中,accessToken(访问令牌)将作为名为 access_token 的 URL 参数与每个请求一起传递。或者,您可以通过将 authorizationHeader 属性设置为所需的令牌类型,将 accessToken(访问令牌)在 HTTP Authorization header(授权标头)中传递。例如,以下 Configuration 将其作为 Bearer token(Bearer 令牌)传递。

public struct TokenConfiguration: Configuration {
    public let accessToken: String?
    public let apiEndpoint = "https://my.webservice.example/api/2.0/"
    public let authorizationHeader: String? = "Bearer"
    public let errorDomain = "com.my.customErrorDomain"
        
    public init(_ accessToken: String? = nil) {
        self.accessToken = accessToken
    }
}

定义绑定对象

我们将需要一些东西来连接路由器 (Router) 和配置 (Configuration),以提供方便的接口。常用的方法是使用 struct(结构体)或 class(类)来为您完成这项工作。

struct User : Codable {
}

struct MyWebservice {
    var configuration: Configuration

    init(configuration: Configuration) {
        self.configuration = configuration
    }

    func getMyself(session: RequestKitURLSession = URLSession.shared, completion: @escaping (_ response: Response<User>) -> Void) -> URLSessionDataTaskProtocol? {
        let router = MyRouter.getMyself(self.configuration)
        return router.load(session, expectedResultType: User.self) { user, error in
            if let error = error {
                completion(Response.failure(error))
            } else if let user = user {
                completion(Response.success(user))
            }
        }
    }
}

发起请求

您的用户只需调用您的 MyWebservice 即可

let config = TokenConfiguration("123456")
MyWebservice(configuration:config).getMyself { response in
    switch response {
        case .success(let user):
            print(user)
        case .failure(let error):
            print(error)
        }
    }
}