【测开】接口路由分类与技巧,GraphQL,WebSocket,RESTFUL方法(PUT、PATCH、OPTIONS、HEAD、TRACE)

【测开】接口路由分类与技巧,GraphQL,WebSocket,RESTFUL方法(PUT、PATCH、OPTIONS、HEAD、TRACE)

文章目录

      • 1、接口路由分类(RESTful,GraphQL,WebSocket)
      • 2、接口路由设计与技巧
      • 3、RESTFUL方法介绍

1、接口路由分类(RESTful,GraphQL,WebSocket)

接口路由规则通常用于定义如何在系统中路由请求,以确保不同的服务、模块或组件之间能够正确地交流。

RESTful API 路由规则

  • 资源表示:每个资源(如用户、产品等)对应一个 URL。
  • HTTP 方法:
    GET:获取资源
    POST:创建资源
    PUT:更新资源
    DELETE:删除资源
  • 路由示例:
    GET /api/users — 获取用户列表
    POST /api/users — 创建新用户
    GET /api/users/{id} — 获取特定用户信息
    PUT /api/users/{id} — 更新特定用户信息
    DELETE /api/users/{id} — 删除特定用户

GraphQL 路由规则

  • 所有请求通过一个端点(如 /graphql)处理,使用查询语句指定所需的数据。 引用:1, 2, 3
  • GraphQL 将 API 请求分为查询(query)和变更(mutation)。查询用于获取数据,变更用于修改数据。
  • GraphQL 强制使用类型系统定义请求和响应的数据类型,这使得接口更加可预测。基本类型:String、Int、Float、Boolean、ID。
  • GraphQL 支持嵌套查询,可以在一个请求中获取相关联的多个资源。
  • GraphQL 支持实时更新,通过subscription来处理。这适用于需要实时数据的情况,比如聊天应用或通知系统。
query {users {idname}
}
mutation {addUser(name: "Alice") {idname}
}

WebSocket 路由规则

  • WebSocket 是一种网络通信协议,提供全双工通信通道,常用于需要实时数据传输的应用(如聊天、游戏、实时通知等)。与传统的 HTTP 请求-响应模型不同,WebSocket 允许客户端和服务器之间的持久连接与即时消息传递。
  • WebSocket 可以定义不同的路由以处理各种事件。1, 2,3
  • 示例:
    ws://example.com/chat — 聊天消息
    ws://example.com/notifications — 实时通知
  • WebSocket 具有一系列事件,可以处理连接打开、消息接收、错误和连接关闭等情况。
    常见事件:
    onopen: 连接建立时触发
    onmessage: 接收到消息时触发
    onerror: 发生错误时触发
    onclose: 连接关闭时触发
  • WebSocket 的“路由”通常是通过消息内容来实现的,而不是 URL 路由。可以在消息中包含一个操作类型或命令,根据此来处理不同的事件。
{"type": "CHAT_MESSAGE","data": {"user": "Alice","message": "Hello, World!"}
}
switch (msg.type) {case 'CHAT_MESSAGE':// 处理聊天消息break;case 'USER_JOINED':// 处理用户加入break;
}

2、接口路由设计与技巧

版本控制

  • 路由中包含版本号,以便于接口的升级和维护。
  • 示例:
    /api/v1/users
    /api/v2/users

中间件

  • 中间件用于处理请求的预处理和后处理,比如身份验证、日志记录和数据格式化等。
  • 示例:
    // 身份验证中间件示例
    function authMiddleware(req, res, next) {
    const token = req.headers[‘authorization’];
    if (isValidToken(token)) {
    next();
    } else {
    res.status(401).json({ error: ‘Unauthorized’ });
    }
    }
    app.use(‘/api/’, authMiddleware);

动态路由

  • 支持在 URL 中使用动态参数,用于捕获变量。
  • 示例:
    /api/products/{category} — 根据分类获取产品
    // 用户信息的动态路由
    app.get(‘/api/users/:id’, (req, res) => {
    const userId = req.params.id;
    // 根据 userId 获取用户信息
    });

