Vapor `client.get`, преобразовать и вернуть json

Я пытаюсь ПОЛУЧИТЬ данные из другого веб-сервиса, затем преобразовать их и вернуть. Я нашел пример Spotify в документации, но не знаю, как вернуть часть JSON.

drop.get("music") { request in
    guard let query = request.data["q"]?.string else {
        throw Abort.badRequest
    }

    let result = try drop.client.get(
        "https://api.spotify.com/v1/search",
        query: ["type": "artist", "q": query]
    )

    return result.data["artists"]?.array
}

Я получаю эту ошибку при попытке собрать: error: return expression of type '[Polymorphic]?' does not conform to 'ResponseRepresentable'


person keegan3d    schedule 26.01.2017    source источник


Ответы (1)


Ваш result.data это Content, что может быть чем угодно. Вам нужно сначала убедиться, что это JSON, а затем вы можете вернуть его.

drop.get("music") { request in
    guard let query = request.data["q"]?.string else {
        throw Abort.badRequest
    }

    let result = try drop.client.get(
        "https://api.spotify.com/v1/search",
        query: ["type": "artist", "q": query]
    )

    guard
        result.status == .ok,
        let artistsJson = result.data["artists"] as? JSON
    else {
        throw Abort.serverError
    }

    return artistsJson
}
person tobygriffin    schedule 26.01.2017