有人可以解釋ActiveModel::Serializers
和Grape
之間的差異。我應該使用其中一種還是可以/應該將它們一起使用。有人可以解釋使用上述一個(或兩者)的好處,還是僅使用rails
來構建restful JSON API
?Rails ActiveModel :: Serializer與葡萄相比如何?
謝謝您提前
有人可以解釋ActiveModel::Serializers
和Grape
之間的差異。我應該使用其中一種還是可以/應該將它們一起使用。有人可以解釋使用上述一個(或兩者)的好處,還是僅使用rails
來構建restful JSON API
?Rails ActiveModel :: Serializer與葡萄相比如何?
謝謝您提前
葡萄和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。