全面指南:API测试定义、测试方法与高效实践技巧
用于构建 API 和微服务的 12 个流行 JavaScript 框架
构建API驱动的现代应用程序!
API类似于用户界面,唯一的区别是用户是机器或软件。
让我们来了解API优先的设计方法,以及为什么遵循它是有意义的。我们还将重点介绍JavaScript及其流行程度,最后,我们将讨论构建API和微服务的热门JavaScript框架。
API优先方法
我们都听说过API优先设计这个术语。实际上,API优先设计这个术语是在业界开始提到云原生应用这个术语之后流行起来的。在开发单体应用程序后的一段时间内,程序员开始将这些应用程序分解为微服务。
所有来自Web、Android或iOS设备与这些微服务的交互都必须通过API进行。比如身份认证API、文档处理API、沟通工具API等等。因此,对于向这些界面提供数据而言,设计这些API起着至关重要的作用。这意味着微服务仅有一种通信媒介,那就是API。
因此,这就引出了“API优先设计原则”。在我们甚至开始编写微服务/后端服务的实现之前,就需要先考虑API的设计。
注意:API 是业务驱动因素,因此在系统开发之初就对其进行开发。
在API优先设计方法中,API被视为一等公民。综上所述,我们可以总结出以下三个关键点,可作为API优先方法的原则。
- API 是我们应用程序的第一个用户界面。
- API 先于应用程序存在。
- API 被描述(甚至可能是自描述的)。
有很多公司使用 API 优先的方法,例如 Twillio、NETFLIX、Stripe、Algolia、SendGrid、Etsy、Adobe、Amazon 等等。
亚马逊是最早指导员工使用这种方法的公司之一。这种方法的重要性可以通过一个事件来理解。2002年前后,亚马逊(Amazon)首席执行官杰夫•贝佐斯(Jeff Bezos)发布了一项名为“贝佐斯指令”(Bezos mandate)的命令,警告任何不遵守这一程序的人将被解雇。
API优先方法的好处
很多,这里进行一些简单的例举:
- 可复用/组合式企业架构
- 支持并行开发
- 降低项目全生命周期总体成本
- 减少失败风险
- 实现更快增长
- 摆脱约束
现在让我们探索一种强大的网页语言,它能帮助我们实现上述讨论的方法。
JavaScript:一种网络语言
tips:JavaScript 是当今和未来最重要的语言之一。
JavaScript 是一种高级的解释型客户端脚本语言。它用于使网页更具交互性。它使我们能够实现复杂而美丽的设计。JavaScript 是一种基于对象的脚本语言,它支持封装、多态性,在某种程度上也支持继承。
此外,与 C、C++ 和 Java 不同,它不需要编译。
JavaScript 可以在浏览器、服务器和任何具有 javascript 引擎的设备上执行。
值得一提的是,JavaScript 与 Java 无关。那么问题来了,为什么叫JavaScript呢?实际上,当JavaScript最初发布时,它被称为Mocha,后来它被重命名为实时脚本,然后在Netscape和SUN签订许可协议时重命名为JavaScript。
JavaScript 用于开发几乎所有类型的 Web 产品和应用程序,例如智能手表、游戏、网站、移动设备和 Web 应用程序。一些最受欢迎的网站,如谷歌、Facebook、Netflix、亚马逊,都使用 JavaScript 来构建他们的产品。
它是否仅限于客户端?
JavaScript最初被设计为一种在浏览器中运行的客户端编程语言。但如今,它已经取得了长足发展,其功能远超当初。更重要的是,JavaScript不再仅仅是一种客户端语言,基于JavaScript的框架也被用于进行服务器端编程。
Node.js便是此类框架的一个实例。
这并非JavaScript能力的终结。除了作为客户端与服务器端使用之外,它还可以用于设计单一代码库的应用程序,并运行于移动设备(Android、iOS)及Web上。
这样的框架的一个例子便是ReactJs。
JavaScript有多流行
JavaScript无疑是最当今最重要的语言之一。
互联网的兴起使JavaScript走向了其从未设想过的领域。当前,我们拥有超过100种编程语言,并且每年都有新的语言被引入。在这些语言中,少数几种强大的语言能迅速引发市场的变革,而JavaScript无疑是其中之一。
它一直位列热门编程语言之列。根据StackOverflow的数据,JavaScript是最受欢迎且最常被使用的编程语言。
你知道吗?在2020年Stack Overflow调查中,近70%的专业开发人员使用JavaScript编码。
现在让我们看看一些最流行的JavaScript框架来构建API和微服务。
1. Hapi
Hapi是一个简单、安全、开源的javascript框架。它用于以最小的开销构建功能强大、可扩展的应用程序。它最初是为了处理沃尔玛的黑色星期五规模而开发的,但现在Hapi仍然是企业级后端需求的可靠选择。
Beats Music、Vrbo、Conde Nast、AuthO、Brave等公司都在使用Hapi,并对其感到满意。
GitHub 上始终提供免费支持。但若想获得更快的响应,请加入 Slack 频道——这里有许多社区成员常驻并互相帮助。
2. Restify
Restify 专门针对构建语义上正确的、适用于大规模生产环境的 RESTful Web 服务进行了优化。当提到“语义正确”时,意味着严格遵循规范,这是 Restify 项目团队首要目标之一。
它针对内省与性能进行了优化,并被大多数大型Node.js部署所采用。Restify最酷的功能之一在于,每当您添加新路由/处理器时,它会自动为您创建DTrace探针。实际上,Restify附带了三个独立的客户端:
- JsonClient:发送并期望接收application/json类型数据;
- StringClient:发送URL编码的请求并期望接收text/plain类型文本;
- HttpClient:作为node的HTTP/HTTPS库的薄封装层。
详细开发指南可在此处找到。http://restify.com/docs/home/
Restify被行业内一些最受尊敬的公司如Netflix、Joyent、Pinterest所采用,用以支持其最大规模的部署。
3. ExpressJS
ExpressJs是OpenJS基金会的一个项目。
由于其健壮性,许多流行的框架(如Feathers, Kraken, Sails, Kites, NestJs等)都是基于Express的。它是一个最小和灵活的基于node.js的web应用程序框架,为web和移动应用程序提供了一组强大的功能。
由于它在node.js之上提供了一个层,我们可以有效地访问JavaScript函数。它适合使用服务器呈现编写应用程序,因为它支持许多模板引擎(例如pug和handlebars)。对于API开发,它包含中间处理程序和许多HTTP服务/实用程序方法。
4. SailsJS
SailsJS 是总部位于德克萨斯州奥斯汀的 Sails 公司旗下构建的 MVC 框架。它由 Mike McNeil 开发,旨在协助他的团队为初创公司和企业客户构建可扩展的Node.js项目。自 2012 年发布以来,Sails 已成为全球使用最广泛的 Web 应用程序框架之一。
它是一款轻量级产品,位于 Express 之上。它与任何前端兼容:Angular、React、iOS、Android。Sails 声称通过其强大的 ORM 与任何数据库集成,称为 Waterline。它使用 Express 处理 HTTP 请求,并使用 Wraps socket.io 来管理 WebSocket。
5. Action Hero
Actionhero 是一个多传输 API 服务器,具有集成集群功能和延迟任务。Actionhero 的目标是创建一个易于使用的工具包,用于为 HTTP、WebSocket 等制作可重用和可扩展的 API。它是从头开始构建的,包括我们期望从现代 API 框架中获得的所有功能。
Actionhero 擅长的工作负载类型包括生成和使用 API、从数据库存储和检索数据、修改文件和类似作业。
Actionhero 有 5 个关键概念构成每个应用程序:操作、任务、初始值设定项、聊天和服务器。
6. LoopBack
LoopBack 是一个基于 Express 的高度可扩展的开源 Node.js 和 TypeScript 框架。它允许我们快速创建由数据库和 SOAP 或 REST 服务等后端系统组成的 API 和微服务。
它是一种新的、改进的编程模型,具有依赖注入和新概念,如组件、混合、存储库等,这使得它最具可扩展性。LoopBack 允许我们使用 OpenAPI 到 GraphQL 为任何 REST API 创建 GraphQL 接口。
我们只需按照入门指南中的步骤即可立即开始使用 Loopback。他们的文档根据四个象限进行分类,它们是:
- 以学习为导向:教程提供实践课程,用户可以通过实践来学习框架。
- 以问题为导向:操作指南提供了解决在构建 LoopBack 项目时可能遇到的特定目标的方法。
- 以理解为导向:概念页面解释了架构概念、更广阔的视野和有关框架的更深入知识。
- 信息导向:参考指南提供了机器的技术描述及其使用方法。
GoDaddy、Symantec、Sapient、Fundrails、ShoppinPal 和 WhiteBoard 等公司正在广泛使用 LoopBack。
7. FeathersJs
Feathers 是一套工具及架构模式,旨在简化创建可扩展的 REST API 和实时应用程序的过程。我们能够在几分钟内构建原型,并在几天内完成生产级别的应用开发。Feathers 能够与任何后端技术对接,支持超过十种数据库,并且能够与诸如 React、VueJS、Angular、React Native、Android 或 iOS 等任何前端技术协同工作。
开始创建第一个Feathers应用程序,请遵循快速入门指南。如遇困难或有任何问题,您可以通过Slack、GitHub、StackOverflow、Telegram等不同渠道寻求帮助。
8. KoaJS
Express 团队设计了 Koa。其目标是成为 web 应用程序和 API 的一个更小、更具表现力且更为健壮的基础。Koa 在其核心中不捆绑任何中间件,而是提供了一套优雅的方法集,使得编写服务器既快速又令人愉悦。
通过利用 async 函数,Koa 使我们得以摒弃回调,并极大地提升了错误处理能力。只需三步命令即可开始使用:
$ <a href="https://geekflare.com/install-nvm-on-windows-macos/">nvm install</a> 7
$ npm i koa
$ node my-koa-app.js
9. AdonisJS
AdonisJs 是一个基于 Node.js 的 MVC 框架,它由一个充满活力的社区维护和支持。它提供了一个稳定的生态系统来编写服务器端应用程序,使您能够专注于业务需求,而不是纠结于选择或不选择哪个包。它就像任何其他 npm 模块一样,只不过在其之上添加了一些代码以确保与 AdonisJs 应用程序顺畅协作。
使用 AdonisJs 没有硬性先决条件,但对 JavaScript、异步编程和 Node.js 有传统的理解是非常有帮助的。请务必通读安装指南。
如果有任何疑问或错误,可以通过以下渠道与 AdonisJs 团队沟通。
- Github:共享 bug 或创建功能请求。
- Discord:加入 Discord 服务器,立即与社区中的其他人聊天。
- Twitter:与每天的进展保持联系,并了解社区提供的精彩项目。
10. TotalJS
Total.js平台是一个用JavaScript编写的库、包、UI组件、实践和完整产品的集合。该平台的基础是一个名为Total.js的服务器端框架和一个名为jComponent的客户端库。
这两个部分都是从头开始编写的。
在大多数情况下,我们不需要在Total.js平台上使用任何依赖项,因为它包含了我们开发所需的一切。
整个Total.js平台——产品、库、模块、包和UI组件在MIT许可下是开源的。
11. Moleculer
molecule是一个快速、现代、强大的Node.js微服务框架。它为构建和管理微服务提供了许多特性,比如:
- 基于承诺的解决方案(async/await兼容)
- 请求-应答的概念
- 支持带有平衡的事件驱动架构
- 内置服务注册表和动态服务发现
- 负载均衡请求和事件(轮询、随机、cpu使用、延迟、分片)
- 容错功能(断路器、隔板、重试、超时、回退)
- 内置缓存解决方案(内存,MemoryLRU, 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)
12. Fastify
使用 Fastify 开始您的旅程。
Fastify 高度专注于以最小的开销和强大的插件架构提供最佳的开发人员体验。happy 和 express 激发了它的灵感,它是业内最快的 Web 框架之一。
npm install fastify
它提供高性能,并取决于代码的复杂性;它每秒最多可以处理 30,000 个请求。它可以通过其钩子、插件和装饰器完全扩展。
注意:即使它不是强制性的,Fastify 也建议使用 JSON Schema 来验证您的路由并序列化您的输出,Fastify 在内部以高性能函数编译 Schema。
结论
构建API可能颇具挑战性,但有了合适的框架,事情就会轻松许多。请浏览上述列出的适用于您下一个API及微服务的框架,并挑选最适宜的一款。一旦您的API准备就绪,切勿忘记对其进行监控。
原文链接:12 Popular JavaScript Frameworks to Build API and Microservices