API(接口) | 软件组件之间信息交互的“桥梁”

Hi,大家好,我是半亩花海。本文主要从 API 的定义、包含、用途和其他方面来简单地介绍 API(接口) ——软件组件之间信息交互的“桥梁”。


目录

一、什么是 API?

二、 API 中所包含哪些?

补充

三、API 可以做什么?

常见浏览器 API

常见第三方API

四、其他关于 API



一、什么是 API?

百度百科给出的定义是:

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

关键词:函数、 提供应用程序与开发人员 、无需访问源码、例程。

从编程角度讲,API 可能就像那封装的函数,避免重复造轮子,提高效率。

  •  API(接口)是什么 - 知乎 (zhihu.com) 一文中,有一个形象的关于 API 的解释:

举个常见的例子,在京东上下单付款之后,商家选用顺丰发货,然后你就可以在京东上实时查看当前的物流信息。京东和顺丰作为两家独立的公司,为什么会在京东上实时看到顺丰的快递信息,这就要用到 API,当查看自己的快递信息时,京东利用顺丰提供的 API 接口,可以实时调取信息呈现在自己的网站上。除此,你也可以在快递 100 上输入订单号查取到快递信息。只要有合作,或是有允许,别的公司都可以通过顺丰提供 的API 接口调取到快递信息。既然有多方调用,那提供一个统一的调用规范会方便很多。

  • 再在 (24 封私信) 想问一下什么是API,具体是什么意思? - 知乎 (zhihu.com) 一文中,也有一张形象的场景图片展示 API:

电脑需要调用手机里面的信息,这时候你会拿一根数据线将电脑手机连接起来,电脑和手机上连接数据线的接口就是传说中的 API 接口。

  • 同样,比如说,编程来显示一些 3D 图形,使用以更高级语言编写的 API(例如 JavaScript 或 Python)将会比直接编写直接控制计算机的 GPU 或其他图形功能的低级代码(比如 C 或 C++)来执行操作要容易得多。

二、 API 中所包含哪些?

  • Aplication(软件组件)
  • Protocol (协议)规定了各部分之间如何进行信息交互的规则和步骤;
  • Interface(接口)我认为在API里的接口可以看做是一个接待窗口,对各个软件组件开 放,他们可以通过接口来实现与其他组件的信息交互;
  • Format(格式)要进行信息交互,我们又意识到交互双方语言必须相同呀,对吧。所    以又引出了另一个概念 格式(format) ,在程序员的世界里,通用的格式包含 XML 和 JSON;

在 API 术语里,API 端点 通常是指一个接口中提供特定功能的子集的服务提供者,不同的端点可以有不同的协议和不同的格式。

补充

客户端 JavaScript 中的 API

        客户端 JavaScript 中有很多可用的 API — 他们本身并不是 JavaScript 语言的一部分,却建立在JavaScript 语言核心的顶部,为使用 JavaScript 代码提供额外的超强能力。他们通常分为两类:

  • 浏览器 API 内置于 Web 浏览器中,能从浏览器和电脑周边环境中提取数据,并用来做有用的复杂的事情 。例如 Geolocation API 提供了一些简单的 JavaScript 结构以获得位置数据,因此您可以在Google地图上标示您的位置。在后台,浏览器确实使用一些复杂的低级代码(例如 C++)与设备的 GPS 硬件(或可以决定位置数据的任何设施)通信来获取位置数据并把这些数据返回给您的代码中使用浏览器环境;但是,这种复杂性通过 API 抽象出来,因而与您无关。
  • 第三方 API 缺省情况下不会内置于浏览器中,通常必须在 Web 中的某个地方获取代码和信息。例如 Twitter API 使您能做一些显示最新推文这样的事情,它提供一系列特殊的结构,可以用来请求Twitter 服务并返回特殊的信息。


三、API 可以做什么?

