web API设计笔记

Hello , 我是小恒。今晚就讲讲我在开发维护API后的经验分享,当然我知识有限,暂时也不会写实际操作。GitHub项目仓库有一堆还在前期开发,我的时间很多时间投在了开源上。

推荐书籍

我认为一个好的 API 设计是面向用户的,充分隐藏底层复杂原理。我们就要设计出让用户容易理解和容易使用的 API。
在这里插入图片描述

开发

设计 API 规范有两个方向Design-First(设计优先) 和 Code-First(代码优先)
具体不多说,参考文档https://www.codetd.com/article/11758845

资源路径设计

1)使用有意义的URL,多使用复数名词而非动词。使用小写字母,不出现下划线(比如add_books),具有唯一性的资源采用以ID作为资源标识。
2)使用层次结构以表示资源之间的关系。例如使用/users/{userId}/orders表示属于特定用户的订单。
3)使用HTTP方法表示操作,例如使用GET获取资源,使用POST创建资源,使用PUT更新资源,使用DELETE删除资源。
4)避免在路径中使用查询参数,而是将它们用于过滤、排序和分页等操作。例如,使用/users?page=1&per_page=10而不是/users/page/1/per_page/10

数据格式

1)响应格式统一使用JSON作为数据交换格式,易于解析跨语言兼容
2) 响应结构应包含状态码、数据体和可选的元数据等
3) 嵌套外键关系
序列化的外键关系通常建立在一个有嵌套关系的对象之上, 例如.:

{"name": "service-production","owner": {"id": "5d8201b0..."},
}

这种方式尽可能的把相关联的资源信息内联在一起,而不用改变响应资源的结构,或者展示更高一级的响应区域,
4)提供标准的时间戳。提供默认的资源创建时间和更新时间

异常处理

1)构建错误信息
在网络请求响应错误的时候,返回统一结构化的错误信息。要包含一个机器可读错误 code,人类可读的错误信息 message, 根据情况可以添加一个url 告诉客户端关于这个错误的更多信息以及如何去解决它

接口鉴权

这个不说了

接口维护

1)在URL中包含版本号,如/v1/users,便于管理和升级,同时保证向后兼容
2)描述API的稳定性或是它在各种各样节点环境中的完备性和稳定性

接口文档

提供详尽的API文档,说明每个端点的功能、请求参数、响应格式及示例代码
使用OpenAPI(Swagger)或Postman Collection来标准化和自动化文档生成,在springboot,django或fastapi使用Swagger可以自动生成接口文档

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

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

相关文章

深入探索Android应用数据共享之ContentProvider

本文将深入探讨Android开发中非常重要的数据共享机制 - ContentProvider。 主要内容包括: ContentProvider的基本定义及特点如何实现一个自定义的ContentProviderContentProvider对外提供的功能以及对外部应用的权限控制对ContentProvider的一些常见使用场景使用ContentProvi…

OpenGL入门第一步:创建窗口、重写虚函数

1、创建一个QOpenGLWidget 子类 2、重写虚函数 initializeGL:设置OpenGL资源和状态。在第一次调用resizeGL()或paintGL()之前被调用一次。 resizeGL :窗口尺寸变化时调用。 paintGL: 窗口更新时调用,渲染 OpenGL 场景。 makeCu…

最详尽的网络安全学习路线!涵盖所有技能点,带你成为网安专家!

目录 零基础小白,到就业!入门到入土的网安学习路线! 建议的学习顺序: 一、夯实一下基础,梳理和复习 二、HTML与JAVASCRIPT(了解一下语法即可,要求不高) 三、PHP入门 四、MYSQL…

Marin说PCB之国产电源芯片方案 ---STC2620Q

随着小米加入的造车大家庭,让这个本来就卷的要死的造车大家庭更加卷了。随之带来的蝴蝶效应就是江湖上各个造成门派都开始了降本方案的浪潮啊,开始打响价格战了。各家的新能源车企也是不得不开始启动了降本方案的计划了,为了应对降价的浪潮。…

CountDownLatch、CyclicBarrier 和 Semaphore

文章目录 一、CountDownLatch1、实现原理2、使用场景3、代码 二、CyclicBarrier1、实现原理2、使用场景3、代码4、CountDownLatch与CyclicBarrier区别 三、Semaphore1、实现原理2、使用场景3、代码 四、总结 一、CountDownLatch CountDownLatch计数器 1、实现原理 主要基于计…

Window7镜像注入USB驱动,解决系统安装后无法识别USB

Window7镜像注入usb驱动 Window7镜像注入usb驱动方法一方法二 Window7镜像注入usb驱动 一般4代酷睿之后的主机需要安装usb驱动才能驱动usb,导致很多Windows原版镜像安装后无法识别usb键盘 方法一 1.直接采购PS2 接口键盘、PS2 接口鼠标 方法二 使用联想镜像注入…

