在我学习软件开发之前,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的更多相关文章

  1. 一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill

    开始 一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill allSettled 的用法 const runAl ...

  2. 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质

    一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...

  3. 基础篇|一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  4. 一文搞懂 Prometheus 的直方图

    原文链接:一文搞懂 Prometheus 的直方图 Prometheus 中提供了四种指标类型(参考:Prometheus 的指标类型),其中直方图(Histogram)和摘要(Summary)是最复 ...

  5. Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!

    本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...

  6. 一文搞懂vim复制粘贴

    转载自本人独立博客https://liushiming.cn/2020/01/18/copy-and-paste-in-vim/ 概述 复制粘贴是文本编辑最常用的功能,但是在vim中复制粘贴还是有点麻 ...

  7. 三文搞懂学会Docker容器技术(中)

    接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...

  8. 三文搞懂学会Docker容器技术(下)

    接着上面一篇:三文搞懂学会Docker容器技术(上) 三文搞懂学会Docker容器技术(中) 7,Docker容器目录挂载 7.1 简介 容器目录挂载: 我们可以在创建容器的时候,将宿主机的目录与容器 ...

  9. 一文搞懂所有Java集合面试题

    Java集合 刚刚经历过秋招,看了大量的面经,顺便将常见的Java集合常考知识点总结了一下,并根据被问到的频率大致做了一个标注.一颗星表示知识点需要了解,被问到的频率不高,面试时起码能说个差不多.两颗 ...

  10. 一文搞懂 js 中的各种 for 循环的不同之处

    一文搞懂 js 中的各种 for 循环的不同之处 See the Pen for...in vs for...of by xgqfrms (@xgqfrms) on CodePen. for &quo ...

随机推荐

  1. SpringBoot整合RocketMQ,老鸟们都是这么玩的!

    今天我们来讨论如何在项目开发中优雅地使用RocketMQ.本文分为三部分,第一部分实现SpringBoot与RocketMQ的整合,第二部分解决在使用RocketMQ过程中可能遇到的一些问题并解决他们 ...

  2. Carla 自动驾驶仿真平台的安装与配置指南

    简介 Carla 是一款基于 Python 编写和 UE(虚幻引擎)的开源仿真器,用于模拟自动驾驶车辆在不同场景下的行为和决策.它提供了高度可定制和可扩展的驾驶环境,包括城市.高速公路和农村道路等.C ...

  3. 人群定向SQL表

    SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for rc_throng -- ------ ...

  4. mysql数据库常见优化方法

    1,创建适当的索引(主键索引.唯一索引.普通索引.全文索引.空间索引). 2,对sql语句进行优化--->慢查询(explain). 3,使用分表技术(水平分表,垂直分表),分区技术. 4,读写 ...

  5. Gin框架快速入门

    github地址: https://github.com/gin-gonic/gin 初体验 安装: $ go get -u github.com/gin-gonic/gin 简单实例: packag ...

  6. node安装node-sass

    安装node-sass使用node版本不能太高,否则会报错 checking for Python executable "C:\Program Files\python" in ...

  7. 重学C++ (一)基础回顾

    由于C++基础非常重要,所以打算把平时重学C++的总结,抽时间上传到博客! 1.切勿乱用带符号类型和无符号类型 #include <iostream> using namespace st ...

  8. 【解决方法】Windows快捷键Win+G无法使用,提示需要新应用打开链接

    环境: 系统版本:Windows 10 家庭中文版 问题描述: 描述:按下Win+G后弹出提示框,需要使用新应用以打开此 ms-gamingoverlay 链接 问题解释: 误将Xbox game b ...

  9. 2023-01-05:konradkleine/docker-registry-frontend是registry的web界面工具之一。请问部署在k3s中,yaml如何写?

    2023-01-05:konradkleine/docker-registry-frontend是registry的web界面工具之一.请问部署在k3s中,yaml如何写? 答案2023-01-05: ...

  10. 2021-07-17:一个不含有负数的数组可以代表一圈环形山,每个位置的值代表山的高度。比如, {3,1,2,4,5}、{4,5,3,1,2}或{1,2,4,5,3}都代表同样结构的环形山。山峰A和山

    2021-07-17:一个不含有负数的数组可以代表一圈环形山,每个位置的值代表山的高度.比如, {3,1,2,4,5}.{4,5,3,1,2}或{1,2,4,5,3}都代表同样结构的环形山.山峰A和山 ...