2014-10-26 74 views

回答

12

葡萄和ActiveModel串行器服务于不同的目的。葡萄既可以作为控制器也可以作为路由器,并允许您为应用程序定义一个API。在轨道的routes.rb文件,包括一个类似的说法,到交班路由到葡萄:

mount API::Base, at: '/' 

然后,您创建一个从葡萄继承的类来定义你的API接口:

module API 
    module V1 
    class Companies < Grape::API 

实际上,有一个宝石,使葡萄采取串行器加载ActiveModel的优势: http://github.com/jrhe/grape-active_model_serializers

没有什么,你可以在葡萄,你不能在Rails的做事情。 Grape很受欢迎的原因是因为它针对编写API进行了优化。例如,在Grape中,您可以声明执行帖子所需的必要参数,并将其与可选参数区分开来。显然,id不会用于创建项目,但它应该是更新项目的必需项。这仅仅是一个例子。该文档将更好地解释这一点。

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