RestBird 0.5.4

RestBird 0.5.4

Botond Magyarosi 维护。



RestBird 0.5.4

  • Halcyon Mobile

RestBird🦉

Codacy Badge Build Status codecov

关于

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

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

需求

  • iOS 10.0+ / macOS 10.12+
  • XCode 11.4+
  • Swift 5.2+

功能

  • 支持 Codable。
  • PromiseKit 封装器。
  • RxSwift 封装器。
  • 自动请求参数序列化(Codable)

安装说明

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"

Setup

为开发设置项目的步骤

  • 克隆存储库
  • 通过执行 swift package generate-xcodeproj 生成 Xcode 项目
  • 打开项目

Usage

General

首先,您需要创建一个 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: "[email protected]", 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())

元支持

为了避免为网络类编写样板代码,我们编写了一些模板,用于使用 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