JustRequest 0.5.3

JustRequest 0.5.3

Wirawit Rueopas维护。



  • Wirawit

Just

Travis Version License Platform

一个仅针对 GET 和 POST 的轻量级 URLSession 包装器,因为我们只关心这些。

特性

  • 轻量级
  • GET
  • POST (json 或 urlencoded)
  • 使用新的 Codable 将 JSON 响应解码为 T

安装

CocoaPods

pod 'JustRequest'

手动

只下载代码。

需求

支持 iOS 8+, OSX 10.10+, Swift 4

使用方法

别忘了导入JustRequest。只有两个API:Just

1. 使用url请求

public static func request(_ url: URL, method: HTTPMethod, parameters: Parameters?=nil, headers: HTTPHeaders?=nil, configurationBlock: URLRequestConfigurationBlock?=nil) -> Request

2. 使用urlString请求

public static func request(_ urlString: String, method: HTTPMethod, parameters: Parameters?=nil, headers: HTTPHeaders?=nil, configurationBlock: URLRequestConfigurationBlock?=nil) -> Request

注意:第二个方法未来将被弃用,因为将其转换为URL非常简单。

实际发起请求

使用这两个API可以得到一个Request实例,但实际上并没有发起请求。和Alamofire一样,你可以通过调用request.responseData { ... }(或者使用Decodablerequest.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]进行交互。

动机

大多数应用只需通过简单的GETPOST与JSON API交互,因此Alamofire可能是一个过度设计。URLSession应该足够。但是,“我记不起如何使用URLSession!”那么Just就为你而来。

贡献

欢迎提交拉取请求!尚未编写测试...

常见问题解答(FAQ)

这是为我准备的吗?

Just非常有限。如果您需要更细粒度的控制或性能优化,您应该使用其他库。这个库实际上是为那些想使用简单的URLSession但从未记起如何使用它的人准备的。请注意,尚无测试...

您可以将其分支出来,并根据自己的需要对其进行自定义。

这是否与JustHTTP有关?

完全不相关。实际上,我是在完成编码后才发现它们的。一个具有相同名称的库,几乎做同样的事情!然而,检查文档后,你会很快发现我们的目标非常不同。