API优先方法的完整指南 - ITNEXT


在您的软件开发生涯中开发应用程序可能采用的众多方法之一是API-First Approach。在本文中,我们将深入探讨其核心概念并了解有关此方法的更多信息,我们还将熟悉在此方法中可能需要的一些工具。

背景
从产品的想法出现在人们脑海中的那一刻起,到产品完成并推出的那一刻,需要采取数百(如果不是数千)的步骤;结果,尽管有出色的想法和商业计划,许多团队仍无法构建应用程序。因此,如果有一个设计、开发、发布和营销产品的指南,这对所有这些团队来说都是一个巨大的帮助。此外,团队可以从扩展他们的应用程序和加快完成产品的步伐中受益。许多引入的方法之一是API-First方法。然而,在我们深入研究 API-First 方法之前,让我们首先建立一些关于先决条件概念的基础知识。

回顾什么是 API
大家可能都听说过 API 与服务员的相似之处,但这次让我们从技术上更深入地研究 API。首先,让我们一起回顾一些核心概念,然后我们将开发 API 有用的原因。
API是Application Programming Interface的缩写,是两台机器甚至两个程序之间的连接。因此,您可以将 API 想象为两个端点之间的中间件,用于传输数据并在给定时间使用给定数据调用某些功能。出于安全原因,API 也很重要。由于几乎每个应用程序都有需要存储在数据库中的数据,因此让用户直接连接到数据库来获取、更新、创建和删除是不安全的他们的数据手动。在这里,API 从应用程序接收必要的信息并将其发送到服务器,一旦服务器为 API 提供响应,API 就会将响应返回给客户端。回顾一下,以下是 API 的工作原理:

  • 客户端发起调用 API 的请求。请求中必须包含以下内容:请求 REST 动词、URI(统一资源标识符)、请求标头,如果动词需要正文,则还需要请求正文。
  • API 与程序联系。收到请求后,API 将到达服务器并与之连接。然后,服务器开始处理数据并可能进行一些计算来为 API 准备正确的响应。
  • 服务器向 API 发送响应。在处理并完成请求后,一旦服务器准备好数据,它就会将其传输到 API(我们称之为响应)。
  • API 向客户端发送响应。一旦 API 从服务器收集到响应,它将准备好使用HTTP协议将响应发送到应用程序。

尽管我们的开发人员为我们的应用程序实现了一个友好的用户界面以有效地工作,但这些 API 并不意味着人类可以直接使用;它们适用于计算机。因此,要拥有出色的工作 API,我们应该始终考虑性能优化和机器限制。此外,我们需要以某种方式实现它们,以便我们可以在未来扩展我们的产品,而在整个产品开发过程中对我们有很大帮助的关键点是编写可预测的代码,就像Andrei Neagoie 一样,在他的一门课程中, 说:
“我们应该编写可预测的代码,不仅适用于人类,也适用于机器。你的代码越可预测,就越好,因为它没有意外”
-安德烈·内戈伊

我们需要注意的另一个重要问题是安全问题。例如,用户可能会在我们的应用程序中输入他们的重要信息(例如,他们的银行账户信息),我们需要使用我们的 API 将这些数据传输到我们的服务器。此外,我们的 API 应防止黑客从我们的 API 中嗅探数据。最后,应在每个端点对数据进行加密和解密,以防止黑客在发生数据泄漏时接触到数据。

不同类型的 API
Web API 由 HTTP 协议提供支持。您可以在 Web API 中找到存储(例如,本地存储和会话存储)之类的服务,或者您可能希望控制浏览器的通知。Web API 通常使用 JavaScript,尽管这不是必须的。如果您曾经是前端开发人员,那么当您想查找当前页面的 URL ( window ) 或想要设置计时器以稍后执行某些操作 ( setTimeout ) 等时,您肯定已经越过了它们。最常用的 API 是Web API,它包括四种主要类型。

  • 开放(公共)API:它们可供所有人使用。它可能需要注册,但它们是公开的,供外部用户使用。例如,您可以在此处查看Google API 的完整列表。
  • 内部 API:如果您有只想在公司(或业务合作伙伴)内发布的敏感信息,那么您正在查看的是内部 API。
  • 合作伙伴 API:它们与开放 API几乎相同,但 您可以使用API 网关限制您的 API 对特定用户的访问。在软件开发中,这种方法普遍用于控制对付费 API 和包含敏感信息的 API 的访问。
  • 复合 API:如果您需要在一次调用中发送多个请求,您可以使用这种 API。 这些 API 的好处之一是您可以将一个 API 的输出用作另一个 API 的输入。

