当前位置: 首页 > news >正文

JSON Schema 校验是什么?面试时怎么说?

JSON Schema 校验,其实就是 对接口返回的数据结构做自动化校验,确保它符合预期格式。

比如下单接口返回的数据是这样的:

{
"orderId": 12345,
"status": "paid",
"amount": 58.5,
"items": [
{
"productId": 1001,
"name": "苹果",
"quantity": 2
}
]
}

我们用 JSON Schema 定义接口的“标准格式”,比如:

{
"type": "object",
"properties": {
"orderId": { "type": "integer" },
"status": { "type": "string" },
"amount": { "type": "number" },
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"productId": { "type": "integer" },
"name": { "type": "string" },
"quantity": { "type": "integer" }
},
"required": ["productId", "name", "quantity"]
}
}
},
"required": ["orderId", "status", "amount", "items"]
}

然后用工具(比如 Python 的 jsonschema 库)去校验:

orderId 必须是整数

status 必须是字符串

items 必须是数组,数组里的元素必须包含 productId、name、quantity

作用:

保证接口返回格式正确:字段名、类型、是否必填。

防止上线后出错:比如后端改了字段类型,前端/测试能第一时间发现。

配合自动化:写一次 Schema,就能自动化校验所有返回。

面试回答模板

如果面试官问 “JSON Schema 校验你怎么用的?”
你可以这样说:

👉 “我们在接口测试里引入了 JSON Schema 校验,比如订单接口返回的字段结构,我会用 jsonschema 库定义标准,然后在自动化测试里比对接口实际返回和 Schema 是否一致。这样可以快速发现字段缺失、类型不符的问题,保证接口返回的稳定性。”

代码举例:写一段 Python 示例代码,用 jsonschema 来校验接口返回。

示例代码:校验订单接口返回

import requests
from jsonschema import validate

  1. 定义接口返回的 JSON Schema
    order_schema = {
    "type": "object",
    "properties": {
    "orderId": {"type": "integer"},
    "status": {"type": "string"},
    "amount": {"type": "number"},
    "items": {
    "type": "array",
    "items": {
    "type": "object",
    "properties": {
    "productId": {"type": "integer"},
    "name": {"type": "string"},
    "quantity": {"type": "integer"}
    },
    "required": ["productId", "name", "quantity"]
    }
    }
    },
    "required": ["orderId", "status", "amount", "items"]
    }

  2. 调用接口(示例 URL)
    url = "http://api.demo.com/order/detail?orderId=12345"
    response = requests.get(url)
    data = response.json()

  3. 用 Schema 校验返回结果
    try:
    validate(instance=data, schema=order_schema)
    print("✅ 接口返回符合预期 Schema")
    except Exception as e:
    print("❌ 接口返回不符合 Schema:", e)

在面试时还可以说:

“我会在接口自动化里加 Schema 校验,保证返回结构和字段类型稳定。”

“比如订单接口返回的 orderId 必须是整型,items 必须是数组,如果后端改了类型,测试用例能第一时间发现。”

“这比单纯的断言字段值更健壮,能防止上线后出现前端解析报错。”

这样在面试时你就可以加一句:
👉 “除了常规的断言,我还会用 jsonschema 库做接口返回的 Schema 校验,保证接口结构稳定。”

相关文章:

JSON Schema 校验是什么?面试时怎么说?