常见浏览器 API

  • 操作文档的 API:内置于浏览器中。最明显的例子是 DOM(文档对象模型) API,它允许您操作 HTML 和 CSS —— 创建、移除以及修改 HTML,动态地将新样式应用到您的页面,等等。每当您看到一个弹出窗口出现在一个页面上,或者显示一些新的内容时,这都是DOM的行为。 您可以在 Manipulating documents 中找到关于这些类型的API的更多信息。
  • 从服务器获取数据的 API:用于更新网页的一小部分是相当好用的。这个看似很小的细节能对网站的性能和行为产生巨大的影响 — 如果您只是更新一个股票列表或者一些可用的新故事而不需要从服务器重新加载整个页面将使网站或应用程序感觉更加敏感和“活泼”。使这成为可能的API包括XMLHttpRequest和Fetch API。您也可能会遇到描述这种技术的术语 Ajax。您可以在Fetching data from the server找到关于类似的API的更多信息。
  • 用于绘制和操作图形的 API:目前已被浏览器广泛支持 — 最流行的是允许您以编程方式更新包含在 HTML <canvas> 元素中的像素数据以创建 2D 和 3D 场景的 Canvas 和 WebGL。例如,您可以绘制矩形或圆形等形状,将图像导入到画布上,然后使用Canvas API对其应用滤镜(如棕褐色滤镜或灰度滤镜),或使用 WebGL 创建具有光照和纹理的复杂 3D 场景。这些 API 经常与用于创建动画循环的 API(例如window.requestAnimationFrame())和其他 API 一起不断更新诸如动画和游戏之类的场景。
  • 音频和视频 API:例如 HTMLMediaElement,Web Audio API 和 WebRTC 允许您使用多媒体来做一些非常有趣的事情,比如创建用于播放音频和视频的自定义 UI 控件,显示字幕字幕和您的视频,从网络摄像机抓取视频,通过画布操纵(见上),或在网络会议中显示在别人的电脑上,或者添加效果到音轨(如增益,失真,平移等) 。
  • 设备 API:基本上是以对网络应用程序有用的方式操作和检索现代设备硬件中的数据的 API。我们已经讨论过访问设备位置数据的地理定位 API,因此您可以在地图上标注您的位置。其他示例还包括通过系统通知(参见 Notifications API)或振动硬件(参见 Vibration API)告诉用户 Web 应用程序有用的更新可用。
  • 客户端存储 API:在 Web 浏览器中的使用变得越来越普遍——如果您想创建一个应用程序来保存页面加载之间的状态,甚至让设备在处于脱机状态时可用,那么在客户端存储数据将会是非常有用的。例如使用 Web Storage API 的简单的键-值存储以及使用 IndexedDB API 的更复杂的表格数据存储。

常见第三方API

第三方 API 种类繁多;下列是一些比较流行的你可能迟早会用到的第三方 API:

  • The Twitter API, 允许您在您的网站上展示您最近的推文等。
  • The Google Maps API 允许你在网页上对地图进行很多操作(这很有趣,它也是 Google 地图的驱动器)。现在它是一整套完整的,能够胜任广泛任务的 API。其能力已经被 Google Maps API Picker 见证。
  • The Facebook suite of API 允许你将很多 Facebook 生态系统中的功能应用到你的 app,使之受益,比如说它提供了通过 Facebook 账户登录、接受应用内支付、推送有针对性的广告活动等功能。
  • The YouTube API, 允许你将 Youtube 上的视频嵌入到网站中去,同时提供搜索 Youtube,创建播放列表等众多功能。
  • The Twilio API, 其为您的 app 提供了针对语音通话和视频聊天的框架,以及从您的 app 发送短信息或多媒体信息等诸多功能。

四、其他关于 API

关于API,还有很多其他方面,可以四处看看你想了解的:

(24 封私信) SDK 和 API 的区别是什么? - 知乎 (zhihu.com)

(24 封私信) 有哪些好玩的免费的API接口? - 知乎 (zhihu.com)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL server内存问题排查方案

前言 由于昨晚线上服务器数据库突然访问数据缓慢&#xff0c;任务管理里面SQL server进程爆满等等&#xff0c;重大事故的排查拟写解决方案。 整体思路 查询数据库请求连接&#xff1a;排查连接池是否占满查询数据库请求量&#xff1a;排查数据是否存在反复查询查询数据库阻…

Mysql 学习(十五)redo 日志

redo 日志 什么是redo日志&#xff1f;在说这个之前我们先来想一个场景&#xff0c;在访问磁盘的页面之前&#xff0c;我们会先把页面缓存到Buffer Pool之后&#xff0c;才会访问。写页面的时候也会先将buffer pool中的页面修改之后&#xff0c;然后在某个时机才会刷新到磁盘中…

【Oracle Database】如何远程连接服务器、创建用户、从本地dmp导入表

C:\Users\test>imp test/123456ip/orcl:1521 fileE:\db.dmp tablestable1,table2Import: Release 11.2.0.3.0 - Production on 星期一 3月 4 12:59:09 2024Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.IMP-00058: 遇到 ORACLE 错误 1263…

vue3 vue-i18n 多语言

