NBNRequestKit 3.1.0

NBNRequestKit 3.1.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
版本上次发布2022年1月
SPM支持 SPM

Piet Brauer 维护。



RequestKit

codecov.io

octokit.swift、TanukiKit、TrashCanKit 和 VloggerKit 的基础。

安装

Carthage

# Cartfile
github "nerdishbynature/RequestKit"

CocoaPods

# Podfile
pod "NBNRequestKit"

用法

要使用RequestKit发起请求,你需要三部分:一个Router、一个Configuration,以及通常是一个既了解它们又连接它们的对象。见OctoKit

定义一个路由器

路由器是通过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"]
        }
    }
}

定义配置

由于RequestKit是为了处理OAuth请求而设计的,我们需要某种东西来存储用户凭据。这就是配置发挥作用的地方。配置在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将作为每个请求的URL参数名称为access_token的值传递。或者,你可以通过将authorizationHeader属性设置为所需的令牌类型,将accessToken传递到HTTP授权头中。例如,以下Configuration将作为管理员令牌传递。

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

定义绑定对象

我们需要一些东西来连接路由器和配置,以提供便捷的界面。通常的做法是使用structclass

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