当前位置: 首页 > ds >正文

怎么理解API?

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

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

在这个比喻中:

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

  • 菜单 = 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.xdnf.cn/news/19091.html

相关文章:

  • R-Zero:通过自博弈机制让大语言模型无需外部数据实现自我进化训练
  • LeetCode-238除自身以外数组的乘积
  • 大脑的藏宝图——神经科学如何为自然语言处理(NLP)的深度语义理解绘制新航线
  • PowerShell下vim编辑文件时产生的额外文件
  • 网站防爆破安全策略分析
  • KingBase数据库迁移利器:KDTS工具 MySQL数据迁移到KingbaseES实战
  • 学习设计模式《二十四》——访问者模式
  • 【数字投影】创新展厅视觉体验,3D Mapping投影全面解读
  • LaTeX论文转word插入mathtype公式
  • C/C++ 数据结构 —— 线索二叉树
  • 【C++】map 容器的使用
  • django配置多个app使用同一个static静态文件目录
  • Android Glide最佳实践:高效图片加载完全指南
  • 滥用Mybatis一级缓存引发OOM问题
  • 网络安全监控中心
  • 阿里云——计算服务深度解析与选型
  • ChatGPT 上线 “学习模式”:全版本开放,重构 AI 教育逻辑
  • 基于单片机步进电机控制电机正反转加减速系统Proteus仿真(含全部资料)
  • 北斗导航|接收机自主完好性监测算法综述
  • java数据类型获取长度方式总结
  • SpringBoot集成 DeepSeek 对话补全功能
  • Spark学习记录
  • Unity 客户端和服务器端 基于网络的账户管理系统
  • 除自身以外数组的乘积是什么意思
  • 【OpenGL】LearnOpenGL学习笔记16 - 帧缓冲(FBO)、渲染缓冲(RBO)
  • 【JUC】——线程池
  • 点评项目(Redis中间件)第一部分Redis基础
  • docker run 后报错/bin/bash: /bin/bash: cannot execute binary file总结
  • 边缘计算:一场由物理定律发起的“计算革命”
  • 预测模型及超参数:2.传统机器学习:PLS及其改进