网络层,用于运行 GET、POST、PUT、DELETE 等请求,可通过编码器自定义。能够使用不同的策略重试请求
或
try await Http.Get.from(url, retry: 5, validate: [.status(200)])
try await Http.Post.from(url, taskDelegate : TaskDelegate())
try await Http.Put.from(url, body: data)
try await Http.Delete.from(url)
快速通道函数返回 (Data, URLResponse),如果您需要验证状态代码,可以使用 func validateStatus 检查不同的策略 Http.Validate.Status
let (data, response) = try await Http.Get.from(url)
let rule : Http.Validate.Status = .range(200..<300)
try validateStatus(response, by: rule)
let url = URL(string: "https://:3000")
let http = Http.Proxy(baseURL: url)
let cfg = Http.Configuration(
reader: SomeReader(),
writer: SomeWriter(),
baseURL: baseURL,
session: session)
let http = Http.Proxy(config: cfg)
try await http.get(path: "users")
try await http.get(path: "users", retry : 5)
try await http.get(path: "users", validate: [.status(.range(200..<300))])
try await http.post(
path: "users",
body: data,
query: [("name", "Igor"), ("page","1")],
headers: ["Content-Type": "application/json"])
try await http.post(path: "users", taskDelegate: DelegatePickingUpMetrics())
try await http.put(path: "users", body: data)
try await http.delete(path: "users")
public func send<T>(
with request : URLRequest,
retry strategy : RetryService.Strategy = .exponential(),
_ validate : [Http.Validate] = [.status(200)],
_ taskDelegate: ITaskDelegate? = nil
) async throws -> Http.Response<T> where T : Decodable
此软件包使用独立的软件包提供重试策略。该服务根据选择的策略创建延迟序列(纳秒),有关更多详细信息,请访问链接 retry service
类型 | 描述 |
---|---|
constant | 该策略实现恒定退避 |
exponential [默认] | 该策略实现指数退避 |
是用于检查 URLResponse 的不同规则的数组。当前已实现用于验证状态代码。
类型 | 描述 |
---|---|
const(Int) [默认] 200 | 按精确值验证 |
range(Range) [默认] 200..<300 | 按范围验证 |
predicate(Predicate) | 如果您需要一些特定的处理逻辑,则通过谓词函数进行验证 |
check(ErrorFn) | 检查状态,如果状态无效,则返回自定义错误 |
try await http.get(path: path, validate: [.status(.range(200..<300))])
let fn : (Int) -> Bool = { status in status == 201 }
try await http.get(path: path, validate: [.status(.predicate(fn))])
这里有一个示例 replicate toolkit for swift,说明如何将其与自定义响应错误格式一起使用,该格式与成功的响应格式不同
为了在真实环境中尝试它。我建议安装基本的 NodeJS Express 样板。请观看视频片段,了解通过 Webstorm 获取它有多么容易,Webstorm 在试用期内可以免费使用。