2014-10-26 115 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。