你是否曾经想过不同的应用程序或网站如何能够相互通信并共享信息呢?这就是API的魔力。API,即应用程序编程接口,就像一套规则和协议,允许不同的软件程序彼此交流并共享数据或功能。例如,当你在手机上使用天气应用时,它可能会使用一个API从服务中获取当前天气数据。或者当你使用谷歌账号登录网站时,也是通过API从谷歌访问你的账户信息。API无处不在,并且它们使软件开发变得更加容易。
为什么 API 很重要?
您刚刚了解到 API 是一组规则和协议,可帮助不同的软件甚至不同的软件相互通信。这可能自然会让您想知道为什么 API 如此重要或必需。
事实证明,API 是让其他开发人员使用您的应用程序不可或缺的一部分。让我们尝试通过一个例子来理解这一点。您可能见过不同的网站实施“使用 Facebook 登录”或“使用 Google 登录”选项。
这些按钮利用名为 OAuth 的协议,该协议定义了API应用程序如何在用户授予特定用户访问权限后从 Facebook 和 Google 获取特定用户的用户数据。Facebook 和 Google 创建了一个实现 OAuth 协议的 API。像API应用这样的第三方网站不需要知道 Facebook 和 Google 如何执行身份验证。他们只需要知道如何请求 Facebook 或 Google 代表他们对用户进行身份验证,以及 Facebook 和 Google 如何通知他们身份验证成功。如果这些平台没有任何适当的 API,就很难在应用程序中实现社交登录功能。
类似的例子还有无数。看看你的电脑。您可以将任何您想要的鼠标或键盘插入计算机,它就可以正常工作。借助明确定义的 API 的力量,这是可能的。如果所有鼠标和键盘想要与操作系统通信,则必须遵守商定的通信协议和方法。由于这个“API”,新供应商可以创建与几乎所有广泛使用的开箱即用操作系统兼容的新外设。
不同种类的API
从 API 的松散描述中可以想象,现有的 API 数不胜数,而且每天都会出现新的 API。让我们讨论几种重要的 API 类型以及它们的工作原理。
什么是 REST API?
如果您正在制作一个依赖于第三方在线服务数据的应用程序,您一定遇到过 REST(表述性状态传输)API。这是在网络上实现 API 的最常见方法。REST API 基于 HTTP 协议,使用 HTTP 请求来 POST(创建)、PUT(更新)、GET(读取)和 DELETE 数据。这些 API 通常通过简单的 URL(例如https://example.com/api/users)公开,应用程序可以通过向此 URL/端点发出 HTTP 请求来与此 API 交互。
这种用于创建 API 的架构模式是由 Roy Fielding 博士在他 2000 年的博士论文中定义的。他列出了API 需要符合的 6 个特征才能被视为 REST API。
REST API 通常与 JSON 数据进行通信。没有规范要求请求/响应数据采用 JSON 格式,但这已成为一种约定,因为 JSON 可以轻松地用几乎任何语言进行解析。
REST API 的一个示例是免费词典 API。您可以通过替换为您要在词典中查找的任何单词https://api.dictionaryapi.dev/api/v2/entries/en/<word>
后请求来使用此 API 。<word>
如果您尝试查找“hello”,您将得到类似的响应:
[ { "word": "hello", "phonetic": "həˈləʊ", "phonetics": [ { "text": "həˈləʊ", "audio": "//ssl.gstatic.com/dictionary/static/sounds/20200429/hello--_gb_1.mp3" }, { "text": "hɛˈləʊ" } ], "origin": "early 19th century: variant of earlier hollo ; related to holla.", "meanings": [ { "partOfSpeech": "exclamation", "definitions": [ { "definition": "used as a greeting or to begin a phone conversation.", "example": "hello there, Katie!", "synonyms": [], "antonyms": [] } ] }, { "partOfSpeech": "noun", "definitions": [ { "definition": "an utterance of ‘hello’; a greeting.", "example": "she was getting polite nods and hellos from people", "synonyms": [], "antonyms": [] } ] }, { "partOfSpeech": "verb", "definitions": [ { "definition": "say or shout ‘hello’.", "example": "I pressed the phone button and helloed", "synonyms": [], "antonyms": [] } ] } ] } ]
什么是 SOAP API?
SOAP API 是另一种类型的 Web API。它们使用称为 SOAP(简单对象访问协议)的不同协议来发送和接收数据。SOAP 是一种基于 XML 的协议,这意味着它对在客户端和服务器之间来回发送的消息使用特定的格式。
SOAP API 通常用于更复杂的企业级应用程序,并且它们通常比 REST API 需要更多的设置和配置。与 REST 相比,它们的使用可能有点棘手,因为消息采用 XML 格式,这可能更难以解析和理解。
以下是优惠券 API 的 SOAP 请求示例:
POST /Coupons HTTP/1.0 Host: www.coupons.org Content-Type: text/xml; charset = utf-8 Content-Length: xxx <?xml version = "1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding"> <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotations"> <m:GetCoupon> <m:CompanyName>XXAPI</m:CompanyName> </m:GetCoupon> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
相应的响应可能如下所示:
HTTP/1.0 200 OK Content-Type: text/xml; charset = utf-8 Content-Length: xxx <?xml version = "1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding"> <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotation"> <m:GetCouponResponse> <m:Coupon>Here is the quotation</m:Coupon> </m:GetCouponResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
什么是操作系统 API?
与 SOAP 和 REST API 允许两个应用程序相互通信的方式类似,也有操作系统 API 可以促进进程与底层硬件之间的通信。
例如,假设您正在编写一个需要访问计算机硬盘上的文件的程序。您可以使用操作系统的 API 来执行文件操作,而不必编写直接与硬盘交互的代码。这样,您就不必担心硬盘工作原理的细节,而可以专注于程序的逻辑。
这些操作系统API一般都是通过系统调用来实现的。open()
标准 C 库中的函数就是一个示例。它利用较低级别的open
系统调用,让您打开文件而不必担心如何查找文件可能所在的硬盘驱动器的特定扇区。
什么是数据库 API?
数据库 API 允许您访问数据库及其中的信息,而无需了解数据库的工作细节。您可以通过这种方式从不同的编程语言(例如 Python 和 Go)访问和操作同一个数据库。该数据库并未以所有这些不同的语言重新实现,而是公开了一个 API,其中包含一些有关如何与之通信的说明。然后使用该 API 以不同的编程语言为数据库创建库和包。
数据库 API 通常会公开您可以在数据库上本机执行的所有操作。这涉及添加、删除、更新和读取数据库记录。著名的数据库 API 有多种类型,例如 ODBC、JDBC、ADO.NET 等。它们中的大多数都是针对特定的编程语言或特定的数据库管理系统量身定制的。
什么是 API 集成?
API 集成意味着通过 API 连接两个或多个应用程序。当您看到 Web 应用程序宣传其与其他应用程序/网站的集成时,它们是通过 API 集成来实现的。例如,只要有人创建新的 Jira 问题,您就可以在 Slack 中收到一条消息。Jira 已与 Slack API 集成,每当您的 Jira 收到新问题时,它们都会创建一条新消息。另外,Jira 还允许您直接从 Slack 创建新问题。
API 与网站接口
可以使用不同应用程序的网站接口来访问底层数据。例如,您可以利用谷歌翻译的网站界面在多种语言之间翻译文本。但是,当您想要自动化此交互时,有一些注意事项。
网站界面往往会在很少甚至没有沟通的情况下发生变化。如果您使用网络抓取与应用程序的网站界面集成,那么您的集成可能会因网站界面的微小变化而中断。而 API 通常是有版本控制的,新的 API 版本并不能摆脱旧的 API。
此外,API 通常以更易于处理的格式提供数据,这种格式通常是 JSON。这确保您不必花费额外的精力将数据转换为可用的格式。
除非您有充分的理由使用网站界面进行集成,否则您应该依赖官方 API,因为它们更强大并且正是用于此目的。
API 如何工作?
让我们重点关注 REST API,因为它们是您可能会遇到的最常见的 API 类型。需要注意的重要一点是,REST 是一种架构,而不是协议或标准。开发人员可以通过多种方式实现 REST API。REST API 的实际请求-响应周期将根据您用于实现它的语言和 Web 框架而有所不同。然而,一般周期看起来像这样:
- 请求:客户端使用 HTTP 方法向服务器发送请求,例如 GET、POST、PUT、DELETE 等。该请求包含有关客户端想要执行的操作的信息,例如检索数据、创建新资源或更新现有的。
- 路由:服务器的 REST API 框架接收请求并将其映射到特定端点。端点是与服务器上的特定资源或操作相对应的 URL。
- 处理:服务器执行请求的操作并生成响应。响应包括有关操作结果的信息,例如数据、状态代码和标头。
- 响应:服务器将响应发送回客户端。响应包括有关操作结果的信息以及客户端请求的任何数据。
- 处理:客户端收到响应并进行处理。根据请求和响应的性质,客户端可能会采取其他操作,例如向用户显示数据或向服务器发出另一个请求。
在阅读有关 REST 的内容时,无论您在何处读到“资源”一词,它都是指服务器上的数据。如果我们再看一下前面的字典示例,字典包含一堆条目,而这些条目就是资源。REST 端点通常是面向资源的,一个端点仅操作一种类型的资源。因此,用于操作“entries”资源的 URL 明确包含单词“entries” https://api.dictionaryapi.dev/api/v2/entries/en/<word>
:。
REST API 中有四种主要的请求类型。这些类型基于预先存在的 HTTP 动词:
- GET:用于从服务器检索信息。GET 请求不应修改服务器的状态,通常用于检索资源的表示。
- POST:用于向服务器发送信息。POST 请求通常用于创建新资源或更新现有资源。
- PUT:用于更新现有资源。PUT 请求应将资源的当前表示完全替换为请求中指定的表示。
- DELETE:用于删除资源。DELETE 请求应从服务器中删除指定的资源。
公共 API 通常非常明显地突出显示每个资源上可能的请求类型。以下是来自随机 API 网站的示例:
由于 REST 通过 HTTP 运行,因此 HTTP 标头也变得非常重要。标头通常包含与请求相关的重要信息,作为以下标头条目的一部分:
- Accept:指定客户端愿意在响应中接受的媒体类型。这主要是 REST 请求的 JSON。
- Content-Type:指定请求正文的媒体类型(如果有)。此标头通常用在 POST 和 PUT 请求中,其中客户端将数据发送到服务器。
- 授权:包含身份验证信息,例如令牌或用户名和密码。该标头用于识别客户端并确定其是否具有访问或修改所请求资源的必要权限。
- Cache-Control:指定响应的缓存指令,例如是否可以缓存响应以及缓存多长时间。缓存是 REST 架构不可或缺的一部分。
- If-Modified-Since:指定日期和时间,服务器使用该日期和时间来确定客户端的资源缓存副本是否是最新的。如果自指定日期以来资源尚未修改,服务器可以返回 304 Not Modified 响应而不是完整资源。
这些标头键/值不是 REST 特定的,而是 REST 利用这些预先存在的 HTTP 标头来促进其架构。
典型的 POST REST 请求如下所示:
在现实世界中使用 API
开发人员每天都会使用许多流行的 API。主要的一个是Google Maps embed API。每当您看到嵌入在网站中的 Google 地图时,开发人员都会在后台使用此 API 来执行此操作。
此类公共 API 通常易于使用。您必须遵循的第一步是访问开发人员文档网站以获取相关 API。这些文档通常提供充足的信息,以便尽快开始使用 API。这样做是为了确保开发人员不必花费大量时间来学习新的 API。
只是为了向您展示使用 Maps Embed API 有多么容易,您只需在网站的 body 标记中包含以下 IFrame:
<iframe width="600" height="450" style="border:0" loading="lazy" allowfullscreen referrerpolicy="no-referrer-when-downgrade" src="https://www.google.com/maps/embed/v1/place?key=API_KEY &q=Space+Needle,Seattle+WA"> </iframe>
API_KEY
一旦您替换为来自 Google 的有效 API 密钥,IFrame 将开始工作。您可以通过创建开发者帐户来请求 API 密钥。API 文档网站上详细介绍了此过程。这也很好地介绍了一些公共 API 如何使用 API 密钥来确保不会发生未经授权的访问。
一旦嵌入开始工作,您将看到一张漂亮的西雅图地图。
其他一些流行的 API 包括 Recaptcha API。当您浏览互联网并且网站要求您证明您是人类时,就会出现这种情况。当你很难证明自己不是机器人时,这张图片可能会帮助你回忆起一些有趣的回忆🤓:
RapidAPI是获取公共 API 信息的一个非常好的资源。他们的网站包含有关各种免费和付费 API 的信息。另一个类似的资源是这个GitHub 页面。
结论
在本文中,您了解了 API: 它们是什么、在哪里可以找到它们、如何使用它们以及不同类型的 API 之间有何不同。如果不进行实验就很难掌握这些知识。您需要尝试不同的 API,阅读它们的文档,并弄清楚它们是如何工作的。
有大量工具可以简单地组合和构建在各种公共 API 之上,并在此过程中从投资者那里总共筹集了数十亿美元。一些突出的例子是每天涌现的各种聊天机器人和基于人工智能的初创企业,它们都使用 OpenAI 的 API。Product Hunt充满了这样的例子。我分享此内容只是为了鼓励您走出去,探索可用的 API 以及如何创造性地利用它们。