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