李飞飞团队 AI4S 最新洞察:16 项创新技术汇总,覆盖生物/材料/医疗/问诊……

不久前,斯坦福大学 Human-Center Artificial Intelligence (HAI) 研究中心重磅发布了《2024年人工智能指数报告》。 作为斯坦福 HAI 的第七部力作,这份报告长达 502 页,全面追踪了 2023 年全球人工智能的发展趋势。相比往年,扩大了…

AOF持久化是怎么实现的?

AOF持久化是怎么实现的? AOF 日志三种写回策略AOF 重写机制AOF 后台重写总结参考资料 AOF 日志 试想一下,如果 Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这…

微信小程序开发秘籍:掌握数据缓存与离线存储的艺术

微信小程序开发秘籍:掌握数据缓存与离线存储的艺术 基本概念数据缓存离线存储 技术要点与实战1. 使用wx.setStorageSync进行简单数据缓存2. 管理复杂数据结构——使用wx.setStorage3. 离线存储策略设计4. 安全性与性能优化 结语与探讨 在微信小程序的开发过程中&…

如何在树莓派上的ubuntu20.04.5上安装ros YDLidar SDK ydlidar driver

参考文章: 安装ros1: how to install ros1 on rasberry pi: https://varhowto.com/install-ros-noetic-ubuntu-20-04/ 安装完ros1后安装 ydlidar sdk 和 ydlidar driver: 参考这个手册: https://www.ydlidar.com/Public/upload/files/20…

在k8s中部署hadoop后的使用,包括服务端及客户端(客户端的安装及与k8s服务的对接)

(作者:陈玓玏) 在https://blog.csdn.net/weixin_39750084/article/details/136744772?spm1001.2014.3001.5502和https://blog.csdn.net/weixin_39750084/article/details/136750613?spm1001.2014.3001.5502这两篇文章中,说明…

Verilog复习(一)| 模块的定义

模块(module)是Verilog的基本描述单位,用于描述某个设计的功能或结构,及其与其他模块通信(连接)的外部端口。 Verilog程序由关键词module和endmodule进行定义。 定义模块的步骤: 定义模块的端…

保研面试408复习 4——操作系统、计网

文章目录 1、操作系统一、文件系统中文件是如何组织的?二、文件的整体概述三、UNIX外存空闲空间管理 2、计算机网络一、CSMA/CD 协议(数据链路层协议)二、以太网MAC帧MTU 标记文字记忆,加粗文字注意,普通文字理解。 1、…

全平台 GUI库, 物联网,嵌入式,单片机,桌面应用都行

跨平台最小头文件GUI库 GuiLite是一个轻量级、高效的GUI库,拥有仅4千行的C代码,且零依赖,采用单一头文件库(GuiLite.h)。这个库不仅提供高效渲染,即使在单片机上也能流畅运行,展现了卓越的性能表…

MySQL 单表访问

MySQL执行单表查询 1.访问方法: Const MySQL直接利用主键值在聚簇索引中定位对应的用户记录.并且唯一的二级索引也可以在常数时间内定位到一条记录. 这种const访问方法只能在主键列或者唯一二级索引与一个常数进行等值比较才有效. ref 普通的二级索引列与常数进行等值比较,会形…

大模型日报2024-05-05

大模型日报 2024-05-05 大模型新闻: Techs new arms race: The billion-dollar battle to build AI - 小型专业化模型可以为各种细分应用提供关键的、高效的能力,这是AI行业必须要支持的。来源:VentureBeatGenerative AI on Agenda for Next CIECA Webin…

使用llama.cpp量化部署LLM

以llama.cpp工具为例,介绍模型量化并在本地部署的详细步骤。这里使用 Meta最新开源的 Llama3-8B 模型。 1 环境 系统应有make(MacOS/Linux自带)或cmake(Windows需自行安装)编译工具Python 3.10以上编译和运行该工具 …

【比邻智选】MR880A模组

🚀高性价比,5G/4G双模,稳定可靠 🌐功能丰富,5G特性一应俱全 🧩多封装兼容,适配性强,灵活升级智能设备

这 7 道 Redis 基础问题,很常见!!

后端项目如果用到分布式缓存的话,一般用的都是 Redis。不过,Redis 不仅仅能做缓存,还能用作分布式锁、延时队列、限流等等。 什么是 Redis? Redis[1] (REmote DIctionary Server)是一个基于 C 语言开发的…

Unity数据持久化之Json

目录 Json概述Json文件格式Json配置规则Excel转Json C#读取存储Json文件JsonUtlityJsonUtlity序列化JsonUtility反序列化 LitJsonLitJson序列化LitJson反序列化JsonUtility和LitJson对比 Json概述 Json是什么? 全称:JavaScript对象简谱(JavaScript Object Notation) Json是国…