资讯中心

用大白话告诉你API是怎么工作的

想象一下,你正在经营一家银行。

银行里有一个非常强大的保险库来存钱,还有一本记录客人金钱数量的书。有一种非常简单的方式来操作这个银行:开放访问每个访问者,没有人检查访问者的身份,而且银行认为人们会做正确的事情。

 

在这个开放式银行中,客户希望省钱,需要完成的步骤如下:

1:把钱带到银行;

2:打开金库,把钱放在中间;

3:在分类账上写下记录:我是xxx,我已经存了xxx钱;

4:离开银行。

 

显然,这种方法存在两个问题:

1:保险库的门很难打开,需要一定的体力。对弱势群体不太友好,这可能违反一些健康和安全法规。同样,如果有人受伤或眼睛不清楚,他们就无法在分类帐上阅读或书写。

2:在这种方法中,银行认为人们是绝对诚实的。显然,现实中总有一些不诚实的人。如果有人保存100,那么在分类帐上写入10000个块。你在两天内破产了。

 

因此,我们需要进一步设计一个流程来更好地管理银行。

 

请一个出纳

由于我们完全放任自流,无论上述问题如何,我们都可以考虑聘请一位聪明而有实力的人来处理所有的金库访问,因此我们聘请了小丽出纳员来做这项工作。现在,我们管理银行的方式有所改善:小丽就像一堵墙,将金库和分类帐与客户分开。客人无法直接在分类帐或金库中操作。如果他们想存钱,他们必须要经过小丽。

 

现在客户想再次存钱,所需的步骤更复杂:

1:把钱带到银行;

2:告诉出纳小丽,我是xxx,我需要向我的账户存入xxx这么多钱;

3:小丽把你存入保险箱的钱存入。她非常强壮,很容易做到这一点;

4:小丽在分类账上写下了这条记录:xxx为xxx节省了这么多钱;

5:小丽回到柜台,告诉客人她可以离开。

6:客人离开银行;

 

现在,整个流程对于客人来说没有任何障碍。而小丽也是我们信任的人,因此上面存在的第二个问题风险也小多了。

 

现在,我们可以介绍API的概念。API被称为应用程序编程接口,它是软件系统不同部分的约定。简而言之,API允许您轻松地与其他软件进行通信,这是非常重要的。

在我们的比喻中,银行开了一个非常困难的保险库门。如果我们让银行出纳员开门,顾客就不必去开门,顾客会节省时间,银行也会更安全。同样,我们抽象的操作细节,如分配系统内存,这将有助于减少程序员的认知负荷,从而提高生产力。例如,如果我们制造了一个发射火箭到太空的API,程序员可以使用API,眨眼间,引擎就会被点燃,火箭就会直射天空。因为实现细节被抽象(隐藏在API后面),我们的程序员可以在不知道火箭科学的情况下将火箭送入太空。

 

有了这个总结,还有一个好处:组件可以交换和替换,只要它们遵循相同的协议。银行不需要知道客户是如何到达银行的,客户也不需要知道银行把所有的钱都转移到了避税天堂。只要银行出纳员在那里,知道如何取款,整个交易将继续下去。

API无处不在:从操作系统中的简单fork()到复杂的API(如谷歌地图API),它们都是为了使程序员更容易。

 

API与银行

您可能已经注意到银行有两个部分:前部区域,客户的有序队列;后区,处理货币。在柜台中间,前后区域是隔离的。交互只能发生在中间柜台(柜员小丽)的窗口。在API术语中,我们城市的中间区域是Interface;这是软件组件交互的地方。在我们的银行,前台和后台都知道这个地方的存在,他们都同意在这里交换信息。

 

现在,假设小王来取钱。但小王喝得太多了。他向出纳小丽问道:“为什么库里本赛季的2分命中率提高到59%?”小丽,一个银行出纳员,根本不看篮球,一脸蒙圈。

 

