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

在这篇深入探讨中,我们将从基础开始,逐步介绍 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图纸管理最佳实践:从混乱到有序的转变

图纸管理最佳实践:从混乱到有序的转变 在工程项目中,图纸是不可或缺的重要资料,它们承载着设计者的智慧与心血。然而,随着项目的推进和时间的推移,图纸管理往往变得混乱不堪,给项目的顺利进行带来诸多不便。…

ROS(四)

write in advance 实验四,在经历了实验三的失败后,卷土重来。 幸运的是,此次实验很简单,很快就能搞定。 Part one 使用指令查看自己摄像头的设备号,如果报错,且你为虚拟机,可能是未在虚拟机处…

Java学习 (二)关键字、标识符、数组

一、关键字 我们第一章案例中有很多关键字,比如class、public、static、void等,这些关键字依旧被java定义好了,可以拿来用,不需要死记硬背,按照官方文档查询即可 #官方文档 https://docs.oracle.com/javase/tutorial/j…

docker-compose设置永久启动、自动重启

步骤一 找到 docker-compose.yml 文件 步骤二 vim 打开文件 找到 image: PS:就是为了对齐格式 步骤三 在其下方添加: restart: always而后保存即可

打开nginx连接的php页面报错502

目录 问题描述: 原因: 1. 使用 Unix 域套接字(Unix Socket) 区别和优势: 2. 使用 TCP/IP 套接字 区别和优势: 如何选择 扩展:Rocky_Linux9.4安装PHP的步骤: 使用Remi存储库…

Wifi通信协议:WEP,WPA,WPA2,WPA3,WPS

前言 无线安全性是保护互联网安全的重要因素。连接到安全性低的无线网络可能会带来安全风险,包括数据泄露、账号被盗以及恶意软件的安装。因此,利用合适的Wi-Fi安全措施是非常重要的,了解WEP、WPA、WPA2和WPA3等各种无线加密标准的区别也是至…

通过防抖动代码解决ResizeObserver loop completed with undelivered notifications.

通过防抖动代码解决ResizeObserver loop completed with undelivered notifications. 一、报错内容二、解决方案解释: 一、报错内容 我通过el-tabs下的el-tab-pane切换到el-table出现的报错,大致是渲染宽度出现了问题 二、解决方案 扩展原生的 Resiz…

Android 应用加固与重签名—使用AndroidStudio自带工具 apksigner

由 AndroidStudio 生成的release版本的app有自己的签名,但当应用加固后会删除原签名,需要重新签名。 一、加固方式: 使用基础版的腾讯云(乐固)进行免费加固,上传软件后等待在线加固完成后下载 apk 即可。…

vue3+ts+vite集成eslint

项目中安装eslint yarn add eslint -Deslint初始化 npx eslint --init按照下方操作即可 安装typescript-eslint/parser yarn add typescript-eslint/parser -D安装vite-plugin-eslint2 yarn add vite-plugin-eslint2 -D配置vite-plugin-eslint2 // vite.config.ts import …

钡铼技术BL104在环境监测站多协议采集保障数据全面准确

随着工业化和城市化进程的加快,环境污染问题日益严重,环境监测站在保护生态环境、保障公众健康中的作用变得越来越重要。钡铼技术PLC物联网关BL104,为环境监测站提供了一种高效、可靠的多协议数据采集解决方案,保障了监测数据的全…

如何实现对文件发送全生命周期的外发管理?

在日常工作中,我们需要经常和企业外部的机构或者个人,发送一些企业内部的文档或者图纸等资料。但企业在文件外发管理上,仍存在一定漏洞,有些员工会通过一些手段,将重要核心文件数据发过去,包括但不仅限于以…

【数据结构(邓俊辉)学习笔记】二叉搜索树02——查找、插入和删除

文章目录 1.概述2. 查找2.1 查找:算法2.2 查找:理解2.3 查找:实现2.4 查找:语义 3. 插入3.1 插入:算法3.2 插入:实现 4. 删除4.1 删除:框架4.2 删除:单分支4.3 删除:双分…

MySQL----redo log重做日志原理及流程

重做日志 redo log:重做日志,用于记录事务操作的变化,确保事务的持久性。redo log是在事务开始后就开始记录,不管事务是否提交都会记录下来,在异常发生时(如数据持久化过程中掉电),…

笔记-python里面的xlrd模块详解

那我就一下面积个问题对xlrd模块进行学习一下: 1.什么是xlrd模块? 2.为什么使用xlrd模块? 3.怎样使用xlrd模块? 1.什么是xlrd模块? ♦python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel&…

成都百洲文化传媒有限公司助力商家扬帆远航

在数字经济的浪潮中,电商行业如日中天,成都百洲文化传媒有限公司正是这一领域的佼佼者。作为一家专注于电商服务的传媒公司,百洲文化以其专业的服务、创新的理念和卓越的成果,在业内树立了良好的口碑,成为众多商家信赖…

大数据实训室建设可行性报告

一、建设大数据实训室的背景与意义 随着信息技术的飞速发展,大数据已成为推动社会进步和经济发展的重要力量。中高职院校作为技能型人才培养的摇篮,承担着为社会输送大数据领域高素质、高技能人才的重要任务。因此,建设大数据实训室&#xf…

OKR:2024年目标和关键成果常见问题

什么是目标和关键结果(OKR)? 目标和关键结果(#OKR#)是一种由结果驱动的目标制定方法。在企业中,OKR经常被用来指导基于结果的成功。使用结果而不是任务作为驱动力,OKRs 鼓励通过度量指标对实现成…

Android 查询及获取应用程序 Package 及 Acticity 名称的方法

一、通过命令查询和获取应用的Package及Acticity (一)通过命令查询应用包名及安装信息 以下是常用命令: 命令形式作用adb shell pm list packages查询系统中所有应用的包名adb shell pm list packages -s查询系统应用包名adb shell pm lis…

onnx进阶算子优化

一、定义 如何保证pytorch 模型顺利转为onnx. 前言pytorch 算子是如何与onnx 算子对齐的?Asinh 算子出现于第 9 个 ONNX 算子集。PyTorch 在 9 号版本的符号表文件中是怎样支持这个算子的?BitShift 算子出现于第11个 ONNX 算子集。PyTorch 在 11 号版本…

Harbor本地仓库搭建004_Harbor配置管理功能_分布式分发功能_仓库管理_用户管理_垃圾清理_审查服务_项目定额---分布式云原生部署架构搭建00

然后我们再看一下配置管理,这里主要有个认证模式 这里我们是数据库,其实就是我们安装的postgresql 可以看到还有LDAP对吧,这个其实就是自己公司如果有 LDAP服务器,那么可以对接过来,那么,这个时候 再登录harbor的时候,就可以直接使用公司的,LDAP来管理,所有的用户了,其实就是…