API是什么?如何理解API?

352 阅读6分钟

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问[源码]或理解内部工作机制的细节。----百度百科

接下来用一个比喻来说明API,接口,协议这些基本概念。

比喻解释

假设有一个银行

image.png 如果客户A要存钱那么需要以下步骤

  1. 走进银行
  2. 打开金库存入100块
  3. 在账单上写下存入100块
  4. 离开银行

那么问题来了

  1. 想开开金库门需要废很大力气,并不是所有的人都能打开,还有些人不识字不会记账。
  2. 在该情况下,我们假定所有人都是诚实的,显然这并不成立。(如果存了100块钱记账的时候写了10000块)。

雇一个员工

这样的话就可以解决以上问题建一个柜台将金库和账单和客户分开,这样客户就不需要再去管金库和账单了。想存钱的话直接找小B就行。 image.png 现在客户A想要存钱需要以下步骤

  1. 走进银行
  2. 将钱交给小B,告诉小B我是xxx我要存***
  3. 小B打开金库把钱放进去
  4. 小B把业务记录好
  5. 告诉客户业务半好了
  6. 客户离开银行

这样就可以通过小B将以上问题解决

引出API

它能够帮你实现轻松的和其他软件组件的交互。

在上面的例子中,我们雇一个员工帮客户解决了开金库,放钱,记账这一系列过程。这大大节省了客户的时间,同时提高了银行的效率。同理,如果我们将操作的具体实施步骤抽象化,这将会大大降低开发人员的负担,从而大大提高了效率。

另外的好处是,只要他们遵循了同一个协议,组件可以交换或者是改变。 银行不需要知道时哪一个客户或者说客户是怎么进来的,客户也不需要知道银行拿自己的钱去做什么了。只要负责的柜员在这里并做好工作,整个流程将会继续工作。

API 应用范围很广:我们接触的百度地图API,和风天气API,这些 API 都大大简化了程序员的工作。

这里引入了协议,接下来会在下文中说到

剖析银行结构

银行分成了两个区域:客户在前台办理业务,后台完成各种对钱的操作。在中间层,前台和后台发生了交互, 双方都不能越界 ,交互只能发生在中间的区域。

在 API 里,中间的这块区域叫做接口 Interface ;在这里各个部分发生交互。在银行中,前台和后台都同意并且规定使用 Interface 来交换信息。

假设现在客户A来取钱

取完后小B告诉客户A取好了

此时客户A询问:“你知道今天的股票行情吗”

小B:????WTF ?

在这个例子里,小B知道怎样取钱和存钱 , 但是她不知道如何去给客户A查今天的股票行情是怎样的。这时引出了另一个概念 协议

引出协议

在 API 中,协议 是规定了各部分之间如何进行交流的一系列规则的集合。 各部分之间想要完成交互必须理解并且遵守同一个协议。

同时,我们注意到了交换时用的是中文。如果客户A对小B说「I want to withdraw five hundred dollars」,小B不洋文,所以没法理解客户A说的是什么,这又引出了另一个概念 格式

引出格式

在程序员的世界里,通用的格式包含 XML 和 JSON。。

如果我们想要完成这个需求,这时候就要引入另一位接待员来处理与股票相关的业务了。 image.png

引出端点

在 API 里, API 端点 通常是指在同一个接口中提供特定功能子集的服务提供者。在这种情况下,小C和小B都是端点。(小C和小B是同一个柜台不同功能的提供者)不同的端点可以有不同的协议和不同的格式。

总结

总结起来:接口是不同组件进行交互的地方。协议是一系列规定了他们之间怎样进行交互的规则。格式定义了他们通过什么进行交流(JSON或者是XML),端点可以在同一个接口里面提供不同的功能。

API“防火墙”功能

到现在我们把 API 的基础知识大概了解一遍,接下来我们再来说一说 API 的其他特征。

现在客户A又来取钱了,他想要取10000。众所周知客户A只存了100

首先,我们可以指示小B在操作前先去确认一下客户A是否有这么多钱。(API 能确认所有的操作都是合法的。

小B查到客户A账户里只有100了,告诉客户A余额不足。(在发生错误的时候 API 会根据错误报告机制发出指示,减轻开发人员的负担。

客户A认为肯定是哪里出错了,他要求银行给他列一张表,给出他所拥有的每个账户上的余额。结果显示一共有 200 个账户。把他们一下子全给列出来不太实际,所以小B每次给客户A看十个账户,看完了之后再来十个。(这叫做分页,可以节省带宽和服务器资源,因为你不需要一次获取数据集中的所有内容。

如果客户A只想要知道他某一个账户中的余额的话,他可以要求小B只给他看那个的(这称为过滤,它还有助于节省带宽和资源,并且更易于导航。

在检查完所有账户之后,客户A现在知道他的帐户中确实没有10000元。他知道客户D购买股票并获得了大量资金,于是伪装成客户D并重新进入银行。他告诉小B:“我是客户D,我想从我的账户中提取10000元。” 小B识破了他的骗局。(API中内置授权和访问控制,以确保只有授权人员才能访问特定数据。

最后,在试图从银行拿到10000元失败后,他想报复小B,他进入银行并多次从账户中提取0.01元。(我们可以实施速率限制来控制服务器资源的使用,以确保用户不会滥用服务。

API 通常都会被设计具有这些功能,它可以充当防火墙,在保护您的资源免受滥用的同时允许合法请求通过。

以上就是本文的全部内容即什么是API?如何理解API?