HPNetwork 3.1.1

HPNetwork 3.1.1

Henrik Panhans 维护。



HPNetwork 3.1.1

HPNetwork

HPNetwork

Swift

HPNetwork 是一个使用纯 Swift 编写的基于协议的联网堆栈

安装

SPM

https://github.com/henrik-dmg/HPNetwork 添加为新的依赖项到您的 Xcode 项目中或将其添加到 Package.swift.package(url: "https://github.com/henrik-dmg/HPNetwork/tree/feature/async", from: "3.0.0")

CocoaPods

pod 'HPNetwork' 添加到您的 Podfile 中并运行 pod install

发布请求

安排请求就像这样简单

let response = try await request.response()

<代码>响应是一个包含请求输出和统计信息的<代码>NetworkResponse

合并

您也可以在任意<代码>NetworkRequest实例上调用<代码>dataTaskPublisher()以获取一个<代码>AnyPublisher。发布者将经过与<代码>response()方法相同的验证和错误处理过程。

同步请求

如果您使用Swift编写CLIs或其他任何原因需要进行同步网络通信,您可以使用<代码>scheduleSynchronously(...),它返回与常规方法调用闭包相同的<代码>Result。还有一个简洁的<代码>NetworkRequest方法,您可以直接通过<代码>request.scheduleSynchronously(...)调用。

取消请求

任何对<代码>schedule(request) { result in ... }的调用都返回一个您可以通过调用<代码>task.cancel()来取消的<代码>NetworkTask实例。

创建请求

基础知识

HPNetwork采用了一种基于协议的方法,因此任何符合<代码>NetworkRequest的类型都可以作为请求进行调度。简单来说,这意味着您需要提供一个<代码>URL和一个请求方法。

示例 1

struct BasicDataRequest: DataRequest {

    typealias Output = Data

    var requestMethod: NetworkRequestMethod {
        .get
    }

    func makeURL() throws -> URL {
		// construct your URL here
	}

}

示例 2

struct BasicDataRequest: DataRequest {

    typealias Output = Data

    let url: URL?
    let requestMethod: NetworkRequestMethod

    func makeURL() throws -> URL {
		// construct your URL here
	}

}

let basicRequest = BasicDataRequest(
    url: URL(string: "https://panhans.dev/"),
    requestMethod: .get
)

JSON

如果您正在处理 JSON,您也可以使用 DecodableRequest,它需要一个提供的 JSONDecoder。请求将使用该解码器将接收到的数据自动转换为指定的输出类型

示例 3

struct BasicDecodableRequest<Output: Decodable>: DecodableRequest {

    let requestMethod: NetworkRequestMethod

    var decoder: JSONDecoder {
        JSONDecoder() // use default or custom decoder
    }

    func makeURL() throws -> URL {
		// construct your URL here
	}

}

拦截错误

默认情况下,NetworkRequest 实例将简单地将遇到的任何错误转发到完成块。如果您想根据接收到的原始 Data 进行自定义错误转换,您可以在您的请求模型中实现 func convertError(_ error: Error, data: Data?, response: URLResponse?) -> Error

URLBuilder

URLBuilder 已经被分离到单独的包 HPURLBuilder 中,可以在这里找到。

请求身份验证

要向请求添加身份验证,只需向请求提供 authentication: NetworkRequestAuthentication? 实例即可。NetworkRequestAuthentication 是一个枚举,支持基本身份验证(用户名和密码)、携带令牌授权或原始选项,如果您需要完全控制。

作者

工作进行中

  • 取消支持
  • 进度的回调
  • 改进文档
  • 为新的 Swift 版本添加 async变体
  • Cookie 支持