不同类型的 API 协议
虽然 API 的主要职责是在两个端点(机器或程序)之间建立安全可靠的连接,但这只是它的一般概念。我们需要实现我们的 API 来解决我们的问题并优化我们产品的性能。因此,程序员多年来引入了不同类型的 API,并且它们中的每一个都比另一个具有一些优势。此外,还引入了不同的 API 架构和协议来指定我们想要建立的数据类型和规则。API 有三种主要协议:REST、SOAP和RPC。我们将学习它们中的每一个的基础知识,然后我们将深入研究REST,因为我们想学习API-First 方法使用 REST 概念。
RPC(远程程序调用)
该协议使用客户端-服务器模型在两个程序之间建立通信,而无需了解网络细节。RPC 的整个想法是我们想从另一台计算机或机器调用我们服务器中的一个函数。例如,假设我们有两台服务器(服务器 A 和服务器 B),我们想从服务器 B 调用服务器 A 上的一个函数。当然,这些服务器有可能不使用相同的编程语言,所以我们需要实现一些即使在不同语言中也可以调用的东西,这就是RPC派上用场的地方。
您可以在XML或JSON之间选择数据类型格式。最流行的 RPC 框架是GRPC(G代表Google!),您可以在 JSON、Protobuf、Thrift 或 XML 之间选择您的数据类型。

SOAP(简单对象访问协议)
SOAP是一种基于XML的无平台应用程序通信协议,用于发送和接收在 2000 年代初期广泛使用的消息。它是一个具有以下结构的 XML 文档:

  • SOAP 信封:它是每个 SOAP 消息的包装器,由两个子元素组成:Header 和 Body。这部分负责指示 XML 文档是 SOAP。
  • SOAP 标头SOAP 标头是 SOAP 信封的子项之一。与 Body 不同,Header 不是强制性的,它包含消息的元数据和与应用程序相关的信息。它用于两个端点之间更好的通信。它允许您向分散的 SOAP 消息添加功能,而无需通信双方事先达成一致。
  • SOAP 正文每个 SOAP 消息的重要部分是它的正文(这是强制性的)。它包含请求和响应信息。
  • SOAP 故障如果发生故障,SOAP 为我们提供了一种特殊的 Body,用于报告和处理错误,这是 SOAP 故障的责任。

REST(表征状态转移)
Roy T. Fielding博士 论文介绍了REST概念,导致大量使用 API 在应用程序(客户端)和服务器之间建立可靠连接。此外, REST易于实现、易于理解并且在语言和框架中被广泛接受。考虑到我们的大量系统都是基于客户端-服务器的,REST 表示类似于下图:

我们有一个服务器,其中包含应用程序所需的所有必要资源(例如加载页面、媒体和应用程序正常运行所需的数据的所有文件)。我们在应用程序(客户端)中使用REST API访问资源。我们用于在客户端和服务器之间建立连接的协议是HTTP。

REST API 请求和响应:
我们可以在 REST 环境中执行四个操作:创建、读取、更新、删除(AKA CRUD),我们为每个操作分配了一个或多个 REST 动词(GET、POST、PUT、DELETE 等) . 为了操作服务器中的资源,我们可以使用这些动词,但首先,我们需要为它们中的每一个实现一个 API。

什么是 API 优先方法?
每个应用程序最关键的部分是它的业务逻辑。业务逻辑是将所有其他组件聚集在一起的一件事,因此您可以拥有一个有意义的应用程序。API-First 方法将您的所有 API 视为一等公民,以类似于您的业务逻辑的方式使用它们。在这种方法中,在项目的文档和业务模型准备好之后,我们就可以开始设计 API。通过这种方式,我们可以防止与利益相关者沟通不畅而发生的问题。

与 API-First 不同的是Code-First方法,一旦定义了项目,开发人员就开始编写代码。在项目初始化之初实现服务、组件和资源可能听起来很有希望,因为您正在取得进展,但事实并非如此!由于重点是实现和编写代码,而不是为您的项目设计和建立可靠的结构和体系结构,因此该项目可能不是客户的愿望。这将导致在实施过程中重构和重写您的代码库,这是任何团队都不希望的。
API 优先方法的好处

