RestBird 🦉

Codacy Badge Build Status codecov

关于

基于 Alamofire 构建的、基于 Codable 协议的轻量级、无状态 REST 网络管理器。

要了解更多关于此库的信息,请查看文档

要求

特性

安装说明

Swift Package Manager

将 RestBird 作为依赖项添加到您的项目中。

.package(url: "https://github.com/Alamofire/Alamofire.git", from: "0.5")

然后,简单地将 RestBird 与您的目标集成。

targets: [
    Target(name: "YourTarget", dependencies: ["RestBird"])
]

CocoaPods

pod 'RestBird'

您也可以尝试运行

pod try RestBird

Carthage

github "halcyonmobile/RestBird"

设置

设置项目进行开发的步骤

用法

常规

首先,您需要使用自定义或提供的会话管理器驱动程序之一创建您的 NetworkClientConfiguration 配置。我们将使用 AlamofireSessionManager。

struct MainAPIConfiguration: NetworkClientConfiguration {
    let baseUrl = "https://api.example.com"
    let sessionManager = AlamofireSessionManager()
    let jsonEncoder = JSONEncoder()
    let jsonDecoder = JSONDecoder()
}

现在我们可以将此配置传递给网络客户端。

let networkClient = NetworkClient(configuration: MainAPIConfiguration())

为了发出请求,应该定义一个 DataRequest 对象。

struct SignIn: DataRequest {
    typealias ResponseType = Authentication

    let email: String
    let password: String

    let suffix: String? = API.Path.login
    let method: HTTPMethod = .post
    var parameters: [String : Any]? {
        return [API.Param.email: email, API.Param.password: password]
    }
}

现在使用您的网络客户端来执行请求。

let request = SignIn(email: "john-doe@acme.inc", password: "123456")
networkClient.execute(request: request, completion: { result: Result<Authentication> in
    print(result)
})

中间件

中间件是一种强大的方式来拦截网络请求或响应端点返回的响应。

目前,中间件分为两类

struct LoggerMiddleware: PreMiddleware {
    func willPerform(_ request: URLRequest) throws {
        Logger.log(resquest)
    }
}

struct ErrorMiddleware: PostMiddleware {
    func didPerform(_ request: URLRequest, response: URLResponse, data: Data?) throws {
        if let data = data, let error = ErrorProvider.provide(for: data) {
            throw error
        }
    }
}

// Register middleware
networkClient.register(LoggerMiddleware())
networkClient.register(ErrorMiddleware())

Meta 支持

为了避免为网络类编写样板代码,我们编写了一些模板来使用 Sourcery 生成代码。前往模板仓库

以下是使用模板的两个请求的样子

/// sourcery: Service
protocol PostService {

    /// sourcery: path = /posts/\(id)
    /// sourcery: pathParam = id
    func get(id: String, completion: (result: Result<Post>) -> Void)

    /// sourcery: method = post, path = /posts
    /// sourcery: parameter = post
    /// sourcery: parameter = json
    func save(post: Post, completion: (result: Result<Post>) -> Void)
}

便捷

您可以找到未通过软件包分发的 RestBird 的便捷封装器。这包括 PromiseKit 和 RxSwift 封装器。

查看这里

许可

RestBird 在 MIT 许可下发布。 有关详细信息,请参阅 LICENSE

如果您在您的项目中使用该开源库,请确保注明并反向链接到http://halcyonmobile.com