API术语中,协议是一组规则,用于定义组件如何相互交互。双方必须理解并遵守相同的沟通协议才能取得成功。在这种情况下,银行出纳员了解提款和存款,但她不懂篮球。

 

小丽和小王用普通话交流,我们称之为格式:它指定如何对要发送给彼此的数据进行编码。换句话说,这里的沟通方式是普通话,像协议一样,双方都要理解并坚持这一个,但由于小丽不理解所以信息交流失败。

 

在现实世界中,Web API 的常见格式包括 XML 和 JSON,尽管 JSON 在很流行,因为它比XML 轻而易读,而 XML 在 Java 世界中仍然占据重要的位置,特别是企业级(例如,在 SOAP 中进行会话的 API)。对于需要交换大量数据(特别是多人游戏)的应用,像ProtoBuf和MsgPack这样的二进制协议经常被用来节省空间并提高编码/解码的效率。

 

最后,我们假设我们还想把我们的业务拓展到股票市场。我们需要一个专门的银行出纳员来处理股票交易。我们称这个新的股票交易员小刘。在API术语中,API端点通常指的是在同一接口中提供特定特征子集的服务提供者。在这种情况下,小刘和小丽都是端点。不同的端点可以有不同的协议和不同的格式。

 

总而言之,接口是不同的软件组件相互作用的地方。协议是一组定义它们如何相互作用的规则,以及一种定义它们如何相互交谈的格式。端点在同一接口中提供不同的功能。

 

API的其他功能

介绍了API的基本概念。现在让我们来谈谈API的其他功能。

小王再来取钱,说要取10000美元。出纳员将在他拿到钱之前检查他的账户是否有10000美元。 API可以包含验证逻辑,以确保所有操作都是合法的。

 

但是,小王的账户只有100美元。我们可以要求银行出纳员告诉他资金不足。 API可以使用错误报告机制来指示已发生的错误。

 

小王认为这一定是个错误,并要求银行出纳员以他的名义提供所有账户文件以及他在每个账户中有多少钱。原来小王有200个账号。一次给他一个是不切实际的,所以柜员小丽一次向展示了 10 个账户。当小王看完 10 个,他就可以继续看下 10个。这称为分页和分页数据集,它可以节省带宽和服务器资源,因为你不需要立即获取数据集中的所有内容。如果小王只想知道账户的余额,而不是帐户有多少奖励积分,他可以要求小丽只显示余额。这称为过滤,有助于节省带宽和资源,并且更易于导航。

 

检查完所有帐户后,小王发现他没有10000美元。但是他知道小赵买了一个股票赚了很多钱,所以他离开了银行,过了一会儿伪装成小赵然后回到了银行,他告诉柜员小丽,“我是小赵,我想要10000美元。”

 

我们要求小丽在取款前核实客户的身份和银行卡。在这种情况下,小王没有这样的证据,不得不离开银行。授权和访问控制可以内置到API中,以确保只有授权人员才能访问特定数据。

 

最后,在未能提取1万美元后,小王匆忙回到银行,每次只收回0.01美元(可能是为了报复小丽)。如果小丽这样做,她将耗费时间和精力。我们可以指定货币的频率,例如10 分钟只能取一次钱,如果小王真想每次去 0.01 美元,他会留在银行一段时间。我们可以通过速度限制来控制资源分配,以确保用户不会滥用服务。

 

API 与上述功能相结合,可以充当防火墙,保护资源不被误用,同时允许合法的请求。现在,你应该对API有一个系统的认识了吧?其实不单单是银行可以通过API来实现某些需求功能,其他如三大运营商、电商网站、第三方支付平台、移动APP、充值缴费平台等都可以通过API来提升应用程序功能,尤其是第三方开发的API接口,往往功能更强大、更稳定,更适合企业使用。像交通银行、北部湾银行、三大运营商、小米等已与赛合一数据达成合作,采用赛合一数据开发的充值缴费API接口水电煤缴费API接口等实现产业转型升级。