API是什么?
你是否曾经好奇过你是如何登录到你最喜欢的应用,比如Facebook、Hashnode、dev.to、LinkedIn等等的?我知道我已经引起了你的注意,你开始快速思考了。或者你是否想象过如何轻松地进入WakaNow航班应用并获取来自世界各地的最便宜、最实惠的票价?即使是足球爱好者也不会被排除在外,因为他们可以实时获取比分。
所有这些的答案就是,它们通过API与其他系统通信以获取这些数据或验证详情。
在这篇文章中,我们将揭开API的概念,并清楚地了解API是什么、它们的类型以及它们的工作方式。
一、API简介
A. API是什么?
API,全称为应用程序编程接口,就是一个工具,通过共享信息或数据,使得系统或技术可以相互通信。它还可以进一步解释为,系统之间通过一种协议或标准进行共享的一层。
B. API为什么重要?
API 很重要,因为它允许系统和技术之间进行交互,共享数据和功能,并共同创建强大而高效的系统。此外,API 赋予开发者将应用程序聚集在一起执行特定任务的超能力。例如,一个时尚博客可以整合 Flutterwave API,以便让客户为设计或研讨会支付费用,你还可以使用你的 Google 账户登录到与之关联的任何应用程序。
API 可用于从第三方获取数据和交换信息,使我们作为软件工程师能够做一些疯狂的事情。
C. API 是如何工作的?
让我们来打一个比方,你想去上大学。你必须遵循一系列过程,这包括参加考试,然后根据成绩向你心仪的机构申请。你不需要直接去找招生官申请,而只需要访问他们的门户网站,输入你的详细信息并上传证件。在等待录取的过程中,后台会发生一系列你不知道的事情,但如果满足要求,你会收到录取通知。
整个过程如下,我们希望与学校的招生办公室沟通,但由于我们不能直接访问招生办公室,所以我们使用一个 API 层,在这个场景中就是学校的门户网站,你将其称为 端点。每个端点都有其所需的协议和预期的结果。在这个例子中,学校的门户网站保护你免受招生办公室内部所有复杂事物的干扰。
想象如果没有招生门户,你将不得不前往大学招生办公室提交你的详细信息,这将耗费时间,且免不了出错。
通过互联网连接两个软件应用程序,一个程序,被称为客户端,向另一个应用程序的API发送请求。客户端请求应用程序数据库中的资源或请求在服务器上执行操作。
在接收到并验证客户端的请求后,API执行所需的操作并向客户端返回响应。这个答案包括请求的状态(完成或拒绝)以及客户端请求的任何资源。
图1. API的工作原理
D. API的类型
大约有四种不同的API,接下来将进行解释。
公共API:公共API或外部API是一种向公众开放并可供使用的API。API的所有者与第三方的组织、开发者和大众分享他们的数据和资源。特殊目的是让任何人都可以使用它,将其集成到应用程序中,或者致力于改进它们。
一些公共API的例子包括;Bitquery、Adoptapet、covalenthq。
私有API:
私有 API 或内部 API 是一种仅对构建它的开发人员或个人可用的 API。只有当所有者向第三方发送邀请时,才能访问它。
一些私有 API 的例子包括;
合作伙伴API
企业或组织提供的一种应用程序编程接口(API),允许外部开发者或合作伙伴与他们的服务、数据或平台进行通信和互动,称为合作伙伴API,也称为第三方API或开发者API。这些API旨在简化各种系统、程序或服务的集成。
希望扩展其产品或服务的有用性并促进与外部开发者或企业合作的组织通常会提供合作伙伴API。借助这些API,合作伙伴可以创建程序、工具或服务,利用企业的数据、功能或技术。
合作伙伴API的一些例子包括:
组合API
组合API,也称为聚合API或混合API,是一种将多个底层API或服务中的信息或功能混合和聚合到单一接口的API类型。这些API通过使开发者能够通过一个API访问和交互不同的服务,简化了集成过程,并提供了一个来自多个数据源的统一视图。
当程序员需要从多个来源连续接收信息或执行多个操作时,组合API非常有帮助。组合API允许开发人员发送单个请求来访问跨许多服务的水果或执行操作,而不是向每个API发送单独的查询。因此,集成过程得到优化,复杂性降低,效率提高。
以下是一个聚合多个天气服务提供商数据的组合API示例:
为了聚合这些供应商的天气数据并为开发者提供一个单一的天气数据接口,可以创建一个组合API。这使得开发者可以通过一个API请求从多个来源获取天气信息。
II. API架构类型
A. Web API
网络应用程序接口(API)是最常用的,因为我们的大部分日常活动都围绕着网络展开。网络API是标准,使得不同浏览器上的事物保持一致。它指的是通信的双方面。网络API,通常被称为应用程序编程接口(APIs),是由网络服务或应用程序提供的接口,使得在线通信和互动成为可能。开发者可以编程方式访问网络应用程序或服务中的特定功能、服务或数据。
1. RESTful API
RESTful API代表代表性状态转移应用程序编程接口,是一组标准,允许计算机通过网络按照REST(代表性状态转移)架构的设计原则相互通信。
REST API的一部分包括
-
请求 —–→ 响应
-
操作 – GET, POST, PATCH, UPDATE, DELETE
-
端点 – 网址
-
参数/请求体
-
头信息
图2 REST API示意图
REST的关键原则包括:
-
客户端-服务器架构:REST将客户端和服务器组件分开,使它们能够独立发展。客户端向服务器发送请求,服务器处理这些请求并发送响应。
-
无状态性:REST是无状态的,这意味着客户端到服务器每次请求都必须包含所有必要的信息以理解和处理该请求。服务器在请求之间不存储任何客户端上下文,简化了可伸缩性并允许更好的缓存。
-
统一接口:REST倡导一套统一的接口和操作,通常使用标准的HTTP方法如GET、POST、PUT和DELETE。RESTful系统中的每个资源都由一个URL(统一资源定位符)唯一标识。
-
基于资源:REST将一切视为资源,如数据实体、服务或集合。每个资源都有一个唯一的标识符,可以使用标准HTTP方法访问和操作。
-
资源的表现:REST中的资源使用特定格式表示,例如JSON(JavaScript对象表示法)或XML(可扩展标记语言)。服务器将资源的表现发送回客户端,这可以包括数据、元数据或超媒体链接。
-
无状态交互:从客户端发送到服务器的每个请求都是自包含的,不依赖于服务器上的任何先前请求或状态。这允许更好的可扩展性,因为服务器不需要维护客户端会话信息。
REST API的好处
-
简单和标准化
-
可扩展且无状态
-
高性能且可缓存
2. SOAP APIs
SOAP(简单对象访问协议)是一种符合SOAP网络服务规范的Web服务。它是一种使用XML作为格式的流行消息协议,具有明确的模式和用户标准协议。它由万维网联盟定义。SOAP协议涵盖了大量的互联网通信协议,尤其是HTTP、SMTP和TCP/IP。
图3 SOAP API示意图
使用SOAP API的好处
-
语言、平台和传输相互独立。
-
在分布式企业环境中表现良好。
-
通过WS*标准提供显著的预构建可扩展性。
-
内置错误处理。
- RPC。
远程过程调用(RPC)协议是一种发送多个参数并接收结果的手段。它是一种远程函数调用,不存在于你的本地机器上,但需要从调用它的位置部署。它是异步的,因为你需要得到一个响应才能标记为成功。它是客户端和服务器之间直接的交互。RPC API导致执行操作或程序。RPC可以采用两种不同的语言,即JSON和XML。
图4 RPC协议
GraphQL是一种用于API的查询语言,允许客户端请求特定数据并根据他们的需求塑造响应。
一些GraphQL API的例子
GitHub GraphQL API, Shopify GraphQL API, SpaceX GraphQL API, Yelp GraphQL API, Twitter GraphQL API(Twitter API v2)。
比较API协议
REST |
SOAP |
RPC |
GraphQL |
支持XML、JSON、HTTP和纯文本 |
设计上支持XML |
需要用户知道过程名称 |
支持HTTP |
擅长处理数据 |
擅长处理流程(动作) |
特定的参数和顺序 |
|
安全性适中 |
高级安全性 |
||
可以通过超媒体补充文档 |
开发者使用起来最困难 |
需要大量文档 |
|
请求方法包括GET、PUT、DELETE、PATCH、UPDATE。 |
请求方法是POST |
请求方法是POST |
请求方法是POST |
III. 常见API术语
A. 端点
API端点是通信渠道的一个点或端。当API与另一个系统交互时,这种通信的接触点被称为端点。字面上讲,APIs发送资源的地方和资源离开的地方称为端点。在APIs中,一个端点通常是一个统一资源定位符(URL),它提供了服务器上一个资源的所在地。
一个端点的例子是
Twitter API端点示例
Twitter API 公开了有关推文、直接消息、用户等的数据。
假设您想检索一条特定推文的内容。为此,您可以使用 tweet 查找端点,其 URL 为 api.twitter.com/2/tweets{id}(其中 {id}是 tweet 的唯一标识符)
B。请求和响应
API 请求是从客户端发送到服务器的消息。API 请求是向 API 提出的访问或修改数据或执行特定操作的请求。API 响应是响应 API 请求返回的数据或信息。
例如,用户点击下面的超链接;
<a href='http://localhost:2400/categories/01/flavours '>
Show all flavours available in the flavour category
</a>
HTTP 请求消息将以如下方式发送:
GET /categories/01/flavours HTTP/1.1
主机:localhost:2400
用户代理:Chrome/5.0 [兼容,Windows 10]
API请求
1. 复制代码GET https://api.com/categories/flavours
API响应
1. 复制代码HTTP/1.1 200 OK
2. Content-Type: application/json
3.
4. {
5. "id": 01,
6. "flavours": "Chocolate"
7. }
从这个请求中我们可以看到,端点是URL – /categories/01/flavours。
请求方法是GET,HTTP规范是1.1,域名是localhost,端口是2400,Flavours是资源,用户代理提供了浏览器和操作系统信息。
C. HTTP方法(GET、POST、PUT、DELETE)
使用HTTP协议的API使用HTTP请求方法(也称为“HTTP动词”)来传输客户端请求到服务器。最常用的HTTP请求方法有GET、POST、PUT和DELETE。
-
GET客户端用于从服务器获取数据,
-
PUT替换现有数据或如果不存在则创建数据,
-
POST主要用于创建新资源,
-
PATCH用于部分更新来自资源的数据显示,并且
-
DELETE删除客户端在服务器上指定的数据或资源。
D. API安全 – 认证和授权
这两个术语听起来可能相似,但各有不同的功能。认证与用户或身份的验证有关,而授权与用户拥有的访问权限或授予的动作有关。它们是API安全的核心。一种流行的用户认证和授权方法是OAuth 2.0。
不同的授权类型
有几种授权方法。您可能会遇到的各种API授权类型如下:
E. API密钥和令牌
API密钥是一串文本,用于提供客户端应用程序的标识和客户端应用程序的授权。换句话说,它们用于标识向服务器发起调用的应用程序,并确定调用应用程序是否已获得对API服务器的访问权限。它用于追踪所有活动并阻止任何恶意行为。
API密钥认证是为了解决共享登录信息的缺点,这是HTTP基本认证中的一个主要问题。它可能用于两个目的。第一步是识别向您的后端API发起调用的客户端应用程序。第二步是客户端应用程序授权,以确定调用应用程序是否已获得调用API的权限。
API密钥通常从Web应用程序上管理的API密钥提供者获取。
在哪里存储您的API密钥
永远不要将您的密钥嵌入代码或文件中,因为当您将内容推送到GitHub时,它们可能会泄露到公众面前,而是将您的API密钥存储在环境变量中。
一个API密钥的示例可能如下所示。
key: a9nIbdnaoks97028Jlf.ains9NIKQMEO
访问令牌是一种用于验证和授权访问API(应用程序编程接口)的安全凭据。令牌仅仅是令牌持有者的独特凭据,允许其访问API。
以下是一个JSON Web令牌(JWT)的示例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
这是一个由三个部分组成,用点分隔的JWT:头部、载荷和签名。头部通常包含有关用于签名的令牌算法的信息,例如:
{
"alg": "HS256",
"typ": "JWT"
}
载荷包含关于实体(用户、客户端等)的声明或陈述,并可以包括主题、发行者、过期时间等的信息。例如:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
签名是通过取编码的头部、载荷和秘密键,应用诸如HMAC-SHA256之类的加密算法生成的。签名确保了令牌的完整性和真实性。
使用此JWT时,客户端将其包含在API请求的授权头中,如下所示:
授权:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
然后API服务器可以验证令牌的真实性,检查其过期时间,并使用令牌有效载荷中包含的信息进行认证和其他用途。
请注意,此处提供的示例令牌仅用于说明目的,不应在生产环境中使用。
令牌和密钥都用于认证和授权,但它们在以下方面有所不同:
API密钥通常用于客户端或应用程序访问API时的识别和认证。它们通常以长随机生成的字符串形式作为凭据。令牌则是在成功认证过程后给予授权客户端或用户的,作为认证的凭证。
有效期限:除非API提供商故意撤销或轮换,否则API密钥通常具有较长的有效期限。另一方面,令牌通常具有较短的生命周期和过期日期。根据认证方法,客户端必须在旧令牌过期后重新认证或使用刷新令牌来获取新令牌。
安全:与API密钥相比,令牌通常提供更好的安全特性。令牌可以设计成具有有限的范围或权限,允许细粒度的访问控制。它们还可以进行加密、签名或包含额外的声明,以提供完整性和真实性。这使得身份验证更加安全,更好地保护敏感数据。
现实世界示例和使用场景
A. 天气API
天气API,即应用程序编程接口,是提供实时天气数据和预报的服务。
例如
。 WeatherAPI.com,Forecast,Meteostat。
B. 社交媒体API
社交媒体API允许这些平台与其他软件提供商和应用程序集成。
例如
C. 支付网关API
允许软件开发者将支付网关服务集成到他们的应用程序或网站中的技术接口称为支付网关API。
例如
Stripe API。Stripe是一个广受好评的服务,允许商家在线接受支付,Noodlio Pay,Square API,PayPal,Adyen,Paybook,KeyPay,BIPS发票(通过Coinify)。
D. 映射和地理定位API
地理定位API不保留任何信息,而是允许您从被查询的设备收集现有数据。它可以从不同的来源收集位置数据,包括IP地址、GPS、WiFi、蓝牙、RFID、GSM/CDMA ID和人工输入。
示例包括地理定位API、Mapbox API、OpenStreetMap API、MapQuest API、HERE API。
四、结论及要点
本文中已经阐述了API是什么、如何工作、现实生活中的例子、APISecurity、HTTP方法以及API的重要性。可以得出结论,API使得软件工程师能够将应用程序集成到正在构建的内容中,甚至对其进行改进。在研究和写作过程中,我发现API安全是一个大问题。如果API被黑客攻击,它将影响所有连接到它的应用程序,因此我需要进一步研究API安全。
最后,我将发布另一篇文章,与此相关,因为它将探讨API的探索、在代码中使用API、API最佳实践、API设计和开发。
A. 一些关键词包括
API – 应用程序用户界面
RPC – 远程程序调用
HTTP – 超文本传输协议
B. 进一步学习的下一步
最后,我将发布另一篇文章,因为它将涉及探索API、在代码中使用API、API最佳实践、API设计和开发。