RMHttp
RMHttp 是一个为 iOS 和 watchOS 设计的轻量级 REST 库。
功能
- 链式请求
- URL / JSON 参数编码
- 基于 RFC2616 的 HTTP 方法 GET/POST/DELETE/PATCH/PUT
- 自定义请求构建器 / HEADERS / 参数
- Form-data 支持
- 动态响应处理器(JSONObject,JSONArray,String)
- Codable 支持
- 支持参数容器
RMParams
待办事项
- [-] 支持 Upload/Download 资源
示例
要运行示例项目,请先克隆存储库,然后从 Example 目录运行 pod install
。
安装
RMHttp 可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中
pod 'RMHttp'
安装
pod "RMHttp"
在您的终端中运行以下命令
$ pod install
用法
HTPP 方法
HTTP 方法在公共枚举 RMHttpMethod
中声明。
GET
,POST
,DELETE
,PUT
,PATCH
参数编码
编码在公共枚举 Encoding
中声明
URLEncoding
,JSONEncoding
序列化
JSONObject
- 表示 Dictionary<String, Any>
{
"data" : "value",
"isBoolean" : true,
"list": [
"object1",
"object2"
]
}
JSONArray
- 表示 [Dictionary<String, Any>]
[
{ "data1" : "value1"},
{ "data2" : "value2"},
{ "data3" : "value3"},
]
String
任何字符串表示(例如 HTML 字符串,XML 字符串,纯文本)
构建请求
从字典类型构建请求
let params = [
"string":"Ipsum", // String
"number": 100, // Number
"boolean":true // Boolean
] as [String : Any]
let urlString = "https://httpbin.org/get"
let request = RMRequest(urlString, method: .GET(.URLEncoding), parameters: params, hearders: nil)
RMParams
容器构建请求
从URL查询表示:names[]=lorem&names[]=ipsum&names[]=dolor&
let lorem = RMParams(key: "names[]", value: "lorem")
let ipsum = RMParams(key: "names[]", value: "ipsum")
let dolor = RMParams(key: "names[]", value: "dolor")
let params = [lorem, ipsum, dolor]
let urlString = "https://httpbin.org/post"
request = RMRequest(urlString, .GET(.URLEncoding), params, nil)
return request
链式响应处理器
期望数组对象响应
RMHttp.JSON(request: request) { (response:JSONArray?, error) in
guard error == nil else {
self.title = "Response Error"
self.activity.stopAnimating()
self.textView.text = "\(err)"
return
}
self.activity.stopAnimating()
if let data = response {
self.title = "Response Sucess"
self.textView.text = "\(data)"
}
}
期望JSON对象响应
RMHttp.JSON(request: request) { (response:JSONObject?, error) in
guard error == nil else {
self.title = "Response Error"
self.activity.stopAnimating()
self.textView.text = "\(err)"
return
}
self.activity.stopAnimating()
if let data = response {
self.title = "Response Sucess"
self.textView.text = "\(data)"
}
}
返回HTTP响应的通用方法具有符合RMHttpProtocol
(例如 JSONObject, JSONArray, String, )的参数data
的参数。
public class func JSON<T:RMHttpProtocol>(request: RMRequest, completionHandler: @escaping Handler<T>)
表单数据(FORM-DATA)
从字典类型添加字段
let params = [
"name":"lorem",
"lastName":"ipsum"
]
let urlString = "https://httpbin.org/post"
let request = RMRequest(urlString, .POST(.FomDataEncoding), params, nil)
return request
添加文件
请参阅 媒体类型
let request = RMRequest(url: URL(string: urlString)!)
request.addForm(field: "file", file: imgData, fileName: "image.jpeg", mimeType: "image/jpeg")
request.setHttp(method: .POST(.FomDataEncoding))
return request
或手动添加字段
let request = RMRequest(url: URL(string: urlString)!)
request.addForm(fieldName: "field1", value: "lorem ipsum")
request.addForm(fieldName: "field2", value: "sit dolor amet")
作者
rogermolas, [email protected]
许可证
MIT许可证 (MIT)
版权所有 (c) 2018-2020 Roger Molas
本软件和相关文档文件的副本(以下简称“软件”)的使用、复制、修改、合并、出版、分发、再许可、出售以及允许他人以软件提供者的方式使用,经济报酬并不作限制,只要遵守以下条件:
上述版权声明和许可声明应包含在软件的所有副本或其主要部分中。
本软件按原样提供,不得保证其适销性、满足特定目的性或不侵犯任何专利,版权或商标权。在任何情况下,作者或版权持有者不对任何索赔、损害或其他责任的声称负责,无论该索赔、损害或其他责任是由于合同、侵权或其他任何原因引起,是否与本软件或本软件的使用有关。