Vapor `client.get`,转换并返回 json

Posted

技术标签:

【中文标题】Vapor `client.get`,转换并返回 json【英文标题】:Vapor `client.get`, transform and return json 【发布时间】:2017-01-26 07:28:49 【问题描述】:

我正在尝试从另一个 Web 服务获取数据,然后对其进行转换并返回。我在文档中找到了一个 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'

【问题讨论】:

【参考方案1】:

您的result.dataContent,可以是任何值。你需要先确保它是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

【讨论】:

以上是关于Vapor `client.get`,转换并返回 json的主要内容,如果未能解决你的问题,请参考以下文章

Vapor:在所有修改完成之前返回路由

使用 Vapor 迭代调用返回 Future 的方法

制作自定义 404 页面 Vapor 3

Swift Vapor 服务器:如何在获取请求中返回嵌套字典?

在 Swift Vapor 中返回响应可表示对象集合的最佳方法是啥?

为啥在使用 Discord Python API 时 client.emojis,client.get all emojis() 的较新版本返回空列表?