新手问题 Grape 对比起直接在 controller 里写接口有什么优点

tinyfeng · 2018年05月13日 · 最后由 EvanYa 回复于 2018年05月16日 · 2226 次阅读

如题

你们觉得最好用的点在哪里呢

集成了 swager,让 APP 开发或前端开发和 rails 开发可以面向 API 编程。 但实际上用起来还是有点难受的。

多数人是觉得在 controller 里面直接做 param 验证这一点很方便吧,而且还能顺带生成 API 文档。

但是我觉得这反而是缺点。因为模型验证是一定要在 model 里面写一下的,不然很容易脏数据。另外 controller 承担了声明 API 文档的责任,让每个 controller 都很长,这样的文档难以维护。

优点是和 swagger 集成的比较好,文档和代码能保持比较好的一致性。当然对于一些特殊业务,或者复杂的 query 查询,还是免不了要写一些额外的文档。不过在团队规模很小的情况下,这点问题通过沟通就可以解决了。

最初用的时候可能会不习惯这样的写法,因为 controller 层的代码夹在一大堆的 desc 和 params 声明之间,看起来非常难受。我现在的做法是每个 desc 之间空开三行,在 params 和 action 代码之间添加用于视觉定位的标志性注释。这样在找一个 action 的代码时,没有这么不舒服。其次是尽量把复杂一点的逻辑放在 helpers 里,action 里只保留少数核心逻辑。稍微适应几天,慢慢会发现 grape 还是有它自己优雅的地方的。

参数校验 还是比较方便的

早期 controller 很重,很多不必要的 middlewares

doitian 回复

那现在呢~

tinyfeng 回复

我猜他的早期是说,在项目开发的早期就造成了 controller 很重的意思。

一般来说 controller 很重都是项目到后期开始腐烂了才会出现的情况,而 grape 和 apipie 让你在刚写 2 个月的代码里就能体验到这种酸爽。

独立的 api 逻辑,便于维护,grape 的 dsl 比较方便可以搭配 swager 使用,不会污染 routes.rb 不过查看需要搭配 gem 才能显示路由,而且使用 grape 也要看你的项目特点,一般是在原有复杂项目中加入部分 api 会这么做,纯 api 完全可以使用 rails api 或是 sinatra

需要 登录 后方可回复, 如果你还没有账号请 注册新账号