Rails 5 API 实践小结

最近公司尝试使用 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 模式下的序列化
当时我们可选的方案有 jbuilder,active_model_serializers。后来我们选用了 active_model_serializers,主要原因基于以下:
- active_model_serializers 的使用方式更加面向对象一些
- 使用 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