错误处理

  • 统一的错误处理机制有助于返回一致的错误响应并提高用户体验。
  • 例子:
    app.use((err, req, res, next) => {
    console.error(err.stack);
    res.status(500).json({ error: ‘Something went wrong!’ });
    });

资源嵌套

  • 为相关资源嵌套路由,使得 API 更加直观。
    app.get(‘/api/users/:userId/posts’, (req, res) => {
    const userId = req.params.userId;
    // 获取 userId 下的所有文章
    });

过滤、排序和分页

  • 支持查询参数以便客户端能够过滤、排序和分页。
    app.get(‘/api/users’, (req, res) => {
    const { page = 1, limit = 10, sort = ‘name’ } = req.query;
    // 根据 page、limit 和 sort 获取用户信息
    });

使用缓存

  • 对于较少变动的数据,可以使用缓存机制以提高 API 的性能。
  • 示例:
    利用 HTTP 缓存头:
    app.get(‘/api/users’, (req, res) => {
    res.set(‘Cache-Control’, ‘public, max-age=300’);
    // 返回用户数据
    });

3、RESTFUL方法介绍

方法:GET、POST、DELETE、PUT、PATCH、OPTIONS、HEAD、TRACE
安全与幂等

  • 根据RFC2616第九章说明,http方法的定义有两点:safe and Idempotent,即安全性和幂等性,可以结合这两点对以上方法进行说明
  • 安全:安全方法是指不修改资源的 HTTP 方法,是那些可以被缓存、对资源无损预加载的方法。一般只用于查询。
  • 幂等:幂等方法是指无论调用多少次都不会有不同结果,它无论是调用一次,还是十次都无关紧要,结果仍应相同。比如a = 4幂等; a++不幂等;

方法说明:

  • 1,GET
    安全、幂等;
    用于获取资源;

  • 2,HEAD
    安全、幂等;
    与get方法类似,但不返回message body内容,仅仅是获得获取资源的部分信息(content-type、content-length);
    restful框架中较少使用

  • 3,POST
    非安全、非幂等;
    用于创建子资源

  • 4,PUT
    非安全、幂等;
    用于创建、更新资源;

  • 5,DELETE
    非安全、幂等;
    删除资源;

  • 6,OPTIONS
    安全、幂等;
    用于url验证,验证接口服务是否正常;

  • 7,TEACE
    安全、幂等;
    维基百科“回显服务器收到的请求,这样客户端可以看到(如果有)哪一些改变或者添加已经被中间服务器实现。”
    restful框架中较少使用

  • 8,PATCH
    非安全、幂等;
    用于创建、更新资源,与PUT类似,区别在于PATCH代表部分更新
    后来提出的接口方法,使用时可能去要验证客户端和服务端是否支持;

日常中的使用:

  • post和put的区别
    在于uri,或者说post用于创建子资源,比如接口:POST /api/person/ 会创建一个资源比如 /api/person/1或者/api/person/2 … 或者/api/person/n,创建了新的uri,
    而put方法创建资源的uri是 PUT /api/person/1,这样就创建了一个资源,如果1已经存在那么就是更新,所以put并不是只是更新操作。
    再有post是非幂等的。通常情况下,我们都会将post、get、put、delete对应到CRUD操作上,但实际上put并不是只能更新。

  • patch的使用
    patch是2010后成为的正式http方法,它是对put的补充,在没有patch之前,我们都是用put进行更新操作,这时候我们的接口中通常会有一个逻辑规则,如:如果对象的的一个字符属性为NULL,那么就是不更新该属性(字段)值,如果对象的字符属性是“”,那么就更新该属性(字段)的值,通过这种方式来避免全部覆盖的操作。现在有了patch就解决了这种判断,在put接口中不管属性是不是null,都进行更新,在patch接口中就对非null的进行更新。

  • uri的使用规范
    uri即代表资源的,通过不同的方法来区分操作,那么像如下的接口就已经违反了restful规范:
    GET /api/getPerson/1
    DELETE /api/delPerson/1
    GET /api/person/get/1
    DELETE /api/person/delete/1
    在符合规范的前提下,uri的定义应该也是实际使用中应该考虑的,比如uri包涵那些信息?如版本、资源分类、资源名称、表述格式等:
    /api/1.0/person/man/1.xml
    /api/2.0/person/man/1.json

