接口把 false 写成字符串后,怎样验收布尔值与枚举类型
JSON的false、字符串”false”、数字0、null与缺字段是不同输入,不能统一用真假转换解释设备状态。尤其在JavaScript中,非空字符串”false”会被当成真值。验收应逐字段核对类型和枚举取值,遇到未知类型显示契约错误或未知状态,避免把不认识的值默认为“设备已开”。
环境和证据范围
本文定义一个合成契约:enabled必须为布尔值,mode只能是auto或manual。JSON规范只规定值类型,不替设备定义字段;具体设备确实使用0/1或字符串状态时,应按其文档显式转换。这里不调用真实API,也不测试任何产品的界面。
核对顺序
-
从设备文档提取字段名、类型、可空性、是否允许缺省和枚举集合,将这些要求写在点表。不要从一次响应猜测所有状态,更不要在多个接口之间默认enabled含义一致。
-
先检查成员是否存在,再检查null,再检查精确类型。Python中bool是int的子类,因此脚本使用type(v) is bool;跨语言实现也要避免宽松比较把0或1混进布尔分支。
-
类型正确后再判断业务值与枚举。未知mode应被记录,不能自动落到manual;这样设备升级增加枚举时,接口变化才会暴露,而不是静默进入错误模式。
-
加入正确false、字符串false、数字0、null、缺字段和未知枚举六组输入,逐条核对状态文本。真实现场还要检查适配器是否在日志打印前已经做了强制转换,必要时保存原始JSON字节。
可复算的输入与预期
六个合成输入的期望分别是“有效关闭”“布尔类型错误”“布尔类型错误”“不允许null”“缺字段”“未知枚举”。合法false必须得到关闭,不能因为if语句把它当成缺值。mode合法但enabled错误时,先报告enabled错误,保持校验顺序可复现。
下载与现场记录
下载本题合成输入与预期JSON、离线只读核验脚本和现场空白记录CSV。放在同一目录,用 Python 3 运行 python verify.py,逐项计算或解析后与预期比较,失败会显示差异。
现场字段包括 field、raw_value、json_type、allowed_enum、validator_version、decision。合成样例保持原样,实测另存并填写型号、版本、证据路径,未采集处留空。本地核验不代表真实设备、代理、浏览器或长期稳定性已测。
失败分支与移交
把Boolean(value)、!!value或宽松比较当数据清洗,会让非空错误文本也成为真。简单用value or default又会把合法0、false替换掉。若厂商文档真的混用类型,应写出明确兼容表并保留原值,而不是把所有输入转换成字符串后比较。
交接应附完整枚举、缺字段策略、版本兼容表和未知输入样本。真实设备升级后先跑这组契约回归,再观察运行状态;客户端拒绝一个新枚举并不代表设备损坏,而是双方契约需要核实。错误状态也应有可检索日志,便于现场定位具体字段。
基础背景可看HTTP / RESTful 设备控制接口科普。数字字段即使类型正确也可能损失精度,见JSON 设备编号超过安全整数后,怎样避免浏览器悄悄改号。更多资料在设备协议库。
需要接入中控时,可对照SoftControl设备联动需求核实适配范围;独立校验方法是否纳入交付需逐项约定。
一级资料
核对日期:2026-10-24。规范定义与本文应用约定分开,示例门限及脚本不自动代表产品原生能力。
相关阅读
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。