DGNetworkingServices 是用 Swift 语言编写的轻量级且功能强大的网络库,并在 URLSession 之上构建,这将帮助您减少为您的应用程序中的网络 API 调用重复编码所花费的时间和精力。
为什么选择 DGNetworkingServices?
-
URL 可配置
- 一次编写,仅更改 API 的后缀。
-
轻松设置头部、参数和媒体支持
- 只需提供一个字典,其中包含任何类型的值,其余部分将由程序处理。
-
以字典和数据形式返回响应
- 你不喜欢解码短 JSON 响应吗?
- 你不也讨厌为大型响应和长键编写长代码,而它们只是简单地像一块糕点一样被解码吗?
- 此功能为您提供数据和建议,您可以使用任何您想要的进行用途,您还可以将其缓存。
-
更具体的错误
- 具有简单信息的更具体错误。准备显示给您的应用程序用户。
-
日志记录以优化调试
- 是的,你说对了 你可以将请求和响应记录下来以调试问题。
-
轻松且准确观察调用进度
- 观察您请求中的每个分数所取得的进步。
-
易于使用
-
简单的成功和失败完成处理程序
- 根据结果的成功和失败修改调用的操作。
-
多层验证
- 您发出的每个请求都将通过多层验证,然后再发送到服务器。
-
纯 Swift 和 URLSession API
-
没有第三方,代码库易于理解
安装
DGNetworkingServices 目前支持两种安装方法。我很快将集成 Carthage 和 Swift 包管理器。
Cocoapods 安装
要使用 CocoaPods 将 DGNetworkingServices 集成到您的 Xcode 项目中
如果还没有创建 PodFile,请在终端中进入您的项目目录并运行以下命令
pod init
在您的 Podfile
中指定它
pod 'DGNetworkingServices'
然后在终端中运行以下命令
pod install
(可选)更新到当前版本 0.0.3
pod update DGNetworkingServices
从源代码安装
克隆存储库并将 DGNetworkingServices 文件夹拖放到您的项目中
然后在需要使用库的地方导入框架
import DGNetworkingServices
使用方法
将项目的目标设置为“Example Project”,点击运行并关注控制台。
主要功能
1. 简单的 API 调用
DGNetworkingServices.main.MakeApiCall(Service: NetworkURL, Attachments: [Media?]?, HttpMethod: httpMethod, parameters: [String : Any]?, headers: [String : String], ResponseHandler: (Result<([String : Any], Data), NError>) -> Void)
参数信息
服务
-
类型为
NetworkURL
的服务,可按以下方式使用-
NetworkURL(withURL: "https://www.google.com") - 使用这种方式将直接调用指定的完整url
-
NetworkURL(withService: "users?page=2") - 例如,将 DGNetworkingServiceBaseUrl 设置为:DGNetworkingServiceBaseUrl = "https://reqres.in" 在 AppDelegate.swift 中。 - API版本是: DGNetworkingServiceAPIVersion = "/api/"。 - 服务参数是 "GetUserData" - 要调用的API将是: "https://reqres.in/api/users?page=2"
-
HttpMethod:用于URL请求的HTTP方法
参数:您想随URL请求一起传递的参数
头部信息:您想要设置的URL请求头部信息
ResponseHandler
-
这将包含两种情况
-
成功:如果请求成功,响应将以
[String : Any]
字典返回,以及以数据元组格式返回的Data
。 -
失败:如果请求失败,返回错误在
NEError
中,使用objectOfError.rawValue
获取错误后的消息。
-
2. 具有媒体支持的API调用
DGNetworkingServices.main.MakeApiCall(Service: NetworkURL, HttpMethod: httpMethod, parameters: [String : Any]?, headers: [String : String]?, ResponseHandler: (Result<([String : Any], Data), NError>) -> Void)
媒体
媒体对象可以通过创建 [Media?]?
作为参数传递
-
媒体:媒体是创建的
struct
,以支持最少的崩溃和错误通过媒体传递。使用它有4种不同的函数,您可以创建媒体:let Images : [Media?]? = [ // special function to pass a jpeg image with image compression support Media(withJPEGImage: UIImage(named: "imageNameHere")!, forKey: "keyHere", compression: .medium), // special function to pass a png image with image Media(withPNGImage: UIImage(named: "imageName"), forKey: "keyHere"), // Special Function to pass the data of a file Media(key: "keyHere", FileData: Data(), mimeType: nil, fileExtension: "pdf"), // Special Function which will extract the data from URL provided and pass it through the params Media(withFileFrom: URL(), fileExtension: "mov", mimeType: nil, key: "keyHere") ]
- 密钥:密钥是你想要作为值传递媒体的字段名
- mimeType:如果你希望代码自动获取它,请将其留为nil
- fileExtension:文件扩展名,用于转换或找到正确的文件
3. 下载文件
使用DGNetworkingServices下载文件非常简单且易于使用。
DGNetworkingServices.main.downloadFile(Service: NetworkURL, fileName: String, Extension: String, headers: [String : String]?, completion: <(Result<URL, NError>) -> Void>)
这里的唯一区别是调用中的completion
。
completion
:
-
这将包含两种情况
-
成功:如果请求成功,文件将下载并存储在临时位置,该
URL
将在处理程序中返回。 -
失败:如果请求失败,返回的错误在
NEError
中,使用objectOfError.rawValue
获取错误后的消息。
-
注意:下载文件功能将在下载文件之前先进行检查,所以如果指定位置有可用的文件,则简单返回该文件的路径,而不会发起下载调用。
4. 上传文件
此功能允许您在后台上传文件。
DGNetworkingServices.main.UploadFile(Service: NetworkURL, HttpMethod: httpMethod, fileUrl: URL, parameters: [String : Any]?, headers: [String : String]?, ResponseHandler: (Result<([String : Any], Data), NError>) -> Void)
这里唯一不同的参数是 fileUrl
fileUrl:提供文件URL,该功能将自动提取数据并将其上传到服务器,整个过程在后台执行。
5. 调用进度观察
我们都希望向用户展示他们的上传和下载过程。使用 DGNetworkingServices 是获取通过 API 发送或接收的数据 比例 的最简单方法,它将以 Double
类型的值提供。
用法
将一个代表者对象设置到 DGNetworkingServices,它将为每一段进度调用控制器进行回调。
DGNetworkingServices.main.delegate = self
遵守 DGNetworkingServicesDelegate
添加协议存根 didProgressed
func didProggressed(_ ProgressDone: Double) {
print(ProgressDone)
}
6. API 日志记录
免责声明:所有请求或响应的日志都是在一个临时变量中完成的。将它们设置为true将仅记录API。每次应用程序周期开始和结束都会销毁日志。将它们存储在用户默认值等非易失性存储中可能会不安全。日志不会被以任何方式发送到应用程序之外。请特别注意这一点。
当您在一个庞大的复杂系统中无法追踪哪个API何时被调用时,记录API调用来调试问题会非常容易。
要开始记录您的请求和响应,请按以下操作进行
DGNetworkLogs.shared.logging = Log(logRequest: true, logResponse: true)
将其中一个设置为true将启动请求/响应的记录功能。
打印日志:要打印直到当前行的所有日志,请使用以下行
DGNetworkLogs.shared.PrintNetworkLogs(filterByUrl: nil, filterByStatusCode: nil)
- filterByUrl:如果您想查看整个应用周期内该API的日志,提供API URL。
- filterByStatusCode:当您想通过状态码了解整个应用周期内哪些请求失败或成功时,此功能非常优秀并且非常有用。
还有很多其他您可能会喜欢的功能...
DGNetworkingServices.main
以查看我为您提供的所有共享资源和功能。
所有功能和每个变量都有文档,所以只需将鼠标悬停在关键字上并单击,您就可以了解每个功能的更多信息。
示例
示例项目提供了8个不同的API调用示例,请检查ViewController.Swift以查看DGNetworkingServices的真实动作。
1. GET 请求
DGNetworkingServices.main.MakeApiCall(Service: NetworkURL(withURL: "https://reqres.in/api/users?page=2"), HttpMethod: .get, parameters: nil, headers: nil) { (Result) in
switch Result{
case .success((let ResponseInDict, let ResponseInData)):
print(ResponseInDict)
case .failure(let Error):
print(Error.rawValue)
}
}
许可证
DGNetworkingServices根据MIT许可证发布。请参阅LICENSE