如何理解全栈?是前端+后端吗?如果是这样,那就是前后端分离的开发方式,前端和后端各选一个框架即可。
还有那种全栈框架,在一个框架内同时开发前后端,代表例子是 Spring 、Rails 。全栈框架单人橹也可能是最快的方式,避免了同样的逻辑写两套。但是我不适应,所以也没深入尝试过,自己所选的开发模式一直是使用前后端分离的方式。
另外,企业内的开发模式基本都选择了前后端分离,这时全栈框架也就没多少意义了。很多人会将全栈框架当作纯 API 框架来使用,这也是不足取的,这个时候选择纯 API 框架会更好。
Node 端大部分是微框架,比如 express 、Koa ,你可以将它当作全栈框架来使用,也可以当作纯 API 框架来使用。主要是看你如何引入插件的。
Ruby 端 Rails 是全栈框架。既要用它写前端,也要用它写后端,并且前后端的代码还是很有关联的。如果是个人开发,也不需要协作,并且愿意花费大量精力去学 Ruby 和 Rails ,使用 Rails 框架真的是个不错的选择。我这里说的是要花费大量的精力,否则 Rails 的那些用法你不用,反而没有前后端分离来得高效,毕竟单独写一个前端和单独写一个后端还是很容易理解的。我经常看到有人在 Rails 里嵌入 React 或 Vue ,这就脱离了 Rails 作为全栈框架的本质了,并且还要再学一套 React 、Vue (或使用它,也是一种负担)。
Ruby 端其他的框架包括纯 API 的框架。Sinatra 我就不说了,它并不是纯 API 框架,类似于 Node 端的微框架。Grape[
https://github.com/ruby-grape/grape] 是纯 API 框架,这是我最早在团队内使用的纯 API 框架。现在,我开发了另一套纯 API 框架,因为我认为前后端分离的契约(也就是实现和文档的结合)是最为重要的,因此在契约上作了优化。声明一点,Grape 框架也是包括契约的,它可以借助插件生成一份 Swagger2 的文档。我的框架命名为 Meta[
https://github.com/yetrun/web-frame],它直接有内建的方法生成一份 OpenAPI3 的文档。当然,这两个框架还有诸多明显的不同,不一一赘述了。简单来说,Grape 的契约是作为辅助生成的,因此会有一些与实现不一致的地方。而 Meta 将契约视为第一优先,因此会尽最大程度保持契约与实现的一致。
希望更多人愿意学习 Ruby ,也愿意投入到 Meta 框架的使用和开发上来。(
https://github.com/yetrun/web-frame )