应用程序编程接口 (API) — 简单解释

news2024/9/23 15:33:53

Nimrita Koul 博士
https://medium.com/@nimritakoul01/application-programming-interface-api-simply-explained-3680d4649121

文章目录

  • 一、说明
  • 二、API 的类型
  • 二、示例健身应用程序
  • 三、可乐自动售货机
  • 四、客户端和服务器
  • 五、超文本传输协议 (HTTP)
    • 5.1 端点
    • 5.2 API 调用
    • 5.3 HTTP 标头
    • 5.4 有效载荷
    • 5.6 常见 API 状态代码
    • 5.8 设计 API 的最佳实践

在这里插入图片描述

  • 图 1:客户端使用其 API 与服务器交互。应用程序编程接口是应用程序的编程接口 应用程序编程接口 (API)

一、说明

API是应用程序在以编程方式与其他应用程序交互时需要遵循的一组规则。API 代表应用程序编程接口。在 API 上下文中,“应用程序”一词指的是具有独特功能的任何软件。接口可以被认为是两个应用程序之间的服务契约。该合约定义了两者如何使用请求和响应相互通信。

二、API 的类型

允许硬件与软件交互的硬件 API,例如,手机的相机与操作系统交互。

软件 API,允许您从现有软件包或库中调用方法。

允许您通过 Internet 从远程计算机访问资源(数据)或服务(功能)的 Web API。

您可以拥有私有、公共或合作伙伴 API。公共 API 可供任何人使用,合作伙伴 API 仅可供受信任方使用,私有 API 仅限于内部使用。

在本教程中,我们将重点介绍公共 Web API。

二、示例健身应用程序

假设您正在构建一个健身应用程序,并希望显示一张地图,其中突出显示了城市中的所有公园,以便客户可以在其中慢跑。现在,您可以从头开始在您的应用程序中开发此功能,但这不是您应用程序的核心功能,Google 地图专注于此类功能。因此,您将请求 Google 地图应用程序为您提供有关客户城市中公园位置的数据及其创建突出显示这些位置的地图的功能。这样,您就可以专注于健身应用程序的核心功能,同时仍然为您的客户提供额外的功能。

要成功请求 Google Maps 获取所需的数据和所需的功能,您的应用程序必须以 Google Maps API 要求它遵循的特定格式(API 规范)构建请求。

这很像在编程语言中调用函数。您需要根据函数定义的原型构建函数调用,否则会出现错误。

三、可乐自动售货机

有时,自动售货机的类比会有所帮助:

图片来源学分:https://coin-a-drink.co.uk/blog/merchant-media/
自动售货机是一个复杂的系统,具有许多内部系统和细节。为了让客户轻松使用它,它有一个简单的用户界面,带有按钮和一个显示屏,允许客户查看可用物品、选择他们想要的东西、付款、取回零钱和产品。

要成功地将产品从机器中取出,您需要以正确的顺序遵循一组正确的步骤。

这个简单的外部界面使客户能够专注于他们需要的自动售货机产品,而不必担心不必要的细节,它允许自动售货机制造商对客户保密他们的内部细节。

Amazon.com

我们都用过 amazon.com。它的核心功能是为您提供多种产品和选择,让您浏览和选择您想要的产品,将它们放入购物车并购买。为了管理支付部分,amazon.com 使用 PayPal 或 UPI 等第三方的功能,如 Google Pay、PayTM。amazon.com 调用这些支付公司的 API,客户在其中输入他们的身份验证信息、付款并被重定向到 amazon.com 以完成购买和跟踪或订单。

四、客户端和服务器

需要服务 (功能) 或资源 (数据) 的应用程序 (例如,浏览器、python 程序等) 称为客户端。提供所需服务或资源的另一个应用程序称为服务器。(见图 1)。例如,您使用 Google Chrome 客户端访问 amazon.com 提供的服务。

要访问服务或资源,客户端需要按照 API 指定的格式构造请求,并使用 HTTP 等协议将其发送到服务器。服务器根据 API 规范以响应进行响应。

五、超文本传输协议 (HTTP)

处理从客户端到服务器的请求以及通过 WEB 将包含资源表示形式从服务器传输到客户端的响应的协议是 HTTP(超文本传输协议)。因此,HTTP 是一种请求-响应协议。

API 告诉客户端如何形成其请求,以及当它向服务器的端点发出特定请求/调用时会发生什么类型的响应。

5.1 端点

Endpoint 使用一个公开的 uri(统一资源指示器),服务器在该 uri 上公开它提供的资源。

要访问这些资源,客户端必须将其请求定向到此终端节点。

5.2 API 调用

API 调用是从客户端到服务器的 API 端点的请求。

HTTP 为客户端和服务器交互提供了以下方法:

