Apic 与 RESTful 服务 通信,解析 JSON HTTP 响应并传递对象。
pod 'Apic' '~> 2.2.4'
pod 'Apic' '~> 3.9.6'
pod 'Apic' '> 5.0.0'
仓库是一个类,它实现了与提供 REST 资源的服务器通信的逻辑。 基本上,一个仓库具有与后端端点相对应的方法。 所有仓库都继承自泛型类 AbstractRepository
class GistsRepository: AbstractRepository {
func requestGistsOfUser(_ user: String, completion: ([Gist]) -> Void) -> Request<[Gist]> {
return requestArray(route: .get("https://api.github.com/users/\(user)/gists"), completion: completion)
}
}
唯一的要求是 Gist
实现 Decodable
。
这个仓库现在可以被 ViewController
用来请求用户的 gists。
class GistsController: UITableViewController {
let gistsRepository = GistsRepository()
var gists: [Gist]?
var gistsRequest: Request<[Gist]>?
override func viewDidLoad() {
super.viewDidLoad()
requestGists()
}
func requestGists() {
gistsRequest?.cancel()
gistsRequest = gistsRepository.requestGistsOfUser("UserName", completion: { [weak self] gists in
self?.gists = gists
}).fail { [weak self] error in
self?.handleError(error)
}.finished { [weak self] in
self?.tableView.reloadData()
}
}
}
当 GistsRepository
完成调用服务并解析响应后,它会调用你提供的 completion closure,在这种情况下,发送一个 [Gist]
数组给你。