12个流行的JavaScript框架用于构建API和微服务
构建基于api的现代应用程序!
api与用户界面类似,唯一的区别是用户是机器或软件。
让我们了解api优先设计方法以及为什么有必要遵循它。我们还将重点介绍javascript及其流行度,然后最后讨论构建api和微服务的顶级javascript框架。
api优先方法
我们都听说过api优先设计或只是api。实际上,在行业开始提及云原生应用程序之后,api优先设计这个术语变得流行起来。随着时间的推移,从单体应用程序的开发开始,程序员开始将这些应用程序拆分成微服务。
所有来自web、android或ios设备与这些微服务的交互都需要通过api进行。因此,为这些api设计在向这些接口提供数据方面起着重要作用。这意味着微服务只有一种通信媒介,即api。
因此,api优先设计原则就在这里起作用。在编写我们的微服务/后端服务的实现之前,我们需要考虑首先在脑海中设计我们的api。
记住:api是业务驱动因素,因此在系统开发初期进行开发。
在api优先设计方法中,api被视为第一等公民。总结上述陈述将给出以下三个关键点,可以作为api优先方法的原则。
- api是我们应用程序的第一个用户界面。
- api优先,然后是应用程序。
- api被描述(甚至可能是自描述的)
有很多公司采用api优先方法,例如twillio,netflix,stripe,algolia,sendgrid,etsy,adobe,amazon等等。
亚马逊是第一家要求其员工使用这种方法的公司之一。这种方法的重要性可以从以下一个事件中理解,当时亚马逊的首席执行官jeff bezos在2002年左右发布了一项名为bezos mandate的命令,警告说不遵循这个过程的人将被解雇。
api优先方法的好处
很多!
以下是其中一些。
- 可重用/可组合的企业
- 允许并行开发
- 降低项目整个生命周期的总成本。
- 降低故障风险
- 更快的增长
- 摆脱限制
现在让我们探索一种强大的web语言,它可以帮助我们实现上述讨论的方法。
javascript:web的语言
javascript是当今和未来最重要的语言之一。
javascript是一种高级、解释型的、客户端脚本语言。它用于使网页更加交互性。它让我们能够实现复杂而美观的设计。javascript是一种基于对象的脚本语言,支持封装、多态和在一定程度上的继承。
此外,与c、c++和java不同,它不需要编译。
javascript可以在浏览器、服务器和任何有javascript引擎的设备上执行。
需要提到的是,javascript与java没有任何关系。那么问题是,为什么它被称为javascript?实际上,当javascript最初发布时,它被称为mocha;后来改名为live script,然后在netscape和sun达成许可协议时改名为javascript。
javascript用于开发几乎所有类型的网络产品和应用程序,例如智能手表、游戏、网站、移动和网页应用程序。一些最受欢迎的网站,如google、facebook、netflix、亚马逊,都使用javascript来构建他们的产品。
它是否仅限于客户端?
javascript最初设计为在浏览器中作为客户端编程语言运行。但是现在它已经发展了很多,它不再是过去的样子。此外,javascript不仅是客户端语言,还有基于javascript的框架也用于进行服务器端编程。
这样的框架的一个例子是nodejs。
这还不是javascript的能力的尽头。除了用作客户端和服务器端,它还可以用来设计具有单个代码库并在移动(android、ios)和web上运行的应用程序。
这样的框架的一个例子是reactjs。
javascript的受欢迎程度
javascript无疑是当今最重要的语言之一。
web的兴起使javascript去到了它从未设想过的地方。目前,我们有超过100种编程语言,每年都会引入新的语言。在这些语言中,一些强大的语言带来了市场的快速变化,javascript绝对是其中之一。
它一直在受欢迎的编程语言列表中。根据stackoverflow的数据,javascript一直是最受欢迎和常用的编程语言。
你知道吗?
2020年stack overflow调查中回答的专业开发人员中,近70%的人使用javascript编程。
现在,让我们看一些最受欢迎的javascript框架来构建api和微服务。
hapi
hapi是一个简单、安全和开源的javascript框架。它用于以最小的开销构建强大、可扩展的应用程序。它最初是为处理沃尔玛的黑色星期五规模而开发的,但现在hapi仍然是企业级后端需求的可靠选择。
像beats music、vrbo、conde nast、autho、brave等公司都在使用并对hapi感到满意。
在github上始终提供免费支持。然而,为了更快的响应,请加入slack频道 – 这是许多社区成员互相交流和互助的地方。
restify
restify专为构建符合语义的restful web服务并可在生产环境中扩展使用而优化。它所说的符合语义是指保持与规范一致,这是restify项目团队最主要的目标之一。
它针对内省和性能进行了优化,并且在大多数最大的node.js部署中使用。restify最酷的功能之一是,每当您添加新的路由/处理程序时,它会自动为您创建dtrace探测器。实际上,在restify中有三个独立的客户端:
- jsonclient:发送和期望application/json
- stringclient:发送url编码的请求并期望text/plain
- httpclient:node的http / https库的薄包装器
详细的开发指南可以在此处找到。
restify被一些行业中最受尊敬的公司使用,例如netflix、joyent和pinterest,以支持一些最大规模的部署。
expressjs
expressjs是openjs foundation的一个项目。
由于其强大的功能,许多流行的框架(如feathers、kraken、sails、kites、nestjs等)都是基于express构建的。它是一个基于node.js的最小和灵活的web应用程序框架,为web和移动应用程序提供了强大的功能集。
由于它在node.js之上提供了一层,我们可以高效地访问javascript函数。它非常适合编写具有服务器渲染的应用程序,因为它支持许多模板引擎(如pug和handlebars)。对于api开发,它包含中间处理程序和许多http服务/实用方法。
sailsjs
sailsjs是在总部位于奥斯汀的sails公司下构建的mvc框架。它由mike mcneil开发,以帮助他的团队为初创企业和企业客户构建可扩展的node.js项目。自2012年发布以来,sails已成为全球范围内最广泛使用的web应用程序框架之一。
它是一个轻量级框架,基于express开发。它与任何前端兼容:angular、react、ios、android。sails声称通过其强大的orm水线与任何数据库集成。它使用express处理http请求,并包装socket.io来管理websockets。
action hero
actionhero是一个带有集成集群功能和延迟任务的多传输api服务器。actionhero的目标是创建一个易于使用的工具包,用于制作可重用且可扩展的http、websockets等api。它从头开始构建,包含了我们从现代api框架中期望的所有功能。
actionhero擅长的工作负载类型包括生成和消费api、从数据库存储和检索数据、修改文件等类似任务。
actionhero有5个关键概念构成每个应用程序:actions、tasks、initializers、chat和servers。
loopback
loopback是一个高度可扩展的、基于express的开源node.js和typescript框架。它允许我们快速创建由后端系统(如数据库和soap或rest服务)组成的api和微服务。
loopback是一种新的、改进的编程模型,具有依赖注入和新的概念,如组件、混合、存储库等,使其具有最高的可扩展性。loopback允许我们使用openapi-to-graphql为任何rest api创建graphql接口。
我们可以通过按照入门指南中的步骤迅速开始使用loopback。他们的文档根据四个象限进行分类,分别是:
- 面向学习:教程提供了实践课程,用户可以通过实践学习框架。
- 面向问题:如何指南提供了解决构建loopback项目时可能遇到的具体目标的方法。
- 面向理解:概念页面解释了架构概念、更广泛的视角和对框架的更深入了解。
- 面向信息:参考指南提供了机械的技术描述以及如何使用它。
像godaddy、symantec、sapient、fundrails、shoppinpal和whiteboard这样的公司广泛使用loopback。
feathersjs
feathers是一组工具和一种架构模式,可以轻松创建可扩展的rest api和实时应用程序。我们可以在几分钟内构建原型,并在几天内构建可投入生产的应用程序。feathers可以与任何后端技术进行交互,支持十多种数据库,并与react、vuejs、angular、react native、android或ios等任何前端技术一起使用。
要开始使用第一个feathers应用程序,请按照快速入门指南。如果遇到问题或有疑问,可以在slack、github、stackoverflow、telegram等不同渠道上获得帮助。
koajs
express团队设计了koa。它旨在成为一个更小、更富有表现力和更强大的web应用程序和api的基础。koa不在其核心中捆绑任何中间件,并且提供了一套优雅的方法,使编写服务器快速而愉快。
通过利用异步函数,koa允许我们摆脱回调并大大增加错误处理。以下是三个命令来启动它。
$ nvm install 7
$ npm i koa
$ node my-koa-app.js
adonisjs
adonisjs是一个由充满活力的社区维护和支持的node.js mvc框架。它提供了一个稳定的生态系统,以编写服务器端应用程序,因此您可以专注于业务需求,而不是选择哪个包或不选择哪个包。它就像任何其他npm模块一样,在其上面添加了一些代码,以便与adonisjs应用程序顺利配合工作。
使用adonisjs没有严格的先决条件,但对javascript、异步编程和node.js有基本的理解非常有帮助。确保阅读安装指南。
如果有任何疑问或错误,可以通过以下渠道与adonisjs团队交流。
totaljs
total.js平台是一个由javascript编写的库、包、ui组件、实践和完整产品的集合。该平台的基础是一个名为total.js框架的服务器端框架和一个名为jcomponent的客户端库。
这两部分都是从头开始编写的。
在大多数情况下,我们不需要使用任何依赖项来使用total.js平台,因为它包含了我们开发所需的一切。
整个total.js平台 – 产品、库、模块、包和ui组件都是在mit许可下开源的。
moleculer
moleculer是一个快速、现代、强大的node.js微服务框架。它提供了许多用于构建和管理微服务的功能,例如:
- 基于promise的解决方案(与async/await兼容)
- 请求-响应概念
- 支持带负载均衡的事件驱动架构
- 内置的服务注册表和动态服务发现
- 负载均衡的请求和事件(轮询、随机、cpu使用率、延迟、分片)
- 容错特性(熔断器、舱壁、重试、超时、回退)
- 内置的缓存解决方案(内存、内存lru、redis)
- 可插拔的日志记录器(控制台、文件、pino、bunyan、winston、debug、datadog、log4js)
- 传输器(tcp、nats、mqtt、redis、nats streaming、kafka、amqp 0.9、amqp 1.0)
- 序列化器(json、avro、msgpack、protocol buffer、thrift)
- 无主架构,所有节点平等
- 内置的度量功能与报告器(控制台、csv、datadog、事件、prometheus、statsd)
- 带有导出器的跟踪功能(控制台、datadog、事件、jaeger、zipkin)
fastify
用fastify开始你的旅程。
fastify非常注重提供最佳的开发者体验和最小的开销,拥有强大的插件架构。它受到hapi和express的启发,是行业中最快的web框架之一。
用fastify开始你的旅程。
npm install fastify
它提供高性能,在代码复杂性的情况下,每秒可以处理高达30,000个请求。它可以通过钩子、插件和装饰器进行完全扩展。
即使不是强制性的,fastify建议使用json schema来验证您的路由和序列化输出,fastify在内部将模式编译为高性能函数。
结论
构建api可能具有挑战性,但使用正确的框架,生活会变得更加容易。为您的下一个api和微服务探索上述列出的框架,并选择最合适的框架。一旦您的api准备好,请不要忘记监控它们。