Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
JSON Schema and JSONNanny by sodabiscuit
Slide 2
Slide 2 text
Agenda • JSONNanny出现的前提 • JSON Schema是什么 • JSON Schema的发展历史 • JSON Schema语法 • JSONNanny是什么 • JSONNanny初步
Slide 3
Slide 3 text
JSONNanny出现的前提 • 流程的合理性 • ⾃自然语⾔言的准确性 • 重复定义的成本 • 版本化与持续化存储 • 设计与调试⼯工具
Slide 4
Slide 4 text
流程的合理性 创建⽰示例 本地调试 交付下游 ⽰示例⽂文档废弃 获取线上⽰示例 修改调试 交付下游 ⽰示例⽂文档废弃 创建描述⽂文档 创建⽰示例 交付下游 ⽰示例⽂文档废弃
Slide 5
Slide 5 text
⾃自然语⾔言的准确性 is_empty可取值0,1 {“is_empty” : 0} products 表⽰示产品列表 {“products”:[]} {“is_empty” : “0”} {“products”:null}
Slide 6
Slide 6 text
重复定义的成本 { “name” : “商品名称”, “price” : “200”, “tmall” : true } { “title” : “商品名称”, “price” : 200, “isTmall” : 1 }
Slide 7
Slide 7 text
版本化与持续存储 • ⽰示例⽂文档存放在本地 • 说明⽂文档以wiki或cf形式存放 • 多版本的并⾏行 • 迁移与持续开发
Slide 8
Slide 8 text
设计与调试⼯工具 • 传统编辑器 • 脚本语⾔言(php,python)数据⽣生成器
Slide 9
Slide 9 text
JSON Schema是什么 此⽂文档类型以JSON数据格式为基础。从当前 应⽤用场景来看,JSON Schema所能做的主要 是对数据形式以及操作⽅方式进⾏行约束,同时 也包括对校验、⽂文档、链接导航、访问控制 的定义。
Slide 10
Slide 10 text
JSON Schema历史 • 2009.12.5 draft 01 • 2010.3.23 draft 02 • 2010.11.22 draft 03 • 2013.1.31 draft 04
Slide 11
Slide 11 text
$schema { “$schema” : “http://json-schema.org/draft-03/schema#” } { “$schema” : “http://json-schema.org/draft-04/schema#” }
Slide 12
Slide 12 text
type “user” : { “type” : “string” } “user” : { “type” : [“null”, “object”] } { “user” : null } { “user” : {“foo” : “bar”} }
Slide 13
Slide 13 text
title, description “user” : { “type” : “string”, “title” : “⽤用户名称”, “description” : “更详细的描述” } “user” : “sodabiscuit”
Slide 14
Slide 14 text
disallow “user” : { “disallow” : null } { “user” : null } { “user” : {“foo” : “bar”} }
Slide 15
Slide 15 text
properties { “type”: “object”, “properties” : { “price” : { “type” : “number” } } } { “price” : 200 }
Slide 16
Slide 16 text
patternProperties { “type”: “object”, “patternProperties” : { “[a-z0-9]+” : { “type” : “array” } } } { “9ef84a26d” : [] }
Slide 17
Slide 17 text
additionalProperties { “type”: “object”, “properties” : { “price” : { “type” : “number” } }, “additionalProperties” : { “type” : “number” } } { “price” : 200, “discount” : 20 }
Slide 18
Slide 18 text
required { “type”: “object”, “properties” : { “price” : { “type” : “number”, “required” : true } } } { “price” : 200 }
Slide 19
Slide 19 text
items “product_id_list” : { “type” : “array”, “items” : { “type” : “string” } } { “product_id_list” : [“9ef84a26d”, “ac78dcmd2”] }
Slide 20
Slide 20 text
additionalItems { “type”: “array”, “items” : [ { “type” : “boolean” }, { “type” : “number” } ] “additionalItems” : { “type” : “string” } } [true, 1, “foo”, “bar”]
Slide 21
Slide 21 text
minItems,maxItems,uniqueItems “product_id_list” : { “type” : “array”, “items” : { “type” : “string” }, “minItems” : 2, “uniqueItems” : true } { “product_id_list” : [“foo”, “bar”] }
Slide 22
Slide 22 text
minimum,maximum “price” : { “type” : “number”, “minimum” : “1”, “maximum” : “20” } { “price” : 15 }
Slide 23
Slide 23 text
exclusiveMinimum,exclusiveMaxi mum “price” : { “type” : “number”, “minimum” : “1”, “maximum” : “20”, “exclusiveMinimum” : true } { “price” : 2 }
Slide 24
Slide 24 text
pattern,minLength,maxLength “item_number_id” : { “pattern” : ”[0-9]+”, “minLength” : 3 } { “item_number_id” : 976 }
Slide 25
Slide 25 text
enum “mall” : { “type” : number, “enum” : [0,1] } { “mall” : 0 }
Slide 26
Slide 26 text
extends { “item” : { “type”: “object”, “properties” : { “price” : { “type” : “number” } } } } { “item” : { “type”: “object”, “properties” : { “discount” : { “type” : “number” } }, “extends” : #/item } }
Slide 27
Slide 27 text
JSONNanny是什么 • 持续化存储平台 • ⽰示例存储 • 开发与设计⼯工具 • 接⼝口开放
Slide 28
Slide 28 text
Demo & QA