Logo

Rails 5 API 实践小结

avatar roger 11 Nov 2016

最近公司尝试使用 rails 5 api,以下这篇文章算是这段时间体验的一些总结。

Rails 5 的 API 模式

Rails 5 的 API 模式是一个出了挺久的功能了,我们主要还是参考 guide 里面的内容来实践的。

初始化项目

rails new my_api --api 可以初始化 rails 项目为 API 模式,快捷便利,如果是遗留项目,需要参考 guide 来进行修改。

关于 API 模式下的 Middleware

在我看来,Rails 5 的 API 模式最重要的就是可以把一些我们做 api_app 不需要的 Middleware 去掉,从而可以提升运行效率。不过同时因此我们如果需要某些 Middleware 的时候,需要自己加回去。例如如果你需要增加 cookie 的支持,那么你就需要自己增加 ActionDispatch::Cookies

关于 API 模式下的序列化

当时我们可选的方案有 jbuilderactive_model_serializers。后来我们选用了 active_model_serializers,主要原因基于以下:

  1. active_model_serializers 的使用方式更加面向对象一些
  2. 使用 active_model_serializers 跟使用 grape-entity 比较相似,因为团队有使用 grape-entity 的经验,会容易上手

PS:active_model_serializers 里面是有几个 adapters,需要根据项目来选择。

Rails 5 的 API 模式与 Grape 的对比

  • Grape 的话,可以跟 swagger 结合使用,在文档跟测试方面都方便很多。虽然网上也有人做 Rails 5 的 API 模式跟 swagger 的结合的尝试,但还是有所不足。
  • Rails 5 的 API 模式是官方版本,会容易升级,Rails + Grape 的话,可能会埋坑
  • 使用 Grape 的话,可以不用定义路由
  • Rails 5 对 Rails 的支持好,延续了 Rails 的 routes,controllers 等等的设计;Grape 的话,需要学习里面的 DSL 语法,有学习成本。

总结

对比之后,现在看来还是用 Grape 比较方便,成熟;但 Rails 5 API 这个可以持续保持关注。

相关链接

Tags
rails
api
grape
Contact Us