”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 了解 API:应用程序如何通信:

了解 API:应用程序如何通信:

发布于2024-11-07
浏览:511

Understanding APIs: How Applications Communicate:

API(应用程序编程接口)是一组允许一个软件应用程序与另一个软件应用程序进行通信的规则和定义。它充当中介,通过定义不同的软件系统可以发出的请求类型、如何发出这些请求、数据格式以及系统应如何响应,使不同的软件系统能够相互交互。

API 中的关键概念

  1. 端点:

    • 这些是 API 公开的特定 URL,以允许外部应用程序与其交互。例如,如果您想从天气 API 获取数据,您可以向特定端点发送请求,例如 https://api.weather.com/v1/forecast。
  2. 请求和响应:

    • 请求:应用程序向 API 端点发送请求,指定它想要什么数据或操作。
    • 响应:API 发回响应,其中可以包含数据(通常采用 JSON 或 XML 格式)、状态代码和消息。
      • 状态代码示例:
      • 200 OK:请求成功。
      • 404 Not Found:端点不存在。
      • 500 内部服务器错误:存在服务器端问题。
  3. HTTP 方法:
    API 通常使用特定的 HTTP 方法进行请求,例如:

    • GET:检索数据。
    • POST:提交数据以创建或更新资源。
    • PUT:更新或替换资源。
    • DELETE:删除资源。
  4. API 密钥和身份验证:
    某些 API 要求用户在发出请求之前验证自己的身份。这是通过以下方式完成的:

    • API 密钥:用于验证用户或应用程序的唯一标识符。
    • OAuth:一种更高级的协议,允许用户通过第三方服务进行身份验证,而无需共享其凭据。
  5. 速率限制:
    许多 API 限制应用程序在特定时间范围内可以发出的请求数量。这是为了确保服务器不会因来自单一来源的过多请求而不堪重负。

  6. RESTful API
    具象状态传输 (REST) 是一种用于构建 API 的流行架构。 RESTful API 是无状态的,并使用标准 HTTP 方法。 REST 的关键原则包括:

    • 无状态性:从客户端到服务器的每个请求都必须包含理解和处理该请求所需的所有信息。
    • 统一接口:通过统一的URL结构访问资源。
    • 资源表示:资源通常使用 JSON 或 XML 等格式表示。
  7. SOAP API:
    SOAP(简单对象访问协议)是另一种用于构建 API 的协议,它更加结构化并包含标准化的消息传递系统。它更安全,非常适合安全性优先的应用程序(例如银行业务)。

API交互示例

假设您有一个天气应用程序,并且您想要获取纽约市的当前天气。 API 交互如下所示:

  1. 您的应用程序向 API 端点发送 GET 请求
   https://api.weather.com/v1/city/newyork
  1. 服务器处理请求并以 JSON 格式发回 响应
   {
     "city": "New York",
     "temperature": "15°C",
     "description": "Clear sky"
   }

您的应用现在可以向用户显示此信息。

API 类型

  1. Web API:这些是最常见的,用于通过 Web 与远程服务器交互,例如 REST 或 SOAP API。
  2. 操作系统 API:允许软件与操作系统交互的 API。
  3. 数据库 API:它们支持与数据库交互,允许应用程序读取或修改数据库中存储的数据。
  4. 库或框架API:这些是库或框架提供的API,允许开发人员重用代码,而无需重新发明轮子。

API 在现代软件开发中至关重要,它允许不同的服务和应用程序无缝协作。它们用于网络开发、移动应用程序、物联网设备等等。

