🌩 TinyNetworking
- 使用 Swift 编写的简单网络抽象层。
- 对 NSURLSession 的轻量级封装。
- 支持 CRUD 方法。
- 对正确 API 端点访问进行编译时检查。
- 扩展 API 的 Combine 扩展。
- (可选)提供 API 的 RxSwift 扩展。
- 受 Moya 启发。
- 无外部依赖。
🛠 安装
CocoaPods
要使用 CocoaPods 将 TinyNetworking 集成到 Xcode 项目中,在 Podfile 中指定它
pod 'TinyNetworking'
#or
pod 'TinyNetworking/RxSwift' # for the RxSwift extentions
然后,运行以下命令
$ pod install
Carthage
即将推出
Swift 包管理器
将以下项作为依赖项添加到您的 Package.swift
.package(url: "https://github.com/jdisho/TinyNetworking.git", .upToNextMajor(from: "4.0.0"))
手动
如果您不想使用任何依赖关系管理器,可以手动将 TinyNetworking 集成到项目中,通过下载源代码并将文件放置到项目目录中。
🏃♀️ 入门指南
设置一个包含所有 API 资源的 enum
,如下所示
enum Unsplash {
case me
case photo(id: String)
case collection(id: String)
case likePhoto(id: String)
...
}
扩展 enum
并符合 Resource
协议。
extension Unsplash: Resource {
var baseURL: URL {
return URL(string: "https://api.unsplash.com")!
}
var endpoint: Endpoint {
switch self {
case .me:
return .get(path: "/me")
case let .photo(id: id):
return .get(path: "/photos/\(id)")
case let .collection(id: id):
return .get(path: "/collections/\(id)")
case let .likePhoto(id: id):
return .post(path: "/photos/\(id)/like")
}
}
var task: Task {
var params: [String: Any] = [:]
return .requestWithParameters(params, encoding: URLEncoding())
}
var headers: [String: String] {
return ["Authorization": "Bearer xxx"]
}
var cachePolicy: URLRequest.CachePolicy {
return .useProtocolCachePolicy
}
}
⚙️ 制作和处理请求
import TinyNetworking
let tinyNetworking = TinyNetworking<Unsplash>()
tinyNetworking.request(.photo(id: "1234")) { result in
switch result {
case let .success(response):
let photo = try? response.map(to: Photo.self)
print(photo)
case let .failure(error):
print(error)
}
}
🔖 响应
发送请求后,TinyNetworking
将结果以Result
的形式返回,这是两个情况之一。如果成功,将返回一个Response
对象,否则是错误。
Response
对象提供了以下使用可能性:
- 请求的原始数据。
URLRequest
对象。- HTTP响应。
- 调试描述。
- 数据的JSON表示。
- 以JSON格式打印的数据的整洁版本。
- 将数据映射/解码到可解码对象的方法。可解码对象是符合
Codable
(Decodable+Encodable
)协议的对象。
🐍 响应式扩展
响应式扩展很酷。TinyNetworking为Combine、RxSwift和很快为ReactiveSwift提供响应式扩展。
Combine
return tinyNetworking
.requestPublisher(resource: .photo(id: id))
.map(to: Photo.self)
RxSwift
return tinyNetworking.rx
.request(resource: .photo(id: id))
.map(to: Photo.self)
✨ 示例
见Papr
👤 作者
这个小程序库是用
📃 许可
TinyNetworking在MIT许可下发布。有关更多信息,请参阅License.md。