首页 > 其他分享 >API设计的8个技巧

API设计的8个技巧

时间:2024-08-24 11:53:23浏览次数:6  
标签:技巧 GET 请求 查询 API PUT 设计 DELETE

原文: 高效 API 设计的8个技巧 - 小红书 (xiaohongshu.com)

本文是笔者在该文章基础上加入自己理解以及一定的扩展,如有问题欢迎指出

1.贴合主要模型

在设计Restful API的路径结构时,我们可以参考系统中的模型及其附带关系。即使用模型的名称和逻辑来设计路径。

例如:

  • 有关订单的API可以是/order/**
  • 若是某个订单中详细信息则可以是/order/{id}/items

2.选择一个合适的Http请求类型

定义一些基本的,简单的HTTP方法可以简化API的设计。例如,PATCH等复杂不常见的请求类型通常会给团队带来不便。

最常见的几个请求类型: GET,POST,PUT,DELETE

  • GET: 一般用于查询请求
  • POST: 一般用于复杂的请求,类似创建,其他功能等
  • PUT: 一般用于更新请求
  • DELETE: 一般用于删除

3.正确实现幂等性

简单来说幂等性就是多次同样的操作和一次操作是否会有同样的结果。

常见于分布式系统、网络请求和API设计中,由于各种原因(如网络延迟、重试机制、请求重放等),请求可能会被多次发送,这时如果API没有实现幂等性,就可能导致数据不一致、重复处理等问题。

分布式锁也是用来解决相关问题。

  • GET请求: 天生就是幂等的,因为是查询,并不会对数据进行操作
  • PUT&DELETE请求: 应该被设计为幂等
    • PUT: 无论PUT请求被发送一次还是多次,资源的最终状态都应该是相同的。这意味着,如果资源已经处于请求所期望的状态,那么后续的PUT请求将不会改变资源的状态。可以理解为若原来数据和更新数据已经一致则会直接返回。
    • DELETE: 无论DELETE请求被发送一次还是多次,指定的资源都应该被删除,且系统状态不会因此而有额外的变化。同理,一旦资源被删除,后续的DELETE请求应该被视为已经成功(尽管它们可能返回一个指示资源已不存在的错误码)。
  • POST: 应根据业务逻辑具体而定

4.选择正确的请求状态码

定义一定数量的 HTTP 状态代码,用于简化应用程序开发。

常见的状态码网上都可以找到,就不再赘述。

5.版本号

提前设计应用程序接口的版本号可以简化升级工作。

例如:届时版本更新调用只需从/order/v1/变到/order/v2

一般从三个方面来设置版本号:

  • 路径中(推荐): GET /v1/users
  • 请求路径参数: GET /users?v1
  • 请求头: Header Version: v1

6.路径语义明确

尽量做到让使用者看到就能理解请求大致作用。

例如: /user/login是用户登录

Tip:

  • 尽量使用文件夹一样的格式而不是一个动词
  • 区分单数及双数

7.批量操作

涉及到批量操作,例如:查询,插入多条数据时,可以将其关键字插入到路径的尾部,使该请求作用更加明显。

POST请求: /users/batch批量操作用户

GET请求: /users?ID=1,2,3..批量查询用户

8.查询模板

一套查询的规则,能使API更加灵活。 例如,页数、排序、过滤等。

常见的设计:

  • 分页查询: 携带参数第几页page和一页的条数size
  • 排序查询: 携带排序字段sortField和排序规则sortOrder
  • 筛选查询: 携带筛选条件

标签:技巧,GET,请求,查询,API,PUT,设计,DELETE
From: https://blog.csdn.net/manfulshark/article/details/141497542

相关文章

  • 计算机毕业设计推荐-基于python的无人超市管理系统
    精彩专栏推荐订阅:在下方主页......
  • 如何申请 Midjourney API ,看这篇文章就够了
    MidjourneyImagineAPI申请及使用Midjourney是一款非常强大的AI绘图工具,只要输入关键字,就能在短短一两分钟生成十分精美的图像。Midjourney以其出色的绘图能力在业界独树一帜,如今,Midjourney早已在各个行业和领域广泛应用,其影响力愈发显著。本文档主要介绍Midjourn......
  • 折腾 Quickwit,Rust 编写的分布式搜索引擎(专为从对象存储中实现亚秒级搜索而设计)
    什么是Quickwit?Quickwit是首个能在云端存储上直接执行复杂的搜索与分析查询的引擎,并且具有亚秒级延迟。它借助Rust语言和分离计算与存储的架构设计,旨在实现资源高效利用、易于操作以及能够扩展到PB级数据量。Quickwit非常适合日志管理、分布式追踪以及通常为不可变数据......
  • 软件设计之MySQL(6)
    软件设计之MySQL(6)此篇应在JavaSE之后进行学习:路线图推荐:【Java学习路线-极速版】【Java架构师技术图谱】Navicat可以在软件管家下载``使用navicat连接mysql数据库创建数据库、表、转储sql文件,导入sql数据MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花......
  • 计算机毕业设计opencv+pytorch疲劳驾驶检测系统 自动驾驶 面部多信息特征融合的疲劳驾
    创新点:算法模型训练、可视化、深度学习框架、疲劳监测、模拟自动驾驶检测驾驶员疲劳核心算法:基于多信息特征指标融合建立驾驶员疲劳评价体系通过构建一种驾驶员面部多信息特征融合综合评价方法,为了能够将系统检测结果更直观的体现,研究了基于一种改进的粗糙集理论对各项特征结......
  • 计算机毕业设计hadoop+spark+hive漫画推荐系统 动漫视频推荐系统 漫画分析可视化大屏
    流程:1.DrissionPage+Selenium自动爬虫工具采集漫画视频、详情、标签等约200万条漫画数据存入mysql数据库;2.Mapreduce对采集的动漫数据进行数据清洗、拆分数据项等,转为.csv文件上传hadoop的hdfs集群;3.hive建库建表导入.csv动漫数据;4.一半指标使用hive_sql分析得出,一半指标使......
  • Java 12 新特性—新增 String API
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • 基于java教师课堂教学质量评价系统设计与实现
    课题背景高等学校的根本任务是培养人才,课堂教学是高校完成人才培养的重要环节,因此,教师教学质量的高低对学生掌握和运用知识的程度有着密不可分的作用,为了保证教师的教学质量,教学评价成为了各高校衡量教师教学质量的重要方式之一。目前,教师“听课”和学生“学期末教师课程评......
  • C++学习笔记----4、用C++进行程序设计(五)---- 非复合与继承关系
        在考虑类之间到底是什么关系时,要首先考虑一下是否真的有关系。不要搞有罪推定,直接问犯了什么罪,要先看是否是犯罪行为。不要让你对面向对象的设计的热情转变为大量不需要的类或者继承的类的关系中。    有一个大家都容易陷入的怪圈就是在现实世界中很明显......
  • 设计模式(三)
    结构型模式装饰器模式:动态的给一个对象增加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。优/缺点:装饰模式是继承关系的一个替代方案。装饰模式可以动态地扩展一个实现类的功能。缺点:多层的装饰还是比较复杂何时使用:需要扩展一个类的功能,或给一个类增加附加功......