一文搞懂什么是 API

在我学习软件开发之前,API 听起来像是一种啤酒(IPA,印度淡色艾尔)。如今我经常使用这个术语,事实上最近我还尝试在酒吧里点了一个 API,结果酒保给了我一个:
404 资源未找到的回应
无论是在科技行业还是其他地方,我遇到很多人对这个相当普遍的术语有着模糊的理解。从技术上讲,API 代表应用程序编程接口,大多数大公司都曾为客户或内部使用构建过 API。但如何用简单的语言来解释 API 呢?除了开发和商业中使用的定义外,是否还有更广泛的含义?首先,让我们退后一步看看网络本身是如何运作的。
1、万维网和远程服务器
当我想到网络时,我会想象一个由连接在一起的服务器组成的庞大网络。互联网上的每个页面都存储在某个远程服务器上。远程服务器其实并不神秘——它只是位于远程计算机中的一部分,专门用于处理请求。
为了更好地理解这个概念,你可以在自己的笔记本电脑上启动一个能够将整个网站提供给互联网使用的服务器(事实上,在将网站发布给公众之前,工程师们就是使用本地服务器进行开发)。
当你在浏览器中输入 www.baidu.com 时,一个请求被发送到 Baidu 的远程服务器。一旦你的浏览器收到响应后,它会解析代码并显示页面。对于浏览器(也称为客户端)来说,Baidu 的服务器就是一个 API。这意味着每次访问 Web 上的页面时,您都与某个远程服务器的 API 进行交互。
API 并不等同于远程服务器——而是指接收请求和发送响应的那部分。

2、将 API 作为服务客户的途径
您可能听说过公司将 API 打包成产品,例如,Weather Underground 出售其天气数据 API 的访问权限。示例场景:
您的小型企业网站上有一个用于给客户预约的表单,您希望让客户能够自动在 Google 日历中创建一个包含该预约详细信息的事件。
API 使用:想法是让您网站的服务器直接与谷歌服务器进行通信,请求创建具有给定详细信息的事件。然后,您的服务器会收到谷歌发回来、处理它并向浏览器发送相关信息(如用户确认消息)。或者,你可以直接通过你自己服务器向谷歌服务器发送 API 请求。
这个 Google 日历 API 与其他远程服务器 API 的区别是什么?
从技术角度看, 区别在于请求和响应格式。 要呈现整个网页,浏览器需要 HTML 格式响应, 其中包含表示代码;而 Google 日历 ****API 调用只返回数据——可能以 JSON 格式返回。
如果你们网站服务端正在发起 API 请求,则意味着你们网站服务端就是客户端(类似于当你使用浏览器导航至某个网站时,浏览器就变成了客户端)。
从用户角度来看,API 允许他们在不离开您的网站的情况下完成操作,大多数现代网站都使用了一些第三方 API。而且,许多问题已经有了第三方解决方案,无论是以库还是服务的形式。通常使用现有解决方案更容易、更可靠。开发团队将他们的应用程序分成多个通过 API 相互通信的服务器并不罕见。为主应用程序服务器执行辅助功能的服务器通常被称为微服务。
总之,当公司向客户提供 API 时,这意味着他们构建了一组专用 URL,返回纯数据响应——也就是说响应中不会包含像图形用户界面(如网站)那样具有表现性负担的内容。你可以用浏览器发起这些请求吗?往往可以。由于实际 HTTP 传输以文本进行, 浏览器会尽最大可能显示响应。
例如,你甚至可以在没有访问令牌情况下直接通过浏览器访问 GitHub API,当您在浏览器中访问 GitHub 用户 API
{
"login": "petrgazarov",
"id": 5581195,
"avatar_url": "https://avatars.githubusercontent.com/u/5581195?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/petrgazarov",
"html_url": "https://github.com/petrgazarov",
"followers_url": "https://api.github.com/users/petrgazarov/followers",
"following_url": "https://api.github.com/users/petrgazarov/following{/other_user}",
"gists_url": "https://api.github.com/users/petrgazarov/gists{/gist_id}",
"starred_url": "https://api.github.com/users/petrgazarov/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/petrgazarov/subscriptions",
"organizations_url": "https://api.github.com/users/petrgazarov/orgs",
"repos_url": "https://api.github.com/users/petrgazarov/repos",
"events_url": "https://api.github.com/users/petrgazarov/events{/privacy}",
"received_events_url": "https://api.github.com/users/petrgazarov/received_events",
"type": "User",
"site_admin": false,
"name": "Petr Gazarov",
"company": "PolicyGenius",
"blog": "http://petrgazarov.com/",
"location": "NYC",
"email": "petrgazarov@gmail.com",
"hireable": null,
"bio": null,
"public_repos": 23,
"public_gists": 0,
"followers": 7,
"following": 14,
"created_at": "2013-10-01T00:33:23Z",
"updated_at": "2016-08-02T05:44:01Z"
}
浏览器很好地显示了一个 JSON 响应,像这样的 JSON 已经可以在您的代码中使用了。从这段文字中提取数据非常容易,然后您可以随意处理这些数据。
3、A 代表“应用程序”
在结束之前,让我们再举几个 API 的例子。“应用程序”可以指很多东西。以下是 API 语境中的一些示例:
- 具有明确功能的软件。
- 整个服务器、整个应用程序或仅仅是一个小部分的应用程序。
基本上任何可以从其环境中明确区分出来的软件都可以成为 API 中的“A”,并且可能也会有某种类型的 API。 假设您在代码中使用了第三方库,一旦合并到您的代码中,库就成为了您整体应用程序的一部分。作为一个独特的软件,该库可能具有允许与您其他代码交互操作所需 API。
另一个例子:在面向对象设计(Object Oriented Design)中,代码被组织成对象。你们可能拥有数百个已定义好可相互交互操作对象。每个对象都具备 API —— 一套公共方法和属性供它与你们其他对象进行交互操作。此外, 对象内部逻辑也可能设置私密性质, 这意味着它对外界范围隐藏起来(不属于 API)。
通过我们所涵盖内容, 希望大家能够更深入理解 API 的广义概念以及现今常见术语运用方式。
Eolink Apikit -跨平台(Windows、Mac、Linux、Browsers...)的 API 开发测试工具,支持 REST、Websocket、gRPC、TCP、UDP、SOAP等协议,结合 API 设计、文档管理、自动化测试、监控、研发管理和团队协作的一站式 API 生产平台。
初创团队免费申请通道:https://easy-open-link.feishu.cn/share/base/form/shrcnpMe5dWtOkq2GoRWQ97oLlc