版本声明 本文转载于:https://dev.to/kamlesh_gupta_539c974fb0d/understanding-apis-how-applications-communicate-30f9?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-20
  • 尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    解决 PHP 中的 POST 请求故障在提供的代码片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"检查 $_POST数组:表单提交后使用 var_dump 检查 $_POST 数...
    编程 发布于2024-11-20
  • 如何在 CSS 中定位父元素中类的第一次出现?
    如何在 CSS 中定位父元素中类的第一次出现?
    选择父级中某个类的第一次出现在 CSS 中,当您需要定位某个类的第一个元素时,就会出现挑战父元素中的特定类,尤其是当该类可能出现在其同级元素中的不同位置时。当父元素的类或子结构可能不同时,这个问题变得更加复杂。:first-of-type Pseudo-ClassCSS3 提供了 :first -o...
    编程 发布于2024-11-20
  • 为什么我的线程安全队列 Dequeue() 函数在为空时会导致分段错误?
    为什么我的线程安全队列 Dequeue() 函数在为空时会导致分段错误?
    C 11 线程安全队列:理解和调试您在线程安全队列实现中遇到分段错误dequeue() 函数,特别是当队列为空时。出现此异常的原因是您的等待条件 wait_for(lock, ti​​meout) 的结构不正确,无法处理虚假唤醒。了解虚假唤醒条件变量像 populatedNotifier 一样,可能...
    编程 发布于2024-11-20
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-11-20
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-20
  • 如何向内置 Python 类型添加自定义属性和方法?
    如何向内置 Python 类型添加自定义属性和方法?
    使用自定义属性和方法扩展内置 Python 类型在 Python 中,使用自定义方法或属性扩展内置类型,例如字典可能看起来是一个简单的请求。然而,Python 的设计本身并不支持此类修改。与 JavaScript 的原型继承机制不同,Python 的内置类型是静态且不可变的。替代方法:类子类化而直接...
    编程 发布于2024-11-20
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-20
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-20
  • JavaScript 中的 eval() 和 new Function() 真的可以互换吗?
    JavaScript 中的 eval() 和 new Function() 真的可以互换吗?
    深入探讨区别:JavaScript 中 eval() 和 new Function() 可以互换吗?在 JavaScript 中,我们经常遇到这样的函数eval() 和 new Function()。虽然它们的语法乍一看似乎很相似,但仔细检查就会发现它们的行为存在根本差异。考虑以下单语句函数:var...
    编程 发布于2024-11-20
  • 掌握如何在 JavaScript 中实现双向链表
    掌握如何在 JavaScript 中实现双向链表
    Hi ?, welcome back. It's been exactly 6 days since we started this journey together. I want to believe it has been an awesome experience. Yesterday, w...
    编程 发布于2024-11-20
  • 如何防止 Tomcat 7 中的 JDBC 数据源内存泄漏?
    如何防止 Tomcat 7 中的 JDBC 数据源内存泄漏?
    Tomcat 7 中的 JDBC 数据源内存泄漏使用 JDBC 数据源关闭 Tomcat 7 时,用户可能会遇到类似于以下内容的警告消息下面:SEVERE: The web application [/my_webapp] appears to have started a thread named...
    编程 发布于2024-11-20
  • 是否有工具可以识别大型 C++ 项目中不必要的 #include 文件?
    是否有工具可以识别大型 C++ 项目中不必要的 #include 文件?
    在大型 C 项目中发现不必要的 #include 文件在 Visual Studio 2008 中庞大的 C 项目中,无数文件包含多余的 #include 指令。有时,这些 #include 只是遗留物,允许在删除后进行编译。在其他情况下,可以提前声明类,从而允许将 #include 重新定位到 ....
    编程 发布于2024-11-20
  • 如何在 Go 中高效选择缓冲发送和非缓冲接收通道?
    如何在 Go 中高效选择缓冲发送和非缓冲接收通道?
    Go语言:同时选择缓冲和非缓冲通道当前的任务是实现缓冲发送通道和非缓冲通道的同时选择无缓冲接收通道,无需不断消耗CPU资源。这种情况相当于阻塞,直到通道准备好发送而不传输任何数据。为了解决这个问题,我们可以使用具有默认情况的 select 语句。当两个通道都没有准备好时,将触发默认情况,启动短暂的睡...
    编程 发布于2024-11-20
  • 如何仅使用 CSS 来放大图像以适合边界框?
    如何仅使用 CSS 来放大图像以适合边界框?
    仅使用 CSS 放大图像以适合边界框:所面临的挑战是放大图像以适合边界框,同时保持其纵横比。提供的CSS代码处理缩小,但不处理放大。CSS3解决方案:幸运的是,CSS3提供了一个解决方案:.bounding-box { background-image: url(...); backgrou...
    编程 发布于2024-11-20

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3