首页 > 解决方案 > 如何根据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()
            }
        }
}

标签: iosswifturlsession

解决方案


您的第二个函数将需要输入stationID,然后在函数中创建您的最终 URL baseURL + "sensors/" + stationID

确保您的对象具有 API 文档中的所有必需属性


推荐阅读