ios - 如何根据id下载数据列表?
问题描述
我有两个 http 地址。第一个允许我使用 /findAll 下载整个列表,但第二个没有此查询。它允许仅通过第一个地址 /{stationId} 的 id 下载选定的站。所以我一次查询只能下载一个站。如何通过 URLSession 下载第二个地址的整个列表?环形?
地址: 第一:
http://api.gios.gov.pl/pjp-api/rest/station/findAll
第二:
http://api.gios.gov.pl/pjp-api/rest/station/sensors/{stationId}
在第二个查询中不能使用 /findAll 查询。
第一(站):
func fetchStations(url: URL) -> Observable<[Station]> {
return Observable.create { observer -> Disposable in
let task = URLSession.shared.dataTask(with: url)
{ data, _, _ in
guard let data = data else {
observer.onError(NSError(domain: "", code: -1, userInfo: nil))
return
}
do {
let stations = try JSONDecoder().decode([Station].self, from: data)
observer.onNext(stations)
} catch {
observer.onError(error)
}
}
task.resume()
return Disposables.create {
task.cancel()
}
}
}
第二(传感器):
func fetchSensors(url: URL) -> Observable<[Sensor]> {
return Observable.create { observer -> Disposable in
let task = URLSession.shared.dataTask(with: url)
{ data, _, _ in
guard let data = data else {
observer.onError(NSError(domain: "", code: -1, userInfo: nil))
return
}
do {
let sensors = try JSONDecoder().decode([Sensor].self, from: data)
observer.onNext(sensors)
print("API SERVICE: \(sensors)")
} catch {
observer.onError(error)
}
}
task.resume()
return Disposables.create {
task.cancel()
}
}
}
解决方案
您的第二个函数将需要输入stationID
,然后在函数中创建您的最终 URL baseURL + "sensors/" + stationID
。
确保您的对象具有 API 文档中的所有必需属性
推荐阅读
- ios - 如何为我的 CloudKit 数据建模
- database - 如何平衡数据库事务工作流与待处理事务类型?
- java - JFrame Eclipse“添加”命令错误
- google-chrome - 如何在 Chrome 扩展程序中将同一个域与多个扩展程序匹配?
- css - 在文本溢出之前存储文本:省略号?
- android - 如何在没有 Android Studio 的情况下使用模拟器在 VS 代码中安装颤振?
- vue.js - Vuex 与 Jest - this.$store.getters。
不是函数 - javascript - 将 ref 传递给组件道具,然后使用 React.createElement 关注 div 上的输入元素单击
- selenium-webdriver - 如何在 Selenium WebDriver 中测试多个浏览器
- dart - 在 dart 中添加地图中的所有值