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

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

如题

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

共收到 8 条回复

集成了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

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