一文搞懂什么是 API的更多相关文章
- 一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill
开始 一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill allSettled 的用法 const runAl ...
- 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质
一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...
- 基础篇|一文搞懂RNN(循环神经网络)
基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...
- 一文搞懂 Prometheus 的直方图
原文链接:一文搞懂 Prometheus 的直方图 Prometheus 中提供了四种指标类型(参考:Prometheus 的指标类型),其中直方图(Histogram)和摘要(Summary)是最复 ...
- Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!
本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...
- 一文搞懂vim复制粘贴
转载自本人独立博客https://liushiming.cn/2020/01/18/copy-and-paste-in-vim/ 概述 复制粘贴是文本编辑最常用的功能,但是在vim中复制粘贴还是有点麻 ...
- 三文搞懂学会Docker容器技术(中)
接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...
- 三文搞懂学会Docker容器技术(下)
接着上面一篇:三文搞懂学会Docker容器技术(上) 三文搞懂学会Docker容器技术(中) 7,Docker容器目录挂载 7.1 简介 容器目录挂载: 我们可以在创建容器的时候,将宿主机的目录与容器 ...
- 一文搞懂所有Java集合面试题
Java集合 刚刚经历过秋招,看了大量的面经,顺便将常见的Java集合常考知识点总结了一下,并根据被问到的频率大致做了一个标注.一颗星表示知识点需要了解,被问到的频率不高,面试时起码能说个差不多.两颗 ...
- 一文搞懂 js 中的各种 for 循环的不同之处
一文搞懂 js 中的各种 for 循环的不同之处 See the Pen for...in vs for...of by xgqfrms (@xgqfrms) on CodePen. for &quo ...
随机推荐
- VMWare无法从主机向虚拟机复制粘贴
VMWare无法从主机向虚拟机复制粘贴 问题描述 无法在本机和虚拟机之间实现复制粘贴和文件拖到功能. 系统环境 本机 Windows10 虚拟机 Centos7 解决方法 多次尝试重新安装VMware ...
- 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一)
一.创建ASP.NET Core Web API项目(若项目已创建,则可跳过本节内容) 1.双击打开VS2022. 2.单击"创建新项目",如下图. 3.选择"ASP.N ...
- 在smt贴片加工中手工焊接和机器焊接的区别
在smt贴片加工领域,都需要将电子元件贴装在pcb板表面并进行焊接的,常用的焊接方式分为两种:手动焊接和全自动机器焊接,而常用的焊接机器有回流焊机和波峰焊机,那你知道他们的区别是什么吗?安徽英特丽带你 ...
- Python 明明安装了Crypto模,但报错No module named “Crypto“
安装网上的解决方法卸载:pip uninstall cryptopip uninstall pycryptodomepip uninstall pycrypto重装:pip install Crypt ...
- python_7 退出、结束循环和嵌套循环
一.查缺补漏 1. end=' 任意值 ' 表示换行,任意值会显示在换行前,不写默认换行 2. input() 用户键盘输入 默认输入str类型,如要和int类型比较需要强制类型转换二.退出.结束循环 ...
- pngquant 在 Windows 上压缩带中文路径的 png 图片
pngquant 是一个优秀的 png 压缩工具,但是在 Windows 上不支持目录中带有 unicode 字符(例如中文)的文件.所以要用一个折中的办法(即标准输入)让 pngquant 压缩目录 ...
- 2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数。
2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数. 答案2023-02-21: 使用 github.com/moonfdd/ffmpeg-go 库,这个库比go ...
- 2022-03-09:我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字。 你来猜我选了哪个数字。 如果你猜到正确的数字,就会 赢得游戏 。 如果你猜错了,那么我会告诉你,我选
2022-03-09:我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字. 你来猜我选了哪个数字. 如果你猜到正确的数字,就会 赢得游戏 . 如果你猜错了,那么我会告诉你,我选 ...
- 2021-11-19:[0,4,7] : 0表示这里石头没有颜色,如果变红代价是4,如果变蓝代价是7,[1,X,X] : 1表示这里石头已经是红,而且不能改颜色,所以后两个数X无意义,[2,X,X]
2021-11-19:[0,4,7] : 0表示这里石头没有颜色,如果变红代价是4,如果变蓝代价是7,[1,X,X] : 1表示这里石头已经是红,而且不能改颜色,所以后两个数X无意义,[2,X,X] ...
- 2021-08-07:与数组中元素的最大异或值。给你一个由非负整数组成的数组 nums 。另有一个查询数组 queries ,其中 queries[i] = [xi, mi] 。第 i 个查询的答案是
2021-08-07:与数组中元素的最大异或值.给你一个由非负整数组成的数组 nums .另有一个查询数组 queries ,其中 queries[i] = [xi, mi] .第 i 个查询的答案是 ...