GET — 当客户端想要从服务器读取资源时,它使用 GET 请求。GET 方法是幂等的,即它可以被多次调用,它是安全的(不会删除或更改服务器的内容),它是可缓存的(GET 方法的响应可以由客户端和服务器之间的中间设备缓存,如代理、网关)
POST — POST 方法可以在服务器上创建新资源。PUT 方法请求将包含的实体存储在提供的 Request-URI 下。如果请求 URI 引用已存在的资源,则应将包含的实体视为驻留在源服务器上的实体的修改版本。如果请求 URI 不指向现有资源,并且该 URI 能够由请求用户代理定义为新资源,则源服务器可以使用该 URI (RFC5789) 创建资源。
PUT - 更新资源。它是幂等的。不安全或不可缓存。
PATCH - PUT 的轻量级选项,用于将部分修改应用于资源。PATCH 方法请求将请求实体中描述的一组更改应用于由 Request-URI(统一资源标识符)标识的资源。它不是幂等的。
DELETE- 删除资源,不安全或可缓存。

5.3 HTTP 标头

标头是 HTTP 请求和 HTTP 响应中的附加信息。这些标头可能包含客户端的身份验证凭据、内容类型、响应可以缓存多长时间等信息。如果 HTTP 标头中的控制数据允许压缩信号,则可以在将响应发送到 clinet 之前对其进行 GZIP 压缩。

5.4 有效载荷

Payload 是客户端请求的 HTTP 响应的一部分。它包含所请求资源的表示形式。

突出的 API 架构

  • REST(再现状态传输)(RESTful API)
  • GraphQL-
    WebSockets
  • webhook-
    SOAP(简单对象访问协议)
  • gRPC(Google 远程过程调用)
  • MQTT(MQ 遥测传输)

RESTful API
今天,大多数 Web API 都是 RESTful API。这意味着它们遵循 REST (REpresentational State Transfer) 原则。它是一种无状态架构,使用 HTTP 方法执行 CRUD(创建、读取、更新、删除)操作。它是 Web 应用程序最常用的 API 架构。

API 需要遵循以下 REST 原则才能被归类为 RESTful API:

它必须处理文档、图像、视频、URL 等资源。
服务器返回的响应将包含以预定格式(如 JSON、XML、HTML 等)表示请求的资源。应用程序状态和功能将被定向到具有唯一标识符 (URI) 的资源中,这些标识符也可用于超媒体链接。
除了以上两条规则外,RESTful API 还需要遵守以下 6 个约束:
从客户端到服务器的请求将使用标准 HTTP 方法(GET、POST、PUT、PATCH、DELETE)进行
请求是无状态的,每个请求都必须有足够的信息供服务器处理请求。无状态允许通过不同的网关和代理路由请求,从而避免引入瓶颈并允许根据需要添加更多中介。
API 遵循客户端-服务器架构(无对等节点)
来自服务器的响应是可缓存的。缓存通过提供来自缓存内容的响应来减少发送到服务器的实际请求数,从而缩短了响应时间并提高了可扩展性。
API 遵循分层系统。客户端和服务器之间的连接有许多 HTTP 中介,如路由器、调制解调器、代理和网关。这些中介可以在 request — response path 的不同点添加,而无需更改组件之间的接口,它们可以在这些接口中执行传递消息的操作(例如缓存它们或翻译它们)。使用网关允许根据方法、URI、内容类型或来自请求的任何其他标头在大量服务器之间分配流量。
API 允许按需编写代码。也就是说,服务器能够将代码加载到客户端并在客户端执行它。Code on Demand 允许将计算移动到更靠近客户端或更靠近服务器的位置,具体取决于可以最快完成工作的位置。
XML-RPC 和 ATOM 发布协议是 RESTful API 的示例。

GraphQL 中:是 API 的一种查询语言,通过允许客户端请求特定数据来提供灵活性。

WebSockets 的 URL:是一个 API,可在通信各方之间提供全双工通信通道,从而在客户端和服务器之间实现实时数据交换

Webhook (网络钩子):服务器向客户端应用程序发送的通知,由特定事件触发。

SOAP (Simple Object Access Protocol) (简单对象访问协议):用于结构化数据交换的基于 XML 的协议,通常用于企业环境。

gRPC 中:使用 Protocol Buffers 实现高效数据序列化的高性能、与语言无关的框架。

MQTT(MQ 遥测传输):适用于 IoT 设备和受限环境的轻量级发布-订阅协议。

API 文档
API 文档规定了 API 的使用规则。它包含有关 API 的以下信息:

  1. 身份验证说明 — 如何连接 API
    2.API 端点
    3.终端节点
    的可用资源 4.API
    5 的 HTTP 请求格式。API 服务器返回
    的 HTTP 响应的响应格式 6.响应中包含的响应代码。

