现代应用程序与许多不同的 API 交互。Netable 通过提供使用这些 API 来驱动高质量的 iOS 和 MacOS 应用程序的简单接口,并基于 Swift Codable
,从而在需要时仍支持非标准和非常规 API,使其变得更加容易。
特性
Netable 的核心哲学是确保开发者可以为简单的 API 编写简单的代码,同时提供各种选项来处理奇特或非标准的 API。
- 每个请求都是一个独立类型
- 便于将请求拆分为单独的文件,避免单一的联网类
- 基于
Codable
的Result
返回类型- 便于模型层和控制器层之间的交互
- 减少对包装类型的需求
- 可自动将请求响应转换为可使用对象
- 易于与现有日志库集成,或默认使用
debugPrint
进行记录 - 全面的错误类型使处理预期和非预期错误变得轻松愉快
用法
标准用法
Netable
实例,并传入您的基本网址
创建一个新的 let netable = Netable(baseURL: URL(string: "https://api.thecatapi.com/v1/")!)
Request
扩展 struct CatImage: Decodable {
let id: String
let url: String
}
struct GetCatImages: Request {
typealias Parameters = [String: String]
typealias RawResource = [CatImage]
public var method: HTTPMethod { return .get }
public var path: String {
return "images/search"
}
public var parameters: [String: String] {
return ["mime_type": "jpg,png", "limit": "2"]
}
}
发出您的请求并处理结果
netable.request(GetCatImages()) { result in
switch result {
case .success(let catImages):
if let firstCat = catImages.first,
let url = URL(string: firstCat.url),
let imageData = try? Data(contentsOf: url) {
self.catsImageView1.image = UIImage(data: imageData)
}
if let lastCat = catImages.last,
let url = URL(string: lastCat.url),
let imageData = try? Data(contentsOf: url) {
self.catsImageView2.image = UIImage(data: imageData)
}
case .failure(let error):
let alert = UIAlertController(
title: "Uh oh!",
message: "Get cats request failed with error: \(error)",
preferredStyle: .alert
)
alert.addAction(UIAlertAction(title: "OK", style: .cancel))
self.present(alert, animated: true, completion: nil)
}
}
资源提取
让您的请求对象处理从原始资源提取可用的对象
struct CatImage: Decodable {
let id: String
let url: String
}
struct GetCatImageURL: Request {
typealias Parameters = [String: String]
typealias RawResource = [CatImage]
typealias FinalResource = URL
// ...
func finalize(raw: RawResource) -> Result<FinalResource, NetableError> {
guard let catImage = raw.first else {
return .failure(NetableError.resourceExtractionError("The CatImage array is empty"))
}
guard let url = URL(string: catImage.url) else {
return .failure(NetableError.resourceExtractionError("Could not build URL from CatImage url string"))
}
return .success(url)
}
}
让您的网络代码处理重要的事情
netable.request(GetCatImageURL()) { result in
switch result {
case .success(let catUrl):
guard let imageData = try? Data(contentsOf: catUrl) else {
return
}
self.imageView.image = UIImage(data: imageData)
case .failure(let error):
// ...
}
}
完整文档
通过Jazzy和GitHub Pages提供深入文档。
示例
要运行示例项目,首先克隆仓库,然后在示例目录下运行pod install
。
要求
- iOS 10.0+
- MacOS 10.15+
- Xcode 11.0+
安装
Netable可以通过Swift包管理器获取。安装步骤如下:
- 在Xcode中,单击文件,然后选择Swift包管理器,接着选择添加包依赖
- 选择你的项目
- 在搜索栏中输入此URL:
https://github.com/steamclock/netable.git
Netable同样可以通过CocoaPods获取。安装方法如下,只需在你的Podfile中添加以下行:
pod 'Netable'
然后运行pod install
。
许可
Netable受MIT许可证管理。有关更多详情,请查看License.md。