API 设计技巧:基础知识与实践的方法

news2024/11/26 1:33:46

在这篇深入探讨中,我们将从基础开始,逐步介绍 API 设计,并探讨定义卓越API的最佳实践。

作为一名开发者,你可能已经熟悉了许多这些概念,但我将提供详细解释,以加深你的理解。

API 设计:电子商务示例

让我们考虑一个像 Shopify 这样的电子商务平台的 API,如果你不熟悉, Shopify 是一个知名的电子商务平台,允许企业建立在线商店。

在 API 设计中,我们关注的是定义 API 的 输入(比如新产品的产品详情)和 输出(比如查询产品时返回的信息)。

图片.png

这意味着我们关注的是接口,而非底层实现。

API 设计与 CRUD:

因此,重点主要在于定义如何向用户或与您的电子商务 API 交互的系统公开 CRUD 操作。

CRUD 代表创建 (Create),读取 (Read),更新 (Update),删除 (Delete)。这些是任何数据驱动应用程序的基本操作。

图片.png

例如,要添加新产品(创建),您需要向/api/products发送 POST 请求,其中产品详情包含在请求体中。

要检索产品(读取),您需要通过 GET 请求从/products获取数据。

对于更新产品信息(更新),我们使用 PUT 或 PATCH 请求到/products/:id,其中 id 是我们需要更新的产品的 id。

删除与更新类似;我们向/products/:id发送 DELETE 请求,其中 id 是我们需要删除的产品(删除)。

通讯协议和数据传输机制

另一部分是决定将使用的通讯协议,如 HTTP、WebSockets 等,以及数据传输机制:JSON、XML 或 Protocol Buffers。

这适用于 RESTful APIs,但我们也有 GraphQL 或 gRPC 范式。

API 范式

API 有不同的范式,每种范式都有自己的协议和标准。都可使用 Apifox 来调试。

REST(表现层状态转换)

优点: 无状态:客户端对服务器的每个请求都必须包含理解和完成请求所需的所有信息。使用标准 HTTP 方法(GET、POST、PUT、DELETE)。易于被不同客户端(浏览器、移动应用)使用。

缺点: 这可能导致数据的过度获取或获取不足——因为可能需要更多的终端来访问特定数据。

特点: 支持分页、过滤(limitoffset)和排序。使用 JSON 进行数据交换。

GraphQL

优点: 允许客户端请求他们确切需要的内容,避免过度和不足地获取数据。强类型、基于模式的查询。

缺点: 复杂查询可能会影响服务器性能。所有请求都作为 POST 请求发送。

特点: 通常即使在出错的情况下也响应 HTTP 200 状态码,错误详情在响应体中。

图片.png

gRPC(谷歌远程过程调用)

优点: 基于 HTTP/2,提供了如多路复用和服务器推送等高级功能。使用 Protocol Buffers,这是一种语言中立、平台中立、可扩展的结构化数据序列化方式。在带宽和资源方面效率高,特别适合微服务。

缺点: 与 JSON 相比可读性较差。需要 HTTP/2 支持。

特点: 支持数据流和双向通信。适用于服务器到服务器的通信。

图片.png

API 设计中的关系

在电子商务设置中,你可能会有像用户到订单订单到产品等关系。

图片.png

设计端点以反昘这些关系是重要的。例如,在此场景中,GET /users/{userId}/orders应该获取特定用户的订单。

查询、限制以及 GET 请求的幂等性

常见的查询还包括用于分页的limitoffset,或用于过滤特定日期范围内产品的startDateendDate。这允许用户检索特定的数据集,而不会一次向系统或用户提供过多信息。

图片.png

设计良好的 GET 请求是幂等的,意味着多次调用不会改变结果。

GET 请求绝不应更改数据。它们仅用于检索。

向后兼容性和版本控制:

修改端点时,保持向后兼容性很重要。这意味着确保变更不会破坏现有客户。

版本控制:引入版本(如/v2/products)是处理重大更改的常见做法。

图片.png

在 GraphQL 的情冀下,添加新字段(v2 字段)而不删除旧字段有助于在不破坏现有客户的情况下使 API 演进。

速率限制和 CORS

设置速率限制是另一个最佳实践。这用于控制用户在一定时间内可以进行的请求数量。这对于保持 API 的可靠性和可用性至关重要。它还可以防止 API 遭受 DDoS 击。

图片.png

通常的做法还包担设置 CORS 设置。跨源资源共享(CORS)设置对于网络安全很重要。它们控制哪些域可以访问您的 API,防止不必要的跨站点互动。

  • 源于:https://levelup.gitconnected.com/api-design-101-from-basics-to-best-practices-a0261cdf8886

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

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

相关文章

云上战场:ToDesk云电脑、青椒云、顺网云全面对决

前言 记得端午放假期间,我已经在旅游的路上了,老板突然发短信,让我给他画个图,我手上的战斗机已经是十年前的老古董了(平常一直用的公司电脑,也没想过要换),压根满足不了老板的任务要求,不得已&…

Linux_应用篇(20) 串口应用编程

本小节我们来学习 Linux 下串口应用编程,串口(UART)是一种非常常见的外设,串口在嵌入式开发领域当中一般作为一种调试手段,通过串口输出调试打印信息,或者通过串口发送指令给主机端进行处理;当然…

ES6(ECMAScript 6.0) 新特性

1 ES6 基本介绍 (1)ECMAScript 6.0(简称 ES6)是 JavaScript 语言的下一代标准, 2015 年 6 月发布。 (2)ES6 设计目标:达到 JavaScript 语言可以用来编写复杂的大型程序,成为企业级开发语言 &…

基于 Arm 虚拟硬件实现人脸特征提取模型的部署

