【问题标题】:Standarize JSON response in Rails API在 Rails API 中标准化 JSON 响应
【发布时间】:2015-07-11 15:32:34
【问题描述】:

我目前正在使用 Rails 构建 API。所有响应都在 JSON 中。 例如,我的控制器使用:

render json: @users, status: :ok

或者,当我设置respond_to :json时,我使用:

respond_with @users, status: :ok

我想知道标准化我的回答的最佳方式是什么。喜欢:

{
  error_code: 0,
  content: ... (@users as JSON)
}

我尝试过使用 JBuilder 和序列化程序 (https://github.com/rails-api/active_model_serializers),但我必须将模板添加到每个视图/序列化程序。

我想要一种优雅的方式来做到这一点,这样任何调用renderrespond_with 的控制器都具有相同的模板。

【问题讨论】:

  • 为什么一定要给序列化器添加模板?不要忘记您可以调用to_json,并且可以自定义as_json 方法以重新映射或省略字段。
  • 我实际上不需要添加模板,我现在想知道无论我使用什么 gem(序列化器、jbuilder 等),标准化响应的最佳方法是什么。

标签: ruby-on-rails json web-services api


【解决方案1】:

也许不是您想要的,但是当我必须编写这些类型的 API 时,我只需在我的所有控制器都可以访问它的地方定义一个方法,然后总是在其上调用渲染/重定向。

控制器

render json: formatted( @user, :ok )

方法

def formatted( obj, status )
  { error_code: status, content: obj }
end

不一定“优雅”,但它是可读的、有效的、易于维护的,并且无论您想要输出结果如何都可以正确呈现(而且它不涉及对现有方法的黑客攻击,我倾向于认为这很草率)。

如果您正在寻找完全不同的东西,我们深表歉意。

【讨论】:

  • 感谢您的回答。这是我想到的选项之一,也是我目前使用的选项。我同意你所说的好处,但我仍然相信可能会有一个更“集成 Rails”的解决方案。因此,由我的控制器或任何其他 gem 生成的任何输出也是“格式化的”。我实际上试图完成的是,我的单页应用程序 javascript 将始终收到格式相同的消息,无论错误或成功响应。
  • 啊,有道理。 There are 一些 questions and answers 在这些方面,但我不能亲自证明他们的准确性。无论如何,我希望你能找到一种方法来达到你想要的效果。
猜你喜欢
  • 2020-03-06
  • 2012-12-15
  • 1970-01-01
  • 2020-01-09
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
相关资源
最近更新 更多