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

怎么理解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.dtcms.com/a/353431.html

相关文章:

  • 用户体验设计 | 什么是 AX?从 UX 到 AX 的演进
  • 数据结构——算法效率的度量(时间复杂度与空间复杂度)
  • Elasticsearch 启动反复重启排查实录:从“内存不足”到“vm.max\_map\_count 过小”
  • 图表可视化地理趋势-Telerik WPF Chart
  • 智能汽车制造:海康NVR管理平台/工具EasyNVR多品牌NVR管理工具/设备实现无插件视频监控直播方案
  • R语言贝叶斯方法在生态环境领域中的技术应用
  • 攻克 Java 分布式难题:并发模型优化与分布式事务处理实战指南
  • APP与WEB测试的区别?
  • 人工智能在医疗领域中辅助外科手术的应用综述
  • 【VSCode】使用VSCode创建Java C/S架构项目
  • 如何用Renix实现网络测试自动化: 从配置分离到多厂商设备支持
  • 【网络编程】NtyCo协程服务器的框架(轻量级的协程方案,人称 “小线程”)
  • 从浏览器无法访问到Docker容器的 FastAPI 服务地址【宿主机浏览器和容器不在同一个网络层面:端口映射】
  • 前端AI应用实践指南:从基础概念到高级实现
  • 云手机的未来发展怎么样?
  • 数据结构(C语言篇):(二)顺序表
  • 状态设计模式
  • 手机冻结技术发展时间轴
  • Flutter项目详解
  • 深度学习实战117-各种大模型(Qwen,MathGPT,Deepseek等)解高考数学题的应用,介绍架构原理
  • C++工程实战入门笔记6-函数(三)关于base16编码的原理和函数模块化实战
  • LINUX --- 网络编程(二)
  • OpenAi在中国拿下“GPT”商标初审!
  • October 2019 Twice SQL Injection
  • Qt图片上传系统的设计与实现:从客户端到服务器的完整方案
  • 对比视频处理单元(VPU)、图形处理器(GPU)与中央处理器(CPU)
  • 多模态模型如何处理和理解图片
  • PPT处理控件Aspose.Slides教程:在.NET中开发SVG到EMF的转换器
  • STM32学习日记
  • 替身演员的艺术:pytest-mock 从入门到飙戏