【问题标题】:Rails 5 JSON API with custom JSON response带有自定义 JSON 响应的 Rails 5 JSON API
【发布时间】:2018-12-25 06:21:06
【问题描述】:

我正在与我的 JSON 渲染作斗争。我要遵守简单的JSend response format

基本上我想要的是响应中的状态和数据。

我已将我的 Serializer 默认适配器设置为 json :

ActiveModelSerializers.config.adapter = :json

我的序列化器很简单:

class RecordSerializer < ActiveModel::Serializer
  attributes :id, :raw
end

所以当我这样做时:

record_list = @current_user.records
render json: record_list

我明白了:

{
    "records": [
        {
            "id": 1,
            "raw": "aaa"
        },
        {
            "id": 2,
            "raw": "bbb"
        }
    ]
}

现在棘手的部分是,如果我想在顶部添加一个 data 键,它会覆盖我的 records 键而不是在顶部添加它。

render json: record_list, root: "data"

给这个:

{
    "data": [
        {
            "id": 1,
            "raw": "aaa"
        },
        {
            "id": 2,
            "raw": "bbb"
        }
    ]
}

另外,如何添加其他键,例如 status 键?一旦我创建了一个自定义哈希,序列化程序就会被忽略。比如这个:

render json: {:status=>"success", :code=>200, :message=>"Hello", data: record_list}

将返回这个:

{
    "status": "success",
    "code": 200,
    "message": "Hello",
    "data": [
        {
            "id": 1,
            "raw": "aaa",
            "created_at": "2018-07-16T19:49:32.960Z",
            "updated_at": "2018-07-16T19:49:32.960Z",
        },
        {
            "id": 2,
            "raw": "bbb",
            "created_at": "2018-07-16T20:01:55.804Z",
            "updated_at": "2018-07-16T20:01:55.804Z",
        }
    ]
}

所以我想我理解 render json: my_variable 单独将理解将 my_variable 转换为选择的 json 序列化适配器但不能使用自定义哈希?

我当然可以这样做:

record_list = {}
record_list["records"] = @current_user.records.select(:id, :raw)

但我觉得这不是正确的方法,然后序列化器就没用了。

谢谢!

【问题讨论】:

  • 您是否考虑过退出序列化程序并改用jbuilder
  • 您可能想研究一下 json:api 和 graphQL,它们都具有可以为您设置生成的序列化程序的宝石,这些序列化程序几乎可以开箱即用,并提供比 jsend 更多的结构和功能跨度>
  • @robertoplancarte JSON API 和 graphQL 对我的使用来说似乎很重,所以这就是我想要一些轻量级的原因。
  • @andrew21 我会看看它,但这似乎绕过了这个问题,并没有真正解决它。还是谢谢你的建议
  • 对于我基于 Rails 的 API 应用程序,我最初使用 representable 来生成 JSON 响应,但是随着我的 JSON 模板的增长,它没有提供一种干净的方法来重用已经定义的表示,因此我切换到使用rabl-rails,从那时起我成功且令人满意地使用它来生成 JSON 响应。 (在下一条评论中继续)

标签: ruby-on-rails json ruby-on-rails-5 active-model-serializers rails-api


【解决方案1】:

我选择向 Netflix 团队的 Fast JSON API gem 尝试一下。可以进行出色的定制,快速且轻巧。

【讨论】:

  • 请注意 - 截至今天,它没有维护。
猜你喜欢
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
相关资源
最近更新 更多