想象一下你去一家餐厅吃饭。你(用户)不会直接走进厨房告诉厨师怎么做菜,对吧?你会怎么做?

你会拿起菜单,查看上面列出的菜品(例如“意大利面”)、它们的描述和价格。然后,你会把你想点的菜告诉服务员。服务员将你的订单送到厨房,最后把做好的菜端给你。

在这个比喻中:

  • 厨房 = 一个复杂的系统(例如:一个软件、一个数据库、一个服务器),它有能力完成工作,但它的内部运作对你来说是隐藏的。

  • 菜单 = API。它是一份明确的契约协议,规定了你可以要求什么(点哪些菜)、如何要求(通过服务员)、以及你可以期望得到什么样的回应(一盘意大利面)。

  • 服务员 = 负责接收你的请求并将其传递给厨房的机制(在软件中,这通常是网络请求)。

API(应用程序编程接口)就是软件世界的“菜单和服务员”。

API 全称是 Application Programming Interface(应用程序编程接口)。

它是一种让不同软件应用程序或组件相互通信和交换数据的 标准方式、一组规则和协议

它不是一个具体的产品,而是一份 契约。它定义了一个软件组件(或服务)如何被另一个组件调用:“ 如果你以这种 特定格式 发送请求给我,我保证会以这种 特定格式 返回响应给你。

举个例子,你手机上的天气应用本身并不拥有气象卫星和超级计算机来预测天气。

  1. 你打开应用,它想知道北京的天气。

  2. 应用会向一个天气预报服务的API(比如中国天气网提供的API)发送一个请求。这个请求就像是在说:“你好,请给我北京的天气数据。”(通常以特定的URL格式表示,例如 api.weather.com/beijing)。

  3. 天气预报服务收到请求,在其数据库中进行查询和处理。

  4. 然后,该服务通过API 将数据返回给你的应用,返回的数据是一种标准格式(通常是JSON或XML),而不是一个完整的网页。例如:

{ "city": "Beijing", "temperature": 22, "unit": "celsius", "conditions": "Cloudy" }

你的天气应用接收到这个结构化的数据,然后以一种美观的方式显示给你(图片、文字、动画)。

为什么API如此重要?

  1. 抽象与简化: API隐藏了内部实现的复杂性。你不需要知道天气预报服务是如何计算温度的,也不需要知道数据库的结构。你只需要知道 如何调用API 即可获得结果。这极大地简化了开发。

  2. 安全: API充当了一个安全网关。服务提供商可以通过API密钥、令牌等方式控制谁可以访问、可以访问哪些数据以及可以执行多少操作,而不是直接暴露其内部数据库。

  3. 促进创新与集成: API 允许不同的组织 公开其服务和数据,让其他开发者可以在此基础上 构建新的、创新的应用程序(例如,打车软件 集成 地图API,电商网站 集成 支付API)。这创造了巨大的生态系统。

  4. 独立发展: 只要 API契约 保持不变(菜单不变),厨房(内部实现)就可以随时改变(更换厨师、更新设备、改变食谱),而不会影响到点餐的顾客。同样,只要API不变,服务提供商就可以自由地更新、重构或迁移其后端系统,而不会破坏所有依赖它的应用程序。

与微服务的关系

微服务架构中,服务都通过一个 明确定义的API暴露其功能,其他服务只能 通过这个API与之交互,而不能直接访问其数据库或内部代码。这是实现服务间松耦合的关键。

总结一下:

API就像是一个标准化、安全的契约,让不同软件 可靠高效地交互,而无需了解对方内部的复杂细节。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统架构设计师备考第7天——网络协议中间件软件构件

