【问题标题】:how does rails ActiveModel::Serializers compare to grape?rails ActiveModel::Serializers 与葡萄相比如何?
【发布时间】:2014-10-26 17:56:16
【问题描述】:

谁能解释ActiveModel::SerializersGrape 之间的区别。我应该使用其中一个还是可以/应该将它们一起使用。有人还可以解释使用上述一种(或两种)与仅使用rails 来构建restful JSON API 相比的好处吗?

提前谢谢你

【问题讨论】:

    标签: ruby-on-rails active-model-serializers grape grape-api


    【解决方案1】:

    Grape 和 ActiveModel 序列化程序有不同的用途。 Grape 既充当控制器又充当路由器,并允许您为应用程序定义 API。在 Rails 的 routes.rb 文件中,您包含一个与此类似的语句,以将路由移交给 Grape:

    mount API::Base, at: '/'
    

    然后,您创建从 Grape 继承的类,以定义您的 API 接口:

    module API
      module V1
        class Companies < Grape::API
    

    实际上有一个 gem 可以让 Grape 使用 ActiveModel 序列化器: http://github.com/jrhe/grape-active_model_serializers

    在 Grape 中没有什么是在 Rails 中无法做到的。 Grape 之所以流行,是因为它针对编写 API 进行了优化。例如,在 Grape 中,您可以声明执行帖子所需的必需参数,并将它们与可选参数区分开来。显然, :id 不会用于创建项目,但它应该是更新项目的强制性要求。这只是一个例子。文档会更好地解释这一点。

    ActiveModel 序列化器定义对象在被请求时如何呈现。它有点像对象的视图层。例如,如果您正在显示联系人,您可能希望将联系人的公司和电话号码(独立但相关的对象)嵌入到返回的联系人对象中。在某些情况下,您不希望某些属性包含在您的 json 中。相应地,串行器可以包括保护这些属性的逻辑。 ActiveModel 序列化程序的一项有用功能是能够嵌入相关模型的 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      相关资源
      最近更新 更多