ruby-on-rails - rails ActiveModel::Serializers 与 Grape 相比如何?

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

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

先感谢您

最佳答案

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

mount API::Base, at: '/'

然后,您创建从 Grape 继承的类,以定义您的 API 接口(interface):
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 序列化器定义对象在被请求时如何呈现。它有点像对象的 View 层。例如,如果您正在显示联系人,您可能希望将联系人的公司和电话号码(独立但相关的对象)嵌入到返回的联系人对象中。在某些情况下,您不希望某些属性包含在您的 json 中。相应地,串行器可以包括保护这些属性的逻辑。 ActiveModel 序列化器的一个有用特性是能够嵌入相关模型的 ID。

关于ruby-on-rails - rails ActiveModel::Serializers 与 Grape 相比如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26576114/

相关文章:

ruby-on-rails - rails : randomly pick a image as background image

ruby-on-rails - ActiveRecord 查找以

ruby-on-rails - 如何将 ActiveModel::Serializer 与 PostgreSQL JSON 列一起使用

ruby-on-rails - 序列化自定义属性

ruby-on-rails - 为什么 ActionDispatch::Routing::RouteSet 需要这么长时间

ruby-on-rails - “find_by”和 'where' 不适用于 attr_encrypted

ruby-on-rails - 处理独特的错误

ruby-on-rails - 具有 has_and_belongs_to_many 的 ActiveModel 序列化程序

maven - 使用 groovy-eclipse-plugin 和 @Grab 时出错

ruby-on-rails-4 - 对 Rails 的 Grape API 的请求会阻止其他请求