5.6 常见 API 状态代码

对于客户端发送到 Web 服务器的每个请求,它都会收到一个状态代码,指示请求发生的情况。与 GET 请求相关的一些常见代码包括:

200:一切正常,结果(如果有)已返回。
301:服务器正在将您重定向到其他终端节点。
400:一个错误的请求。这是客户端错误。即,您可能发送了不正确的数据或错误地调用了 API。
401:身份验证错误。您可能未在对 API 的请求中包含您的登录凭证(如果 API 要求)
403:禁止使用的资源。您无权查看资源。
404:在服务器上的指定位置找不到资源。
503:服务器尚未准备好处理请求。
使用 Python 调用 Web API
您可以使用 Python 请求库进行 API 调用并接收来自服务器的响应。在下面的代码中,我使用 requests 库向 Google Books API 发送 API 调用,以获取与“Python 编程”主题相关的 Google Books 列表。您将需要安装 requests 库。Google Books API 是免费的。

!pip install requests

import requests

def search_books(query):
    """Searches for books based on a query."""
    url = f"https://www.googleapis.com/books/v1/volumes?q={query}"
    response = requests.get(url)
    return response.json()

# Example usage
query = "python programming"
results = search_books(query)

# Print the titles of the first few books
for item in results['items']:
    print(item['volumeInfo']['title'])

Output:
Python Programming
Introduction to Python Programming
Learning Python
Taming PYTHON By Programming
Bite-Size Python
LEARN PYTHON WITH 200 PROGRAMS
Python for Kids, 2nd Edition
Python Programming For Beginners
An Introduction to Python Programming: A Practical Approach
Python Tutorial
  • Postman邮差

Postman 是一个平台,用于构建您自己的 API 并轻松使用其他人提供的 API。

  • cURL

cURL 是一个命令行工具和库,用于使用 URL 传输数据,即向服务器发出 HTTP 请求和接收响应。

5.8 设计 API 的最佳实践

设计:在 API 设计中优先考虑简单性、一致性和可理解性。
文档:全面、清晰和最新的文档对于 API 的成功至关重要。
版本控制:实施明确的版本控制策略来管理 API 更改,而不会中断现有客户端。
错误处理:提供信息丰富的错误消息以及明确的解决方法指导。
安全:使用适当的身份验证和授权机制保护 API 端点。
性能:优化 API 响应以提高速度和效率,以增强用户体验。
速率限制:实施速率限制以防止滥用并确保公平使用。
缓存:利用缓存提高性能并减少服务器负载。
测试:在部署之前严格测试 API 以识别和修复问题。
监测:持续监控 API 性能和使用情况,以进行优化和故障排除。
开发人员体验:专注于通过出色的文档、支持和工具创造积极的开发人员体验。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

逆向中的游戏-入土为安的第二十五天

逆向中的游戏 CE的介绍 Cheat Engine ,简称CE,是逆向工程师常用的几大神器之一,也是游戏汉化、破解以及外挂编写中常用的工具,其功能包括:内存扫描、十六进制编辑器、调试工具,可以进行反汇编调试、断点跟…

FaceChain 打造个人证件照 职业照 写真照

一、简介 FaceChain可实现兼具可控性与ID保持能力的无限风格写真与固定模板写真功能,同时对ControlNet和LoRA具有优秀的兼容能力。FaceChain支持在gradio的界面中使用模型训练和推理能力、支持资深开发者使用python脚本进行训练推理,也支持在sd webui中安…

【精选】基于springboot休闲娱乐代理售票系统(源码+定制+开发辅导)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

进销存专业化管理系统,降低采购和销售成本 带完整的安装代码包以及搭建部署教程

系统概述 在当今竞争激烈的市场环境中,企业的运营效率与成本控制直接关联到其生存与发展。特别是对于中小企业而言,如何高效地管理进销存流程,减少不必要的开支,成为了提升竞争力的关键。为此,我们精心打造了一款“进…

推荐一个能在博客中运行代码的平台

博客中粘贴代码,这是很常见的做法了。如果我们博客中的代码可以直接运行,是不是很酷呢? 来看看: https://andi.cn/page/621698.html 推荐一个平台,有以下功能: 博客中的代码可以直接运行、一键复制可以…

【Resoved】编译 OpenCV 4.5.5 源码,fatal error: mpi.h: No such file or directory

0. 背景 Ubuntu20.04 OpenCV 4.5.5 Anaconda ROS2 foxy 等 1. 问题描述 编译 OpenCV4.5.5源码,make -j10 时,报错: 2. 问题分析 这个错误表明在编译 OpenCV 的 HDF5 模块时,尽管你在 CMake 中指定了 MPI 的路径,但编译器仍然无法找到 mpi.h 文件。或者 HDF5 没有正确地…

