🦉
RestBird
关于
基于 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