JSON Schema 校验,其实就是 对接口返回的数据结构做自动化校验,确保它符合预期格式。 比如下单接口返回的数据是这样的: { "orderId": 12345, "status": "paid", "amount": 58.5, "items": [ { "productId": 1…...

【征文启动】IvorySQL PostgreSQL 迁移实战经验征集:分享你的技术沉淀,赢取专属好礼!

在数据库技术选型与迭代的浪潮中,迁移始终是企业与开发者绕不开的核心课题——从旧数据库升级到 PostgreSQL 社区版,从其他数据库(Oracle)迁移至 IvorySQL/PostgreSQL,每一步都藏着技术决策的智慧与实战踩坑的经验。 为汇聚更多迁移场景下的实战方案,助力开发者少走弯路,…...

MCP的天气预报的使用

`{{ formatTime(message.timestamp) }}<!-- 输入区域 --><div class="input-area"><el-input v-model="inputMessage" placeholder="请输入您的问题..."@keydown.enter.exact.prevent="sendMessage" /><el-butto…...

6款超好用的AI换脸软件,一键视频直播换脸(附下载链接)

随着AIGC的火爆,AI换脸技术也被广泛应用于娱乐、广告、电影制作等领域,本期文章系统介绍了市面上超火的6款AI软件 换脸整合包收录了全部6款AI工具,请按照需要选择下载: 百度网盘:https://pan.baidu.com/s/1LWMp7mvGc_76PDueFBv3tQ?pwd=fwu41.Roop 作为AI换脸领域的鼻祖,…...

lc1029-两地调度

难度:中等(后期巅峰)题目描述给定一个数组,长度为 2n,表示 2n 个人 每个元素都是一个二元组,前一个数表示去 a 的路费,后一个数表示去 b 的路费 需要让 n 个人去 a,另 n 个人去 b,求最小总花费示例 输入:costs = [[10,20],[30,200],[400,50],[30,20]] 输出:110 解释…...

pyAutoGUI 模块主要效果介绍-(2)键盘功能

pyAutoGUI 模块主要效果介绍-(2)键盘功能pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !import…...

(简记)时间复杂度分析 $\Omicron,\Theta,\Omega$ 的区别

严谨定义请前往OI-wiki渐进符号定义介绍 备考初赛。为了方便记忆,给出如下定义:对于 \(f(n)=\Theta(g(n))\),我们恰可以用 \(g(n)\) 乘上两个非 \(0\) 常数分别拟合出 \(f(n)\) 的上下界(可以取等号)。对于 \(f(n)=\Omicron(g(n))\),我们仅可以用 \(g(n)\) 乘上一非 \(0\…...

Java的运算符

java的二元运算符 package com.zhong.operator;public class Demo01 {public static void main(String[] args) {//二元运算符//Ctrl+D 复制当前行到下一行int a = 10;int b = 20;int c = 25;int d = 25;System.out.println(a+b);System.out.println(a-b);System.out.println(…...

2025年最强API安全解决方案:以智能风险监测重塑企业数据防护体系

2025年最强API安全解决方案:以智能风险监测重塑企业数据防护体系在数字化浪潮席卷全球的今天,应用程序编程接口(API)已成为企业数字化转型的核心枢纽。随着API调用量呈现指数级增长,其安全风险也日益凸显。数据泄露、未授权访问、业务逻辑滥用等安全事件频发,使得API安全…...

HTML打包EXE工具中的WebView2内核更新指南

在HTML一键打包工具推出了免费的WebView2内核后, 有很多朋友都开始使用它来发布自己的HTML项目。无论是一个内部管理系统的小工具,还是一个要分发给客户的桌面应用,只要原本是基于网页的,就能轻松地一键打包成一个 Windows 可执行程序。WebView2内核占用空间小, 而且免费, 深…...

Javadoc生成文档方法

javadoc文档生成 package com.zhong.operator;/*** @author zcx* @version 1.0* @since 1.8*/ public class Doc {String name;/*** @* @param name* @return* @throws Exception*/public String test(String name) throws Exception{return name;} }1.在命令行中输入javadoc 文…...

HTML一键打包EXE工具中使用Websocket

你是否曾好奇微信网页版为何能即时收到消息?为何在线游戏能实时同步玩家操作?这一切都要归功于一种名为WebSocket的技术。今天,我们就来聊聊这项让网页活起来的技术, 并且会附上示例代码,可以方便的通过html一键打包exe工具打包成一个桌面程序。 网址一键转成桌面程序HTML…...

KUKA程序中DEF 与 DEFFCT 的区别

程序/ 子程序DEF 在SRC 声明程序使用DEF,生成的DAT 文件使用DEFDAT,SRC 文件中最多可由255 个局部子程序组成,局部子程序允许多次调用 局部程序名称需要使用括号,运行完毕局部子程序后,跳回到调出子程序后面的第一个指令,最多可相互嵌人20 个子程序。 函数编程DEFFCT 函数…...

第一天作业

大家好,我是23数据科学与大数据技术一班的黄敏,目前还在编程学习的入门阶段。 平时喜欢看看电视剧,打打游戏,还有散步。 说到优势,可能是耐心比较好。之前为了弄懂 Excel 的 VLOOKUP 函数,对着教程反复练习了三天,直到能熟练用它处理班级的成绩表。虽然只是简单的办公技…...

EXE一机一码打包加密大师 - 打包加壳原理

​软件开发的世界里,我们倾注心血写下的每一行代码,编译生成的EXE文件,都如同亲手打造的艺术品。然而,在互联网的“丛林”中,这款艺术品却时刻面临着被破解、盗用、恶意篡改的风险。如何保护我们的劳动成果?今天,我们就来聊聊一项核心的保护技术——加壳,并探讨如何从零…...

力扣62题 不同路径

1.确定dp数组(dp table)以及下标的含义 dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。 2.确定递推公式 想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。 此时在回顾一下 dp[i - 1][j] 表示啥,是从(0, 0)的位置到(i - 1,…...

八皇后问题

2025.9.16 题目内容 一个如下的 \(6 \times 6\) 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子上面的布局可以用序列 \(2\ 4\ 6\ 1\ 3\ 5\) 来描述,第 \(i\) 个数字表示在第 \(i\) 行的相应…...

零知识证明中的专业漏洞解析

本文深入分析离散对数证明和加密证明中的关键漏洞,揭示攻击者如何通过输入验证缺失伪造不可能证明,影响区块链阈值签名安全,涵盖技术细节和修复方案。专业零知识证明漏洞 - Trail of Bits博客 零知识(ZK)证明是近年来备受关注的密码学工具,主要应用于加密货币领域。ZK证明…...

2025.9.16日软件工程学习日志

今日设计了测试项目的html页面 `科技成果信息填报系统* { box-sizing: border-box; margin: 0; padding: 0; font-family: "Microsoft YaHei", sans-serif } body { background-color: rgba(245, 247, 250, 1); color: rgba(51, 51, 51, 1); line-height: 1.6; paddi…...

2025ccpc南昌邀请赛感想+补题

比赛前去了81纪念馆和滕王阁,必须说江西的风景还是不错的,不过可惜的是作为一个江西人没有吃到足够辣的江西菜 赛前一晚做梦梦到比赛打炸了,然后还有另一个比赛也忘记打了,回去被同学鞭尸给我吓醒了,谁懂醒来还在酒店床上的救赎感 还好梦是反的,最后7题拿下第一个金牌,可…...

img标签如何去除边框?

原文版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/qq_41964720/article/details/131397016 原文作者:grapelet_kmw于 2023-06-26 14:41:12 发布—————————————————————…...

25.9.16 java se大致了解后开始学习MySQL

今天把java se基础内容看完了,有些内容现在单独看是很脱节的,先了解个大概,后面用到了再加深理解。 把mysql和datagrip配置了一下,看了mysql的基础、事务,索引刚看完B+树(从八股上看索引是重点)。 明天计划把mysql的大部分内容看完,主要剩下的重点是 SQL优化、锁、Inno…...

C++ + OpenCV + Tesseract 实现英文数字验证码识别

本文展示如何用 C++ 结合 OpenCV 做图像预处理,再调用 Tesseract OCR 识别验证码。适用于希望在高性能后端或本地服务里集成 OCR 的场景。方案包含: 环境与依赖安装 图像预处理(灰度、二值化、形态学去噪、放大) 使用 Tesseract API 调用(设定白名单、PSM) 完整 C++ 示例…...

Hadoop伪分布式hbase学习

Hadoop全方位学习指南:从核心概念到生态系统 引言:为什么需要Hadoop? 在当今大数据时代,我们面临着前所未有的数据挑战——数据量巨大(Volume)、数据类型繁多(Variety)、处理速度要求快(Velocity)。传统的单机系统在存储和处理如此规模的数据时已力不从心。 Hadoop应…...

Redis源码学习 -- 基本数据结构 -- Quicklist - -蓝蜗牛

1. 什么是 Quicklist? Quicklist​​是Redis自主研发的一种双向表数据结构,是List的底层数据结构之一。设计的核心思想是在时间和空间之间取一个平衡点。 2. Quicklist vs 普通链表 vs Listpack List系列命令的设计目标:两端操作O(1),随机操作O(n)。普通链表存在的问题? 普…...

动态修改线程池参数

import java.util.concurrent.BlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;/*** 动态线程池*/ public class DynamicThreadPool extends ThreadPoolExecutor {private …...

力扣70题 爬楼梯

1.确定dp数组以及下标的含义 dp[i]:爬到第i层楼梯,有dp[i]种方法 2.确定递推公式 dp[i]=dp[i-1]+dp[i-2] 3.dp数组如何初始化 dp[1]=1,dp[2]=2 4.确定遍历顺序 从前向后遍历的 5.举例推导dp数组 class Solution { public:int climbStairs(int n) {if (n <= 1) return n; /…...

PHP(Laravel)+ ImageMagick + Tesseract 实现验证码识别

一、概述与适用场景 本文演示如何在 PHP 服务端用 ImageMagick 做图像预处理,再调用系统安装的 Tesseract 做 OCR,最后用 Laravel 封装为 REST API。适合把验证码识别功能接入测试工具、后台自动化流程或内部管理平台。 优点: PHP 技术栈贴合多数 Web 后端; ImageMagick 提…...

表格识别技术:“唤醒”沉睡在纸质文档中的海量结构化数据

在日常工作和生活中,我们无处不在与表格打交道。从财务报表、发票收据,到科研论文中的数据表、医疗报告,表格以其清晰、结构化的方式,承载着大量关键信息。然而,当这些表格以纸质或图片等非结构化形式存在时,如何高效、准确地将它们转换为可编辑、可分析的数据,便成了一…...

【大三下】资料,仅内部学习使用

参考&推荐资料: 1.小金学长资料(微信公众号“小金同学HEI”) 2.朝阳医院22级课件 免责声明: 1.仅个人编写,可能出错,欢迎补充及捉虫 (作者只是勉强前十的本科生,比不了其它资料的作者) 2.仅供学习交流使用 3.若有条件请观看推荐资料或其它资料 4.该文档无任何医学…...

fastboot工具的常见命令

Fastboot是一个在Android开发环境中常用的工具,它是一个诊断工具,用于修改Android手机的固件。fastboot devices:显示当前连接到计算机的设备。此命令用于检查设备是否成功进入fastboot模式并通过USB正确连接到计算机。 fastboot oem unlock:解锁设备的 bootloader。这是在…...

《软件需求最佳实践》阅读笔记一

这本书主要从软件需求实践中出现的主要问题和困难入手,指出了改造的主要方法,然后逐一说明了需求定义、需求捕获、需求分析与建模、编写规约、需求验证等需求开发活动的任务、要点和具体手段。还对包括需求基线、变更管理、需求跟踪在内的需求管理活动的操作要点进行了阐述。…...

挖掘PDF生成器中的SSRF漏洞:从发现到利用

本文详细介绍了如何在PDF生成器中寻找和利用服务器端请求伪造(SSRF)漏洞,涵盖HTML注入、远程服务器访问、JavaScript执行等技术细节,并提供了针对云环境(如AWS IMDS)的具体攻击方法和实战技巧。挖掘PDF生成器中的SSRF漏洞 如果你在网站上看到以下功能之一,很可能遇到了服…...

做题记录 2

F. Shift and Revers 题意 给定 \(a_i\) ,操作有让 \(a_n\) 移到第一位和翻转整个序列,问最小操作数使得 \(a_i\) 从小到大排序。 做法 (不)容易发现可以正反都做一次取 min。 P6617 查找 Search 一道有点折磨的分讨题 理不清思路容易WA 给定 \(n\) 个垃圾桶,你需要维护一个…...

计数原理与排列组合

加法原理:做一件事情,有 \(n\) 类办法,第 \(1\) 类办法有 \(m_1\) 种方法,第 \(2\) 类办法有 \(m_2\) 种方法,第 \(n\) 类办法有 \(m_n\) 种方法,则完成这件事情的办法有 \(m_1+m_2+\cdots+m_n\) 种。 加法原理属于分类计数原理,分类需要包含所有情况,类与类之间不会产…...

9.16动态用例设计方法 笔记

...

深入解析:ESP32三种主流的开发环境

深入解析:ESP32三种主流的开发环境pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; …...

js

js...

9.16电商状态迁移图

...

c# ConcurrentDictionary

using System.Collections.Concurrent;internal class Program {static void Main(string[] args){ConcurrentDictionary<string, RedisConnection> redisConnectionDic = new ConcurrentDictionary<string, RedisConnection>();int redisConn =10;//会多次创建//P…...

核桃OJ【S组 第二轮】信息学竞赛10w选手模拟考

赤石,爽!核桃OJ【S组 第二轮】信息学竞赛10w选手模拟考 什么糖丸的名字 还是pvz专场。 植物部队哈基米 哦哦哦,感觉就不难,无非是一个连续段成环和特殊植物两种,复杂度能过。哈哈哈,预处理跑2s,太帅了吧!卡常!最后跑1.5s,过了。可是你大样例只有一个不满的,这是什么…...

第一次个人编程作业

第一次个人编程作业 作业GitHub链接https://github.com/useful-Tree/3123004757/tree/main 一、PSP表格(预估与实际耗时)PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 15 20 Estimate估计任务所需时间 15 20Development 开发 …...

【初赛】软件系统 - Slayer

软件系统 (主要是之前做到了几次 全错 来记一下 系统软件 操作系统、Windows、dos、unix、各种计算机语言处理程序、机器语言、汇编语言、高级语言、数据库管理系统、支持软件 应用软件 程序库、软件包、套装软件、用户程序 常见:字处理软件、电子制表软件、计算机辅助设计软…...

漏洞详解--XXE 从入门到精通!

一、漏洞原理 1.1 核心 XXE(XML External Entity injection),名为XML外部实体注入。其核心在于XML解析器默认允许外部实体/DTD,攻击者通过构造特殊的XML使其包含恶意外部实体。外部实体可以为服务器敏感文件,也可以为网络请求等,之后利用方式类似于文件包含和SSRF,有时甚…...

数学分析习题课 note

ohno,这很难第一讲:实数系 我们可以定义有序域 \(F\) 。一些有序域 \((F,+,\cdot,\le )\) 满足以下所谓连续公理: 连续公理 阿基米德公理:\(\forall x,y\in F,x>0,\exists n\in N^{+}\) 使得 \(nx>y\) 完备公理:若存在代数结构 \((F,+,\cdot,\le )\) 满足 \(F\subse…...

总结-CDQ 分治

关于 CDQ 分治 CDQ 分治是一种思想而不是具体的算法,并且必须离线处理,用于维护具有偏序限制的问题。 偏序可以理解为大小关系。 经典三维偏序 CDQ 分治的经典应用。 给定每个元素,每个元素都有三个属性 \((x,y,z)\),要求统计所有满足三个偏序条件时的价值。 标准方法:sor…...

【初赛】计算机语言 - Slayer

计算机语言 编译性语言 c c++ pascal 解释性预言 py java JavaScript ruby PHP...

深入浅出RocketMQ客户端编程

深入理解RocketMQ:从架构到实战的全方位指南 在当今分布式系统日益普及的时代,消息队列已成为支撑高并发、高可靠业务的核心组件。RocketMQ作为阿里巴巴开源的高性能消息中间件,凭借其卓越的性能和稳定性,在电商、金融等高要求场景中得到了广泛应用。今天,让我们一起深入探…...

Win10玩LOL弹窗

将红框内关闭关闭后,可以按win+g快捷键,如果不弹出那个窗口,在LOL里面应该也不会弹出...

溢出存储变量

这个 negative(i) 表示的就是 (-i) 这个数(其中 i>=0),在二进制下的编码。 这个编码满足 \(i+negative(i)=2^k\),可是由于我们二进制下只有 \(k\) 位,最高位是 \(2^{k-1}\),所以那个 \(1\) 会被丢掉,所以加起来结果为 \(0\)。 那如何确定一个数被存储为多少,因为前面…...