【STM32】MDK安装

1 MDK 历史背景 Keil公司是一家业界领先的微控制器(MCU)软件开发工具的独立供应商。Keil公司由两家私人公司联合运营,分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的Keil Software Inc。Keil公司制造和销售种类广泛的开发工具&am…

神经网络动画讲解 - 构建灵活可调节参数

神经网络核心思想 神经网络核心思想:(1)机器学习、深度学习是一种方法论 机器学习: 核心思想是使计算机系统能够从经验(通常是大量数据)中学习和改进,以优化性能并做出准确的预测或决策&#…

827 leetcode +网络

01背包问题的衍生题目: 对于01背包问题,只需要明白四件事,1重量是啥,2value是啥,3优化目标是啥,4约束目标是啥。 这个题目里面重量是:0,1,4,9,16。。。。 value:1,1,1&…

72 华为资源库

1 报文格式 https://info.support.huawei.com/info-finder/tool/zh/enterprise/packetformat 2 华为IP网络电子书 资源可以下载 https://e.huawei.com/cn/topic/enterprise-network/ip-ebook 3 华为产品文档 https://support.huawei.com/enterprise/zh/doc/index.html 4 华为…

访问者模式详解

访问者模式 简介: 类的内部结构不变的情况下,不同的访问者访问这个对象都会呈现出不同的处理方式。 人话: 其实就是为了解决类结构不变但操作处理逻辑易变的问题,把对数据的操作都封装到访问者类中, 我们只需要调用不同的访问者,…

前端算法 === 力扣 111 二叉树的最小深度

目录 问题描述 DFS(深度优先搜索)方案 BFS(广度优先搜索)方案 总结 力扣(LeetCode)上的题目111是关于二叉树的最小深度问题。这个问题可以通过深度优先搜索(DFS)和广度优先搜索&…

Start OpenAI gym on arbitrary initial state

题意:“在任意初始状态下启动 OpenAI Gym” 问题背景: Anybody knows any OpenAI Gym environments where we can set the initial state of the game? For example, I found the MountainCarContinuous-v0 can do such thing so that we can select a…

游戏+AI

我们来聊聊AI【作者声明,个人观点,欢迎友好讨论】 我想这也是很多目前为止很多投资者对于AI举旗不定,不敢投资,业内游戏行业目前正式商用产品也是寥寥无几。 AI全称Artificial Intelligence,中文译名人工智能。人类从工…

信息打点-Web架构篇域名语言中间件数据库系统源码获取

知识点: 1、打点-Web架构-语言&中间件&数据库&系统等 2、打点-Web源码-CMS开源&闭源售卖&自主研发等 CMS:网站程序源码是可以通过搜索引擎搜索到并且下载的; 闭源售卖:不是一个开源的,要么从内…

【网络安全】分析重置密码功能实现账户接管

未经许可,不得转载。 文章目录 正文正文 目标为“target.com”,我执行了一些正常操作,比如创建或删除某些内容来保存 API 请求,然后检查是否存在任何 idor 或访问控制错误。然而,我没发现漏洞。 接着,我读取 JavaScript 文件来检查是否存在任何敏感信息,但一无所获。 …

浅谈 @Transtational 原理 及其失效场景(1)

上篇讲述了 当Transtctional遇到Async遇碰撞出怎样的火花? 本篇则主要从Transtational出发仔细谈谈。 一、调用场景复现,代码层面什么情况会失效? 1)同类操作:事物A调取非事物B,A报错/B报错(事…

流体力学解迷宫

诶,我手机呢?我手机放哪了?我手机是不是落餐厅了?会议室?厕所? 最近脑子有点不好使,可能需要练一练……解解迷宫吧 怕脑子吃不消,从简单的开始,不错,轻松拿…

EEtrade:黄金首饰是不是越软越好

黄金一直以来都是人们喜爱的贵金属之一。许多人在购买黄金首饰时,常常会关注黄金的纯度和硬度。那么,黄金首饰是不是越软越好呢?本文将详细探讨这个问题,并分析黄金首饰的硬度与其使用和美观性的关系。 黄金的纯度与硬度 黄金纯度 黄金的…

Linux系列之基础篇

文章目录 开篇明义基础篇实际操作篇高级篇Linux之JavaEELinux在哪些地方使用Linux应用领域 Linux入门基本介绍Linux和Unix关系 VM和Linux的安装基本说明安装VM17.5安装Centos7.6网络连接解释 虚拟机克隆虚拟机快照虚拟机迁移和删除安装vmtools设置共享文件夹 Linux目录结构 开篇…