如何理解API?API 是如何工作的?(5分钟诠释)

news2024/11/16 1:52:26

大家可能最近经常听到 API 这个概念,那什么是API,它又有什么特点和好处呢?

wiki 百科镇楼

…[APIs are] a set of subroutine definitions, protocols, and tools for building application software. In general terms, it’s a set of clearly defined methods of communication between various software components.

翻译:API 是用于构建应用程序软件的一组子程序定义,协议和工具。一般来说,这是一套明确定义的各种软件组件之间的通信方法。(回来再看(。・∀・)ノ)。

本篇文章中,我会用浅显的比喻来解释API,接口(interface),协议(protocol)这些基本概念。enjoy it ! 

假设你有一个银行


这里写图片描述
你有一个仓库来存钱,一个记账本来记各种业务。一个简单的管理银行的方法是直接将权限给所有人,让客户自己动手完成各种业务。

这种模式下,一个客户想要存钱的话,他需要:

  1. 拿着钱去银行
  2. 打开仓库把钱放进去
  3. 把这笔业务写到记帐本上
  4. 离开银行

显然这存在着问题:

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

这时你遇到麻烦了。

商务api对接联系

 

雇一个柜员


要是我们雇一个体格棒,办事还麻利的人来处理开仓库,记账的问题呢?

小娜登场了。

现在模式为:建一个柜台将仓库和记账本和顾客分开,这样顾客就不需要再去管仓库和记账本了。想存钱的话直接找小娜就行。

这里写图片描述

这种模式下,要是有人想存钱,他们必须:

  1. 拿钱去银行
  2. 告诉小娜我是 MMM 我想要存¥¥¥。
  3. 小娜打开仓库把钱放进去
  4. 小娜把业务(transaction )记录好
  5. 告诉你业务办好了
  6. 顾客离开银行

现在不会发生打不开仓库门或者是记错账的情况了,你觉得很满意。

到此我们引出今天的主角API( Application Programming Interface),它能够帮你实现轻松的和其他软件组件(如服务器,操作系统等)的交互。

在上面举的例子中,我们雇一个收纳员帮顾客解决了开仓门,放钱,记账这一系列繁琐的过程。这大大节省了顾客的时间,同时提高了银行的效率。同理,如果我们将操作的具体实施步骤抽象化,这将会大大降低开发人员的负担(去记忆所有的步骤花费的力气),从而大大提高了效率。

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

API 应用范围很广:从操作系统中简单的 fork() 到我们接触的百度地图API,和风天气API,又或者是邢远分享的段子,这些 API 都大大简化了程序员的工作。

银行里有什么


这里写图片描述

你可能已经注意到了银行分成了两个区域:顾客在前台排好队来办理业务,后台完成各种对钱的操作。在中间层,前台和后台发生了交互, 双方都不能越界 ,交互只能发生在中间的区域。

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

现在,我们假定 Bob 想要取钱。他到了柜台找到了小娜,小娜知道该怎样去取钱,她取好了之后告诉了 Bob。

这里写图片描述

Bob 这时候又问:“你知道今天的股票行情吗”

小娜:????WTF ?

在这个例子里面,小娜知道怎样取钱和存钱 , 但是她不知道如何去给Bob查查今天的股票行情是怎样的。这个例子引出了另一个概念 协议(Protocol)。

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

同时,我们注意到了交换时用的是中文。如果Bob 对小娜说「我想撳五百蚊出嚟呀唔該」,小娜不懂广东话,所以没法理解Bob说的是什么,这又引出了另一个概念 格式(Format)

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

最后,让我们假设银行想要扩展业务到股市,这时候就需要一位特殊的接待员来处理与股票相关的业务了,这时,小冰就登场啦。
这里写图片描述

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

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

柜员还能干什么?


到现在我们把 API 的基础知识过了一遍,接下来我们再来谈一谈 API 的其他特征。w(゚Д゚)w

现在又有客户来取钱了,他想要取¥10000。
这里写图片描述

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

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux文件属性--软连接和硬链接

文章目录软链接硬链接软链接和硬链接的区别软链接 软链接(Soft Link)又叫符号链接(Symbolic Link ),是linux特殊文件的一种,文件类型为l,它的数据是它所链接的文件或目录的路径。软链接可以跨磁盘和 分区…

《数据库系统概论》学习笔记——第三章 关系数据库标准语言SQL

