Just
一个仅针对 GET 和 POST 的轻量级 URLSession 包装器,因为我们只关心这些。
特性
- 轻量级
- GET
- POST (json 或 urlencoded)
- 使用新的
Codable
将 JSON 响应解码为T
✨
安装
CocoaPods
pod 'JustRequest'
手动
只下载代码。
需求
支持 iOS 8+, OSX 10.10+, Swift 4
使用方法
别忘了导入JustRequest
。只有两个API:Just
。
url
请求
1. 使用public static func request(_ url: URL, method: HTTPMethod, parameters: Parameters?=nil, headers: HTTPHeaders?=nil, configurationBlock: URLRequestConfigurationBlock?=nil) -> Request
urlString
请求
2. 使用public static func request(_ urlString: String, method: HTTPMethod, parameters: Parameters?=nil, headers: HTTPHeaders?=nil, configurationBlock: URLRequestConfigurationBlock?=nil) -> Request
注意:第二个方法未来将被弃用,因为将其转换为URL
非常简单。
实际发起请求
使用这两个API可以得到一个Request
实例,但实际上并没有发起请求。和Alamofire
一样,你可以通过调用request.responseData { ... }
(或者使用Decodable
的request.responseObject { ... }
)来发送请求。
配置默认URLRequest
提供URLRequest配置代码块
Just.request("https://api.github.com/users/aunnnn/repos", method: .get, configurationBlock: { (request: URLRequest) -> URLRequest in
var newReq = request
newReq.cachePolicy = .returnCacheDataElseLoad
return newReq
})
建议的API工作方式
使用枚举组织一组API并使用Just.request
首先,为API服务创建一个基本协议
import JustRequest
public protocol APIService {
var baseURL: URL { get }
var method: HTTPMethod { get }
var path: String { get }
var parameters: [String: Any]? { get }
var headers: [String: String]? { get }
}
extension APIService {
/// Build `Request` for corresponding API.
var request: Request {
let url = baseURL.appendingPathComponent(path)
return Just.request(url, method: method, parameters: parameters, headers: headers)
}
}
然后,为应用中的每个服务创建一个枚举,使其符合APIService
enum GithubAPI: APIService {
case getUser(id: String)
case getRepos(...)
case deleteRepo(...)
var baseURL: URL {
return URL(string: "https://api.github.com")!
}
var method: HTTPMethod {
switch self {
case .getUser, .getRepo:
return .get
case .deleteRepo:
return .post(.json)
}
}
var parameters: [String: Any]? { ...
...you get the idea
}
使用方法
GithubAPI.getUser(id: "123").request.responseObject{ (result: Result<[User]>) in
switch result {
case .success(let users): print(users)
case .error(let error): print(error)
}
}
注意:明确指定result: Result<[User]>
很重要,这样可以帮助编译器知道你正在处理哪种模型。有了这个,你可以将users
作为[User]
进行交互。
动机
大多数应用只需通过简单的GET
和POST
与JSON API交互,因此Alamofire
可能是一个过度设计。URLSession应该足够。但是,“我记不起如何使用URLSession
!”那么Just
就为你而来。
贡献
欢迎提交拉取请求!尚未编写测试...
常见问题解答(FAQ)
这是为我准备的吗?
Just
非常有限。如果您需要更细粒度的控制或性能优化,您应该使用其他库。这个库实际上是为那些想使用简单的URLSession
但从未记起如何使用它的人准备的。请注意,尚无测试...
您可以将其分支出来,并根据自己的需要对其进行自定义。
JustHTTP有关?
这是否与完全不相关。实际上,我是在完成编码后才发现它们的。一个具有相同名称的库,几乎做同样的事情!然而,检查文档后,你会很快发现我们的目标非常不同。