参考资料:1, 2 ,3

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

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

相关文章

tp5 fastadmin列表页图片批量压缩并下载

记录&#xff1a;tp5 fastadmin对列表页选中数据的多张图片进行压缩并下载。 html代码 <a href"javascript:;" class"btn btn-info btn-apple btn-disabled disabled {:$auth->check(zhuanli/zhuanli/xiazai)?:hide}" title"批量下载专利证书…

selenium-Alert类用于操作提示框/确认弹框(4)

之前文章我们提到&#xff0c;在webdriver.WebDriver类有一个switch_to方法&#xff0c;通过switch_to.alert()可以返回Alert对象&#xff0c;而Alert对象主要用于网页中弹出的提示框/确认框/文本输入框的确认或者取消等动作。 Alert介绍 当在页面定位到提示框/确认框/文本录入…

如何通过systemed实现Linux脚本在服务器的开机自启动,解决网络摄像机IPC通过 域名接入视频监控平台出现离线的问题。

目录 一.问题描述和分析 二.实现脚本开机自启动的过程 2.1确认该系统是不是systemed系统 2.2创建并配置该脚本的systemd服务 2.2.1创建服务 2.2.2配置服务 2.3启动服务 三.问题解决结果 3.1查看服务状态 3.2查看摄像机在线状态 3.3查看视频是否正常 一.问题描述和分…

leetcode:反转字符串中的单词III

