轻便的网络层,用于创建不同的网络请求集,例如 GET、POST、PUT、DELETE,可通过符合 TopLevelDecoder
、TopLevelEncoder
的编码器进行自定义
使用接口 IEnvironment 定义 enum
enum Environment: IEnvironment {
case development
case production
var baseURL: String {
switch self {
case .development: return "https://:3000"
case .production: return "https://apple.com"
}
}
var headers: [IRequestHeader]? {
switch self {
case .development: return [ContentType.applicationJSON]
case .production: return [ContentType.textJSON]
}
}
var logger : ILogger? {
switch self {
case .development: return ServiceLogger()
case .production: return nil
}
}
}
请求的所有标头都必须符合接口 IRequestHeader
内容类型标头的示例实现在此处 ContentType.swift
如果您不需要来自 URLRequest 和 URLResponse 的某些特定数据,或者使用接口 ILogger 定义自己的日志记录器,则可以使用开箱即用的标准日志记录器 ServiceLogger
定义端点 API enum
enum UserRestAPI {
case index
case read(id: Int)
case create
case update
case delete(id: Int)
}
使用接口 IRequest 扩展 enum
字段 | 类型 |
---|---|
路由 | 字符串 |
方法 | RequestMethod |
extension UserRestAPI: IRequest {
var route: String {
switch self {
case .index: return "/user"
case .read(let id): return "/user/\(id)"
case .create: return "/user"
case .update: return "/user"
case .delete(let id): return "/user/\(id)"
}
}
var method: RequestMethod {
switch self {
case .index: return .get
case .read(_): return .get
case .create: return .post
case .update: return .put
case .delete(_): return .delete
}
}
}
示例实现位于 UserRestAPI.swift UserRestAPI.swift
let network = NetworkService(environment: Environment.development)
execute
- 从端点配置执行请求 GET、POST、PUT、DELETE目前有四种可用方法:GET、POST、PUT、DELETE
将 [String: CustomStringConvertible] 字典传递给可用于 GET、POST、PUT 请求的参数。这是一个可选参数。
let cfg = UserRestAPI.read(id: 1)
let publisher: Output = network.execute(with: cfg, ["token" : 65678])
let cfg = UserRestAPI.create
let user = Model(id: 11, name: "Igor")
let publisher: Output = network.execute(body: user, with: cfg)
let cfg = UserRestAPI.update
let user = Model(id: 11, name: "Igor")
let publisher: Output = network.execute(body: user, with: cfg)
let cfg = UserRestAPI.delete(id: 11)
let publisher: Output = network.execute(with: cfg)
let read: Output = network.execute(with: UserRestAPI.index)
let user = Model(id: 11, name: "Igor")
let create: Output = network.execute(body: user, with: UserRestAPI.create)
read.then(create)
// or chain it using predicate to analyze previous result
read.then(ifTrue : {$0.count > 1}, create)
将结果收集在数组中,并等待所有请求完成
所有请求都期望相同的输出和失败
[read, create, delete, update, read, read ].doTogether
首先将 创建 和 更新 请求作为一个组,然后 读取
[create, update]
.waitEverybody
.then(read)
[create, delete]
.waitEverybody
.then([delete, read].doTogether)
在 Xcode 中 - 选择 Xcode
>File
> Swift Packages
>Add Package Dependency...
并添加 https://github.com/The-Igor/d3-network-service
为了在真实环境中尝试,我建议安装基本的 NodeJS Express 样板。看看视频片段,了解通过 Webstorm 获取它是多么容易,Webstorm 在试用期内可以免费使用。