1. 安装 npm install vue-i18n -s 2. 引入main.js import { createI18n } from vue-i18n import messages from ./i18n/index const i18n createI18n({legacy: false,locale: Cookies.get(language) || en_us, // set localefallbackLocale: en_us, // set fallback local…

Spring面向切片编程AOP概念及相关术语(一)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

面试问答之Spring进阶

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;说说你对Spring的认识与理解&#x1f415;Bean的分类&#x1f415; BeanFactory 接口和ApplicationContex 接口 的区别&#x1f415;SpringBe…

Canvas笔记04:绘制九大基本图形的方法,重头戏是贝塞尔曲线

hello&#xff0c;我是贝格前端工场&#xff0c;最近在学习canvas&#xff0c;分享一些canvas的一些知识点笔记&#xff0c;本期分享canvas绘制图形的知识&#xff0c;欢迎老铁们一同学习&#xff0c;欢迎关注&#xff0c;如有前端项目可以私信贝格。 Canvas是HTML5中的一个绘…

ROS2学习(七) Foxy版本ros2替换中间件。

在ros2使用的过程中&#xff0c;一开始选用的foxy版本&#xff0c;后来发现&#xff0c;foxy版本的ros2有很多问题。一个是foxy版本已经停止维护了。另一个问题是这个版本有很多bug, 后续的版本在功能实现上做了很大的改动&#xff0c;甚至说进行了重写。修复的一些问题&#x…

【Flink网络传输】ShuffleMaster与ShuffleEnvironment创建细节与提供的能力

文章目录 一. Taskmanager之间传递数据细节二. ShuffleService的设计与实现三. 在JobMaster中创建ShuffleMaster四. 在TaskManager中创建ShuffleEnvironment五. 基于ShuffleEnvironment创建ResultPartition1. 在task启动时创建ResultPartition2. ResultPartition的创建与对数据…

WSL2安装+深度学习环境配置

WSL2安装深度学习环境配置 1 安装WSL22 配置深度学习环境1.1 设置用户名、密码1.2 安装cuda修改WSL安装路径 1.3 安装Anaconda 参考&#xff1a;搭建Windows Linux子系统&#xff08;WSL2&#xff09;CUDA环境 参考&#xff1a;深度学习环境配置 WindowsWSL2 1 安装WSL2 WSL …

java-springboot 源码 01

01.springboot 是一个启动器 先安装maven&#xff0c;按照网上的流程来。主要是安装完成后&#xff0c;要修改conf目录下的setting.xml文件。 添加&#xff1a;阿里云镜像 <mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>ali…

判断连续数据同意特征的方法:插旗法

bool isMonotonic(int* nums, int numsSize) {int flag 2;for (int i 1; i < numsSize; i) {if (nums[i-1] > nums[i]) {if (flag 0)return false;flag 1;}else if (nums[i-1] < nums[i]) {if (flag 1)return false;flag 0;}}return true; }此代码较为简单&…

【Python】新手入门(8):什么是迭代?迭代的作用是什么?

【Python】新手入门&#xff08;8&#xff09;&#xff1a;什么是迭代&#xff1f;迭代有什么应用&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】…

《时代教育》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《时代教育》杂志是正规刊物吗&#xff1f; 答&#xff1a;是的&#xff0c;国家新闻出版总署正式备案的期刊 问&#xff1a;《时代教育》是什么级别刊物&#xff1f; 答&#xff1a;省级 主管单位&#xff1a;成都日报报业集团 主办单位&#x…

<C++>【继承篇】

​ ✨前言✨ &#x1f393;作者&#xff1a;【 教主 】 &#x1f4dc;文章推荐&#xff1a; ☕博主水平有限&#xff0c;如有错误&#xff0c;恳请斧正。 &#x1f4cc;机会总是留给有准备的人&#xff0c;越努力&#xff0c;越幸运&#xff01; &#x1f4a6;导航助手&#x1…

主题乐园如何让新客变熟客,让游客变“留客”?

群硕跨越时间结识了一位爱讲故事的父亲&#xff0c;他汇集了一群幻想工程师&#xff0c;打算以故事为基础&#xff0c;建造一个梦幻的主题乐园。 这个乐园后来成为全球游客最多、收入最高的乐园之一&#xff0c;不仅在2023财年创下了近90亿&#xff08;美元&#xff09;的营收…

软件测试必学的16个高频数据库操作及命令

数据库作为软件系统数据的主要存取与操作中心&#xff0c;广泛应用于企业当中。在企业中常用的数据库管理系统有 ORACLE、MS SQL SERVER、MySQL等。其中以免费的 MySQL 最多&#xff0c;特别在中小型互联网公司里。 因此&#xff0c;本文的数据库操作是基于 MySQL 数据库系统下…

c# 二分查找(迭代与递归)

二分搜索被定义为一种在排序数组中使用的搜索算法&#xff0c;通过重复将搜索间隔一分为二。二分查找的思想是利用数组已排序的信息&#xff0c;将时间复杂度降低到O(log N)。 二分查找算法示例 何时在数据结构中应用二分查找的条件&#xff1a; 应用二分查找算法&#xff1a…

平台工程师的崛起:如何应对日益复杂的软件

平台工程只是 DevOps 专业化的另一个术语&#xff0c;还是有什么不同&#xff1f;事实可能介于两者之间。DevOps 及其相关的 DevXOps 风格具有浓厚的文化色彩&#xff0c;将各个团队置于中心位置。不幸的是&#xff0c;在许多地方&#xff0c;DevOps 导致了新的问题&#xff0c…

OpenAI 大声朗读出来

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…