为项目选后端框架


By: Axe 2019-09-30

这几天在为一个小程序项目选择框架。框架需要满足几个主要因素:

  • 开发速度
  • 吞吐性能
  • 良好GraphQL支持
  • 兼顾队友技术栈
  • 有良好的工程化

提名候选框架按编程语言排序:

Go

众所周知我最近在疯狂学习go语言,并且喜爱有加。因此特意考究了几个go的web框架,看能不能借此项目练练手。其实单从GraphQL支持上这一点上就把go的框架都排除掉了,但还是都一一说一下吧。

Beego

Beego是由我本家国人开发的的全功能web框架,有很优秀的模块化设计并且有着不错的benchmark,唯一让我没有选择他的原因就是没有DI。我个人对DI是异常看重的,认为这是一个框架工程化水平高低的核心因素。另外我朋友也不会go,而且go不像其他C like的语言包括Java, .Net之类的那样可以轻易入门,比较设计思想差异巨大。

Iris

如果非要找个带DI的go框架的话那Iris绝对是不二之选。Iris最大的特点还不是自带DI,而是比go自带net库还要高的性能。虽然很遗憾不能作为本项目的后端框架,但是我已然内定它为我的helm http api项目的特首框架。

Python

Python真的不太适合做web框架,主要原因就是性能太差。不过这是我几年前用flask、django开发项目时的印象。介于python是我朋友的主语言,今天再给他一次机会,希望他能证明自己。做了一番research之后发现果然有人忍受不了性能瓶颈,而开发了各种基于asyncio、uvloop的高性能python框架。

Sanic

Sanic应该是众多python高性能框架里唯一一个长期维护下来的框架,其他大部分都半途而废了。Sanic的syntax基本和flask高度相似,因此对于熟悉flask的python开发者来说sanic很好上手。然而python的graphql库实在不太行,orm也一般。还是把python当科学计算器用吧。

Java

之前学习了Spring Boot,一直没机会实战。而且SB基本满足我各种需求,然而我还是觉着java太臃肿了。

C#

秒了一眼.net core感觉不错,可是我不会啊,就没深入研究。

Php

Laravel

其实综合起来laravel是一个很理想的框架。运行在php7上有着不俗的性能,再加上swoole甚至能超过java,node之流。Laravel本身自带我认为很棒的IOC。 PHP的生态经过多年的积累也特别健全,能想到的库基本都有。graphql的Lighthouse实现的可以说完美。加之laravel自身就是全功能框架,开发速度飞快。既然如此,那就是他了!?不,写腻了,想写点别的。而且说起来可笑,在几年前我是坚定php黑,但是php经过几年的发展不但没有消失反而越来越好了。

Node

Nest 【Winner】

这两年我最中意的Node框架就是Nest.js了。在这个项目里可以说满足了各种条件。本身是typescript编写又有抄袭Angular的DI系统,工程化上来讲可谓是node框架里的佼佼者(阿里的midwayjs也不错)。Graphql方面,众所周知JavaScript是最早实现graphql spec的语言,生态当然也是最好的,subscription、dataloader什么的全套都有。

最后

bb了那么多,是时候开始搭建环境了。