开发软件或应用程序几乎总是一项集体活动。你需要成为一个团队合作者才能在其中取得成功。为保证应用程序的开发过程顺利进行,领导者应密切关注团队成员并确保他们适当地一起工作。API-First 方法是团队领导者在维护项目时可以考虑使用的方法之一。
由于我们首先设计 API,因此我们通过实现它们从一开始就应该采用的方式来降低重新实现应用程序的成本。这可以防止不必要的会议,这会消耗团队的大量时间和精力。

另一方面,每个团队成员都参与了项目的设计和架构。这很重要,因为它可以帮助他们所有人获得宝贵的经验并帮助他们在职业生涯中成长。
另一个重要的事情是并行工作的能力。假设我们要实现一个 Web 应用程序。一旦 API 的结构准备好,前端开发人员就可以开始实施应用程序的客户端,另一方面,后端团队正在实施其他 API。同时,整个团队合作以获得他们可以实现的最佳解决方案,以实现其他 API 的结构。

由于后端团队和前端团队同时工作,他们可以在实施过程中相互告知可能出现的问题,并节省大量时间。

API 优先方法的优势
API 优先方法的必要性是什么?
现在我们已经了解了什么是 API-First 以及它的好处,我们需要确定我们的团队是否有资格开始实施它。如今,许多大型公司都在转向 API-First 方法。随着公司规模的扩大,我们面临着更多的麻烦,正如伊朗的一句古老 谚语所说:
更大的屋顶吸收更多的雪!

我们需要担心的第一件事不是实现 API-First 的技术细节,而是为团队成员和经理建立一种文化,以便对这种方法有很好的理解。让每个人都在同一页面上是这种方法的主要必要条件之一。建立这种文化不仅是项目经理的职责,团队的每个成员都应该参与其中。

下一步将是为我们的通信和文档实施基础设施。一开始我们可能会遇到很多会议,如果我们没有合适的会议媒介,事情会很快失控,以至于我们一开始都没有意识到。收集所有必要的信息并记录它们以供将来使用需要适当的例程和协议。您无法想象在设计不佳的系统中事情会变得多快。

开始实施 API-First
好的!现在一切都已处理完毕,我们可以开始在我们的项目中实现 API-First 方法。

1、初次会议
尽管 API-First 方法减少了您花在会议上的时间,但它仍然需要团队聚集在一起进行头脑风暴,尤其是在项目开始时。所有团队成员都需要了解利益相关者的确切需求和他们的期望。请记住,记录所有会议至关重要(并且可能在每个人的许可下记录它们)。

2、团队成员介绍
如果您的团队中有新成员或团队成员不认识利益相关者,那么所有团队成员都必须相互认识。拥有健康的关系将提高团队的绩效。这一步的另一个重要好处是每个人都会知道每个人的确切职责,并且会减少官僚主义。

3、建立设计和开发的文化
正如我们之前所讨论的,建立文化是 API-First 方法的先决条件之一。这也是实施它的关键部分。团队需要有一套关于开发方法、项目架构和设计、编码风格指南等的可靠规则。作为项目经理,您有责任确保您的每个团队成员都了解这些规则。

4、标准化 API
您可以使用许多工具来标准化您的 API。但后端和前端团队之间必须有共同的语言。请不要将此与文档混淆,因为我们在这里讨论的是

5、技术团队之间的共同语言。
虽然它可能有助于医生在实验室报告中写评论,但他们都可以从报告中收集必要的信息。开发商也应该如此。它们之间应该有一种技术和通用语言,以便与一种技术语言直接交互。

6、自动化、测试和部署
应该有关于项目如何以及何时发布新版本的具体规则。有很多工具可以用于语义版本控制。测试现在是您需要考虑的任何应用程序不可分割的一部分。

还有两件事……
像许多软件开发方法一样,您需要注意两个关键规则:

  1. 没有一种方法适用于所有人。每家公司都应该从一种方法中获得灵感,并对其进行定制以更好地满足他们的需求。关键的一点是,他们不应该过多地定制方法,以至于结果与基本方法完全不同。
  2. 一个项目就像一个婴儿。它需要不断的照顾才能成长。有时似乎有一段时间没有进展,但没关系。这就是像敏捷这样的方法可能派上用场的地方。