教材为数据库系统概论第五版(王珊) 最重量级的一章。从后续的学习,基本所有实验,大作业和考试都会涉及SQL,SQL实际上是有很多变化的,书上讲的只是最基本的(做了大作业才知道SQL能有这么多变化&a…

移动端自动化测试(一)appium环境搭建

自动化测试有主要有两个分类,接口自动化和ui自动化,ui自动化呢又分移动端的和web端的,当然还有c/s架构的,这种桌面程序应用的自动化,使用QTP,只不过现在没人做了。 web自动化呢,现在基本上都是…

k8s 强制删除 namespace

k8s 强制删除 namespace1、命名空间查看资源2、删除k8s指定命名空间3、强制删除3.1、导出命名空间jsno3.2、使用kubectl代理3.3、代理测试3.4、使用http接口进行删除1、命名空间查看资源 kubectl api-resources -o name --verbslist --namespaced | xargs -n 1 kubectl get --…

jsp运动会管理系统论文

技术:Java、JSP等摘要:运动会作为各项体育运动的基础,具有广泛的群众性。每年一度的学校运动会声势浩 大,是提高、检验学生的健康水平,开展全民健身运动的有效途径。在规模上虽然不如大型运动会,但由于比赛…

【Python数据挖掘入门】2.2文本分析-中文分词(jieba库cut方法/自定义词典load_userdict/语料库分词)

中文分词就是将一个汉字序列切分成一个一个单独的词。例如: 另外还有停用词的概念,停用词是指在数据处理时,需要过滤掉的某些字或词。 一、jieba库 安装过程见:https://blog.csdn.net/momomuabc/article/details/128198306 ji…

Docker -- Docker底层原理深度剖析

概论 谈到Docker原理,我们先来三板斧。 Linux命名空间(namespace)控制组(cgroups)联合文件系统(UnionFS) 然后我们心中要明白一件事情: 容器是一种特殊的进程。容器技术的核心功能…

vue2 diff算法

diff是什么 diff 算法是一种通过同层的树节点进行比较的高效算法 其有两个特点: ♥比较只会在同层级进行, 不会跨层级比较 ♥在diff比较的过程中,循环从两边向中间比较 diff 算法的在很多场景下都有应用,在 vue 中,作用于虚拟 dom…

HTML#4超链接标签,列表标签,表格标签和布局标签

一. 超链接标签介绍<a> 定义超链接,用于连接到另一个资源herf: 指定访问资源的URLtarget: 指定打开资源的方式代码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>超链接标签</title> <…

ES6-ES13教程笔记(一)

课程目录 1、走入ES6 1.1、初识ES6 1.2 let声明变量与const声明常量 1、let声明 1、块级作用域&#xff0c;不会成为全局变量影响别人&#xff1b; 2、不允许重复声明&#xff1b; 3、变量不会提升&#xff1b;&#xff08;会存在暂时性死区&#xff09; 4、不与顶层对象挂…

模糊神经网络(FNN)的实现(Python,附源码及数据集)

文章目录一、理论基础1、模糊神经网络结构2、前向传播过程3、反向传播过程4、建模步骤二、模糊神经网络的实现1、训练过程&#xff08;FNN.py&#xff09;2、测试过程&#xff08;test.py&#xff09;3、测试结果4、参考源码及实验数据集一、理论基础 模糊神经网络&#xff08…

阿里大数据之路总结

一、数据采集 二、数据同步 2.1、数据同步方式&#xff1a; 数据同步的三种方式&#xff1a;直连方式、数据文件同步、数据库日志解析方式 关系型数据库的结构化数据&#xff1a;MYSQL、Oracle、DB2、SQL Server非关系型数据库的非结构化数据&#xff08;数据库表形式存储&am…

力扣Top100题之两数相加(Java解法)

0 题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数…

Unity IOS 通过命令行导出IPA

新建一个文件没有后缀然后输入如下内容 #!/usr/bin/env sh /Applications/Unity/Hub/Editor/2020.1.5f1c1/Unity.app/Contents/MacOS/Unity -quit -batchmode -projectPath /Users/zyt/Test -executeMethod Test.BuildEditor.BuildApp cd /Users/zyt/Test/Xcode/unity-xcode x…

Redis:SETNX解决分布式锁误删问题

Redis&#xff1a;SETNX解决分布式锁误删问题一.概述二. 分布式锁&#xff08;初级&#xff09;&#xff08;1&#xff09;锁接口&#xff08;2&#xff09;锁实现类上锁&#xff08;3&#xff09;释放锁&#xff08;4&#xff09;存在的问题三. 改进释放锁&#xff08;1&#…

linux:字符串拷贝的五种方法:使用指针下标,指针变量加偏移量,指针变量自加等

字符串数组名做函数形参&#xff0c;会退化正指针变量&#xff0c;需要使用指针变量操作字符串 代码&#xff1a; #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <s…

NDlib:npm启动网络演化可视化项目(SIR模型)

文章目录安装node.js以及vue启动NDlib_viz可视化项目后续问题打开项目安装node.js以及vue 参考之前的文章Node.js、npm和vue下载及安装 启动NDlib_viz可视化项目 在github下载项目到本地 https://github.com/GiulioRossetti/NDLib_viz 将node.js路径添加到环境变量 打开命令…

令执法机构头疼的“虚拟货币犯罪”,为何链上天眼能“行”

谈到洗钱&#xff0c;你脑海中率先想到的可能是影视剧中利用赌场、收藏品拍卖等来实施犯罪。其实洗钱犯罪的花样不止于此&#xff0c;在近期热播的扫黑剧《狂飙》中&#xff0c;唐小龙为洗白“赌博资金、高利贷业务”&#xff0c;便通过“卖酒网销”的方式达成洗钱目的。 随着科…

基于SpringCloud的可靠消息最终一致性04:项目基础代码

上一节给出了项目需求和骨架代码,这一节来接着看基础代码。骨架代码和基础代码最主要的区别是:骨架代码都是数据库脚本、POM依赖文件、配置文件内容、运维脚本等,而基础代码则是和业务有关联,但并非关键代码的部分。 这些代码不用一个个地看,主要是看看结构就行。 图二十五…

python 生成唯一id的实现方式

python 生成唯一id的实现方式 常用的python生成唯一id的四种方式 1.使用UUID UUID应该是大家耳熟能详的一个东西了&#xff0c;它的全称叫 通用唯一识别码&#xff08;英語&#xff1a;Universally Unique Identifier&#xff0c;缩写&#xff1a;UUID&#xff09;生成标准3…