基于 Arm 虚拟硬件实现人脸特征提取模型的部署 文章目录 1 实验背景1.1 Arm 虚拟硬件介绍1.2 文章简介 2 实验目标3 实验前准备3.1 订阅 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例3.2 克隆实验代码 4 实验步骤4.1 配置开发环境4.1.1 配置 CMSIS-Toolbox 环境4.1.2 配置 P…

Log4j2(CVE-2021-44228)远程代码执行漏洞

目录 介绍 log4j2介绍: JNDI介绍 LDAP介绍 RMI介绍 log4j2漏洞 漏洞复现 漏洞的(触发)流程 利用log4j2漏洞反弹shell 最近打算学习一下JAVA中几个经典的漏洞,这里还是参考别的师傅总结的好文章进行学习 JAVA的几个经典漏…

【价值主张画布】以产品思维,将自己打造成“爆款”

经营自己等于经营公司: 1.客户细分:我能帮助谁?谁是我们最重要的客户? 2. 客户关系:怎样和对方打交道?一次交付还是持续交付? 3.渠道通路:怎样宣传自己和服务? 4. 价值主…

请查收2024年小朋友的暑假计划日程表

2024年盛夏将至,孩子们的暑假即将拉开帷幕,是时候为他们精心策划一份丰富多彩的暑期日程表,让他们的假期充实而难忘! 具体时间规划 07:30-08:00 清晨准备 独立完成穿衣、如厕和洗漱 打开窗户通风 测量体温,关注健康…

少儿编程启蒙新篇章:Scratch引领图形化编程的奇妙之旅

随着信息技术的飞速发展,编程教育已不再是专业领域的专属,而是逐渐走进千家万户,成为孩子们成长过程中不可或缺的一部分。特别是在少儿编程领域,图形化编程工具如Scratch的普及,为孩子们打开了编程启蒙的大门&#xff…

Vulnhub——AI: WEB: 2

渗透复现 (1)平台框架存在目录穿越漏洞,利用该漏洞读取敏感信息 (2)Ping功能点绕过,进行命令执行操作,反弹shell无果后,利用目录穿越漏洞遍历敏感API,读取到用户SSH登录…

第三方仓库WMS仓储管理系统智能库存预警解决方案

在当今竞争激烈的物流市场中,第三方仓库扮演着连接供应链各环节的关键角色。面对不断变化的客户需求和日益严格的市场要求,如何提升仓库管理水平、优化库存结构、降低运营成本,成为了第三方仓库管理者必须面对的重要课题。在这一背景下&#…

pdfFactory虚拟打印机软件下载-pdfFactory虚拟打印机官方最新版下载附加详细安装步骤

pdffactory是一款办公软件,帮助用户更好的进行文件处理,轻松查询使用,不用担心故障的问题,而且打印速度快,效率高,保障用户日常打印轻松。 安 装 包 获 取 地 址: FinePrint-安装包 &#xff1…

006 spring事务支持

文章目录 事务回顾事务介绍事务并发问题(隔离性导致)事务隔离级别 Spring框架事务管理相关接口Spring框架事务管理的分类编程式事务管理(了解)声明式事务管理(重点) 事务管理之XML方式业务层持久层单元测试代码配置事务管理的AOP 事务管理之混合方式事务管理之基于AspectJ的纯注…

前沿技术丨实车测试必须注意的3个方面

在汽车网络通信中,ECU零部件测试、域/系统测试在测试条件上存在局限性,往往由于无法完全仿真工作环境、无法排除特殊干扰因素、异常场景预估不充分,导致在集成到整车后才新暴露出一些功能、性能、兼容性问题。 实车通信测试是作为测试验证的…

【数据分析】线性及逻辑回归模型和Python实现

各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

FUANC机器人教程:速度倍率级数与倍率增量设定方法

目录 机器人速度倍率介绍 机器人运行速度倍率切换操作 快速切换速度倍率有效与无效设定 速度倍率级数与增量自定义 速度倍率级数与增量自定义举例 机器人速度倍率介绍 在机器人手动或自动运行时都离不开速度设定,机器人的运行速度由多个要素共同决定&#xff…

【毕业设计】Django 校园二手交易平台(有源码+mysql数据)

此项目有完整实现源码,有需要请联系博主 Django 校园二手交易平台开发项目 项目选择动机 本项目旨在开发一个基于Django的校园二手交易平台,为大学生提供一个安全便捷的二手物品买卖平台。该平台将提供用户注册和认证、物品发布和搜索、交易信息管理等…

如何使用Vue3和ApexCharts创建交互式热力图?

本文由ScriptEcho平台提供技术支持 项目地址:传送门 热力图:可视化数据分布 应用场景介绍 热力图是一种数据可视化技术,它使用颜色来表示数据点的值。热力图常用于可视化分布数据,例如人口密度、温度变化或网站流量。 代码基…

视频太长了,想要剪切掉一节怎么操作?

如果你想为你的视频制作一个具有一定客观性的短视频,并在一些平台上发布,那么剪辑视频片段是不可避免的。通过剪辑视频片段的操作,提出视频中多余的视频内容,将自己需要的内容单独提取出来。但问题是如何操作它。对于新手来说&…

【分布式事务】分布式事务其他解决方案——2PC

目录 2PC解释例子分析回到IT系统中 XA 方案执行流程DTP 模型交互模式 总结 2PC 解释 2PC 即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),…

探索AgentUniverse:蚂蚁集团发布的多体Agent构建工厂

在迅速发展的AI领域,多体智能系统因其通过协调工作处理复杂任务的能力而受到广泛关注。最近,蚂蚁集团发布了一款名为AgentUniverse的开源框架,旨在构建各种智能体,包括法律咨询智能体、事件解读智能体、行业分析智能体和财报生成智…