一、网络协议 核心概念 定义:网络协议是计算机通信的“语言规则”,规定了数据格式、传输时序、控制信号等,确保不同系统实体间正常通信。作用:实现资源共享与信息交换的基础。常见类型: 局域网协议(LAN&…

《数据之心》

《数据之心》一、故障2045年,中国“天算”量子云中枢第七区。鱼小妖站在控制台前,指尖划过全息屏,蓝光映在她清秀的脸庞上。她的长发如墨,眸子却似星河,倒映着无数跳动的数据流。她是第七区最年轻的系统神经工程师&…

《C++ Primer 第五版》不要返回局部对象的引用或指针

1. 先看一个“看似合理”的例子#include <iostream> using namespace std;int& foo() {int x 10; // 局部变量&#xff0c;存在于栈中return x; // 返回它的引用 }int main() {int& ref foo(); // ref 绑定到了已经被销毁的 xcout << ref &…

2024鸿蒙样题需要掌握的知识点

一、读取json格式文件为对象或数组&#xff0c;显示相应字段1、创建json文件的参数一致的类2、导入类、导入json文件3、循环渲染import router from ohos.router //导入即对象 import books from resources/rawfile/book1.json import { Book } from ../model/BookEntry Compon…

QML Charts组件之坐标轴示例

目录引言&#x1f3af; 运行效果预览&#x1f4da; 相关系列文章五种坐标轴详解与代码实践1. 数值坐标轴&#xff08;ValueAxis&#xff09;示例代码说明2. 对数坐标轴&#xff08;LogValueAxis&#xff09;示例代码说明3. 日期坐标轴&#xff08;DateTimeAxis&#xff09;示例…

Vue3+ElementPlus倒计时示例

按钮文字默认显示“开始倒计时”当点击按钮时&#xff0c;显示正在倒计时(倒计时数字)倒计时结束按钮显示“开始倒计时” 倒计时逻辑 Hooks 函数 hooks/useCountDown.js /*** hooks函数&#xff1a;函数是用于封装和复用组件逻辑的一种机制* 定义&#xff1a;Hooks 是一种在不使…

docker 的网络

1.查看docker里面的网络docker network ls 2.查看某个 Docker 网络的 网关 IP 和 子网段docker network inspect <网络名或ID>

数据挖掘,到底是在挖掘什么?

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

【车载开发系列】CS+ for CC开发环境IDE

【车载开发系列】CS for CC开发环境IDE 【车载开发系列】CS for CC开发环境IDE【车载开发系列】CS for CC开发环境IDE一. 引言二. IDE安装三. 新建工程四. 堆与栈内存的设置1&#xff09;栈内存设置2&#xff09;堆内存设置一. 引言 瑞萨单片机开发环境有三种&#xff1a;estu…

如何将视频从安卓设备传输到Mac?

你是否想要创建备份、释放存储空间&#xff0c;或者分享难忘时刻&#xff1f;你可能想要轻松地将视频从安卓设备复制到MacBook。在本篇关于“如何将视频从安卓传输到Mac”的指南中&#xff0c;我们将介绍五种智能方法&#xff0c;帮助你无缝地复制视频。从传统的WiFi连接方法到…

MyBatis 初识:框架定位与核心原理——SQL 自由掌控的艺术

&#x1f50d; MyBatis 初识&#xff1a;框架定位与核心原理——SQL 自由掌控的艺术 文章目录&#x1f50d; MyBatis 初识&#xff1a;框架定位与核心原理——SQL 自由掌控的艺术&#x1f9e9; 一、为什么需要 ORM 框架&#xff1f;&#x1f4a1; JDBC 的痛点&#xff1a;原始时…

谷粒商城项目-P6环境-使用vagrant快速创建Linux虚拟机

1.虚拟机 虚拟机使用virtualbox,我使用的是6.0.12版本 2.创建linux系统 使用vagrant 验证是否安装完成vagrant 在cmd使用vagrant看看有没有命令提示 创建虚拟机 在cmd使用vagrant init centos/7创建 创建完成后使用vagrant up启动虚拟容器 启动完成后&#xff0c;使用va…

人形机器人的“奥运会“:宇树科技领跑,动捕技术成训练关键

近年来&#xff0c;人工智能、仿生学和运动控制技术的突破性发展&#xff0c;正推动人形机器人成为全球科技竞争的新焦点。各国政府、科研机构和企业加速布局医疗、救援、服务等领域的应用场景。在此背景下&#xff0c;首届世界人形机器人大会应运而生并于近日圆满落幕。此次运…

20250823给荣品RD-RK3588开发板刷Rockchip原厂的Android14【EVB7的V10】时调通AP6275P的WIFI

20250823给荣品RD-RK3588开发板刷Rockchip原厂的Android14【EVB7的V10】时调通AP6275P的WIFI 2025/8/23 17:02【我是先将这个DTSI文件中的代码块直接搬到rk3588-evb7-lp4.dtsi中&#xff0c;然后就可以上网了。接着就微调到最终版本&#xff01;】 E:\RD-RK3588_Android13\kern…

Mac 菜单栏多合一工具自荐:FancyTool

鉴于本人特别喜欢花里花哨的菜单栏&#xff0c;但又不想开机自启太多软件&#xff0c;所以自己开发了一个新的、轻量的&#xff0c;有点花里胡哨但又有些实用功能的多合一工具&#xff1a;[ FancyTool ]&#xff0c; 感兴趣的朋友可以点击链接下载使用。 我承认&#xff0c;这…

用AI生成的一个BadgerDB的管理工具

badgerDB 是一款由 Dgraph Labs 开发的高性能、嵌入式键值&#xff08;Key-Value&#xff09;数据库&#xff0c;基于 LSM-Tree&#xff08;Log-Structured Merge Tree&#xff09;存储引擎设计&#xff0c;主打低延迟、高吞吐量和轻量级部署&#xff0c;广泛用于需要本地持久化…

Spring-- Spring Security(一)

1. 概念Spring Security&#xff1a;Spring 提供的安全框架&#xff0c;用于保护应用程序免受未授权访问&#xff0c;提供认证、授权、CSRF 防护等功能。核心功能&#xff1a;认证&#xff08;Authentication&#xff09;&#xff1a;确认用户身份&#xff08;登录过程&#xf…

某电器5G智慧工厂网络建设全解析

随着工业4.0的全面推进和智能制造需求的不断增长&#xff0c;5G技术已成为智慧工厂建设的核心驱动力。某电器工厂计划通过构建高效可靠的5G网络&#xff0c;结合智能组网设备与工业物联网技术&#xff0c;实现智能化转型&#xff0c;提升生产运营效率。本文将详细解析该5G智慧工…

PyCharm 加载不了 conda 虚拟环境,不存在的

#工作记录前言在开发过程中&#xff0c;PyCharm 无法加载 Conda 虚拟环境是常见问题。在不同情况下&#xff0c;“Conda 可执行文件路径”的指定可能会发生变化&#xff0c;不会一尘不变&#xff0c;需要灵活处置。以下是一系列解决此问题的经验参考。检查 Conda 安装与环境创建…

xml中resultMap 的用法,数据库 JSON 字符串 → Java List/对象

文章目录一、resultMap 核心作用二、基本用法&#xff08;以你的配置为例&#xff09;1. 定义 resultMap2. 在 SQL 中使用 resultMap三、关键注意事项resultMap 是 MyBatis 中用于定义数据库表字段与 Java 实体类属性之间映射关系的核心配置&#xff0c;解决表字段名和实体类属…