题目链接 string reverse(string s1) {string s2;string::reverse_iterator rit s1.rbegin();while (rit ! s1.rend()){s2 *rit;rit;}return s2; } class Solution { public:string reverseWords(string s) {string s1; int i 0; int j 0; int length s.length(); for (i …

C++关于树的基础知识

首先区分概念 “度为m的树”指的是至少有一个结点的度是m&#xff0c;一定是非空树 “m叉树”指的是允许所有的结点都小于m&#xff0c;且可以是空树 常见考点&#xff1a; 度为m的树的第i层最多有个结点 &#xff08;对于m叉树也相同&#xff09; 第一层m的0次方 第二层m的…

电池大师 2.3.9 | 专业电池管理,延长寿命优化性能

Battery Guru 显示电池使用情况信息&#xff0c;测量电池容量&#xff08;mAh&#xff09;&#xff0c;并通过有用技巧帮助用户改变充电习惯&#xff0c;延长电池寿命。支持显示电池健康状况&#xff0c;优化电池性能。 大小&#xff1a;9.6M 百度网盘&#xff1a;https://pan…

多模态大语言模型(MLLM)-InstructBlip深度解读

前言 InstructBlip可以理解为Blip2的升级版&#xff0c;重点加强了图文对话的能力。 模型结构和Blip2没差别&#xff0c;主要在数据集收集、数据集配比、指令微调等方面下文章。 创新点 数据集收集&#xff1a; 将26个公开数据集转换为指令微调格式&#xff0c;并将它们归类…

创建osd加入集群

故障原因&#xff1a;ceph节点一个磁盘损坏&#xff0c;其中osd69 down了&#xff0c;需要更换磁盘并重新创建osd加入ceph集群。 信息采集&#xff1a; 更换磁盘前&#xff0c;查询osd69对应的盘符&#xff1a; 将对应的故障磁盘更换后&#xff0c;并重做raid&#xff0c;然后查…

≌图概念凸显有长度不同的射线

黄小宁 【摘要】自有射线概念后的2300年里一直无人能知有长度不同的射线、无人能知有互不≌的射线&#xff0c;从而使数学一直有几何“常识”&#xff1a;任何射线都没有长度差别。保距变换和≌图概念使人能一下子看到有长度不同的射线。 变量x所取各数也均由x代表&#xff0c…

1. Keepalived概念和作用

1.keepalived概念 (1)解决单点故障(组件免费) (2)可以实现高可用HA机制 (3)基于VRR协议(虚拟路由沉余协议) 2.keepalived双机主备原理

DockerCompose 启动 open-match

背景介绍 open-match是Google和unity联合开源的支持实时多人匹配的框架&#xff0c;已有多家游戏厂商在生产环境使用&#xff0c;官网 https://open-match.dev/site/ 。原本我们使用的是UOS上提供的匹配能力&#xff0c;但是UOS目前不支持自建的Dedicated servers 集群&#x…

ai论文写作软件哪个好?分享5款ai论文题目生成器

在当前的学术研究和写作领域&#xff0c;AI论文写作软件已经成为提高效率和质量的重要工具。根据多个来源的评测和推荐&#xff0c;以下是五款值得推荐的AI论文写作软件&#xff0c;其中特别推荐千笔-AIPassPaper。 1. 千笔-AIPassPaper 千笔-AIPassPaper是一款基于深度学习和…

【第2章 开始学习C++】C++语句

文章目录 导语声明语句和变量赋值语句cout的新花样使用cin类简介 导语 C 程序是一组函数&#xff0c; 而每个函数又是一组语句。 C 有好几种语句&#xff0c;例如&#xff1a;声明语句创建变量&#xff0c; 赋值语句给该变量提供一个值。 声明语句和变量 计算机是一种精确的…

HCIA——one

推荐电影&#xff1a;《模仿游戏》《黑客帝国》《头号玩家》 图灵机每秒五千次计算&#xff0c;当今计算机4080ti算力每秒21万亿次的计算。 OSI七层模型 应用层&#xff1a;人机交互&#xff0c;将抽象语言转换成编码 表示层&#xff1a;将编码转换成二进制 介质访问控制层…

Chatgpt 原理解构

一、背景知识 1. 自然语言处理的发展历程 自然语言处理在不同时期呈现出不同的特点和发展态势。萌芽期&#xff0c;艾伦・图灵在 1936 年提出 “图灵机” 概念&#xff0c;为计算机诞生奠定基础&#xff0c;1950 年他提出著名的 “图灵测试”&#xff0c;预见了计算机处理自然…

国内经典多模态大模型工作1——Qwen-VL系列(Qwen-VL、Qwen2-VL解读)

Qwen-VL 论文标题&#xff1a;《Qwen-VL: A Versatile Vision-Language Model for Understanding, Localization, Text Reading, and Beyond》 论文链接&#xff1a;https://arxiv.org/pdf/2308.12966.pdf 项目&#xff1a;https://github.com/QwenLM/Qwen-VL/tree/master 模…

DAMA数据管理知识体系(第13章 数据质量)

课本内容 13.1 引言 语境图 图13-1 语境关系图&#xff1a;数据质量业务驱动因素 1&#xff09;提高组织数据价值和数据利用的机会。2&#xff09;降低低质量数据导致的风险和成本。3&#xff09;提高组织效率和生产力。4&#xff09;保护和提高组织的声誉。 提机会、降成本、增…

3D看车如何实现?有哪些功能特点和优势?

3D看车是一种创新的汽车展示方式&#xff0c;它利用三维建模和虚拟现实技术&#xff0c;将汽车以更真实、更立体的形式呈现在消费者面前。 一、3D看车的实现方式 1、三维建模&#xff1a; 通过三维建模技术&#xff0c;按照1:1的比例还原汽车外观&#xff0c;包括车身线条、细…

yolov8/9/10/11模型在中医舌苔分类识别中的应用【代码+数据集+python环境+GUI系统】

yolov8、9、10、11模型在中医舌苔分类识别中的应用【代码数据集python环境GUI系统】 背景意义 目前随着人们生活水平的不断提高&#xff0c;对于中医主张的理念越来越认可&#xff0c;对中医的需求也越来越多。 传统中医的舌诊主要依赖于医生的肉眼观察&#xff0c;仅仅通过这…

大数据新视界 --大数据大厂之 GraphQL 在大数据查询中的创新应用:优化数据获取效率

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…