使用JSON Schema來驗證接口數據


最近在做一些關於JSON Schema的基建,JSON Schema可以描述一個JSON結構,那么反過來他也可以來驗證一個JSON是否符合期望的格式。

如果之前看我寫的《使用joi來驗證數據模型》 可能會問,為什么不使用JOI,反而使用JSON Schema?因為JOI這個nodejs庫,除了驗證格式,還帶有驗證字段關系的功能,庫體積相對龐大,而且對於含有嵌套格式的JSON,用JOI來編寫驗證配置,極為繁瑣。JSON Schema清晰簡讀,用來驗證接口數據非常合適。

假設我們有一個期望JSON:

{
	users: [
		{ id: 1, username: "zzbo", }
	]
}

我們理解這個JSON結構如下:

  • 這個JSON對象有一個users的屬性
  • 這個user屬性是一個數組
  • 這個數組里面的元素是一個對象
  • 每一個對象里面包含了兩個字段:id(Number),username(String)

用JSON Schema來描述這個JSON的結構

{
    "$schema": "http://json-schema.org/draft-04/schema#",
	"type" : "object",
	"properties" : {
		"users" : {
			"type" : "array",
			"items" : {
				"type" : "object",
				"properties" : {
					"id": { "type": "number" },
					"username": { "type" : "string" }
				}
			}
		}
	}
}

描述一個JSON就是這么簡單。

如果還嫌編寫Shema麻煩,哪位高手來寫一個根據JSON自動生成JSON Schema的工具。

DOJO已提供了JSON Schema來驗證接口數據的功能:

dojo其實早已經這樣干,我們可以借鑒。

// 引入dojo的json schema驗證模塊
dojo.require("dojox.json.schema");

dojo.ready(function() {
	// 加載指定的schema
	dojo.xhrGet({
		url: 'schema.json',
		handleAs: 'json',
		load: function(schema) {

			// 拉取數據
			dojo.xhrGet({
				url: 'users.json',
				handleAs: 'json',
				load: function(users) {
					// 使用 dojo 的 json schema驗證模塊來驗證
					var result = dojox.json.schema.validate(users, schema);
					console.log(result); 
				}
			});
		}
	});	
});

如果驗證合法則返回true, 否則他會返回一個錯誤信息:

{
	errors: [
		{
			message: "is missing and not optional",
			property: "users"
		}
	]
	valid: false
}

然而,我們往往會擔心數據的某個字段缺失,或者類型不是我們所期望的,然后程序中又疏忽於這些判斷。如果我們要打造一個像dojo這樣的json schema驗證工具,除了validate功能,最好還會有一個fill功能,用於自動填充缺失的字段。

相關資料

JSON Schema 規范


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM