View
9.698
Download
1
Category
Preview:
Citation preview
Persistent Computing on the Web with
JSON Schema and Referencing
Kris Zyp
Copyright SitePen, Inc. 2008. All Rights Reserved
Overview
•JSON Referencing
•JSON Schema
•The possiblities...
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON + Hyperlinks = JSON Referencing
Copyright SitePen, Inc. 2008. All Rights Reserved
http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/
JSON Referencing
•Cyclic
•Multiple references
•Cross-message references
•Cross-site references
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Referencing (ID Based)
{“name”:”Kris Zyp”,“id”:”kriszyp”,“children”:[{“id”:”jennikazyp”,“name”:”Jennika Zyp”}],“spouse”:{“name”:”Nicole Zyp”,“spouse”:{“$ref”:”kriszyp”},“children”:[{“$ref”:”jennikazyp”}]
}}
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Referencing (Path Based)
{“name”:”Kris Zyp”,“children”:[{“name”:”Jennika Zyp”}],“spouse”:{“name”:”Nicole Zyp”,“spouse”:{“$ref”:”#”},“children”:{“$ref”:”#.children”}
}}
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Referencing (ID + Path)
{“name”:”Kris Zyp”,“id”:”kriszyp”,“children”:[{“name”:”Jennika Zyp”}],“friends”:[{“$ref”:”jesse#.spouse”}]
}
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON + Schema = JSON Schema
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Schema
schema:{"description":"A person", "type":"object", "properties": {"name": {"type":"string"}, "age" : {"type":"integer", "maximum":125}}}
instance:{“name”:”Kris”, “age”:30}
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Schema
Schema:{"description":"A person", "type":"object", "properties": {"name": {"type":"string"}, "age" : {"type":"integer", "maximum":125,
“optional”:true}, “friends”: {“type”:”array”,
“items”:{“type”:”object”}} }}
instance:{“name”:”Kris”, “friends”:[{“name”:”Nikki”}]}
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Schema
Schema:{“type”:”array”,“items”:[{“type”:”string”},{“type”:”number”}]
}
instance:[“foo”,44]
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Schema
Schema:{"description":"A person", "type":["object",”string”]}
instance:“foo”
instance:{“prop”:3}
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Schema
Schema:{"description":"A person", "type":["object",”string”]}
instance:“foo”
instance:{“prop”:3}
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Schema
schema:{"description":"A person", "type":"object", "properties": {"name": {"type":"string"}, "gender" : {"type":"string",
"enum”:[“male”,”female”]}}, “additionalProperties”:false}
instance:{“name”:”Kris”, “gender”:”male”}
Copyright SitePen, Inc. 2008. All Rights Reserved
What can we do with these?
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Schema + JSON Referencing
{"description":"A Social Person", “id”:”socialperson”, "type":"object", "properties": {"name": {"type":"string"}, "age" : {
"type":"integer", "maximum":125
}, "friends" : {
“type” : ”array”,“items” : {“$ref”:”socialperson”}
} }, “extends”:{“$ref”:”person”}}
Copyright SitePen, Inc. 2008. All Rights Reserved
http://blog.medryx.org/2008/07/24/jsonreststore-overview/
JSON Referencing + REST
•Lazy loading - Generic clients can auto-load objects as necessary
•Object identificationcan be used for saving state changes
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Referencing + REST
GET /Person/3
{ “name”:”Kris”, “friends”:[
{“$ref”:”4”},{“$ref”:”5”}
]}
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Referencing + JSON-RPC
POST /person/kriszyp
{“method”:”addFriend”,“id”:”1”,“params”:[{“$ref”:”jessesmith”}]
}
Copyright SitePen, Inc. 2008. All Rights Reserved
Applying data definitions to code
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Schema + Typed Code
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Schema Interfaces
Copyright SitePen, Inc. 2008. All Rights Reserved
JSON Schema Interface
{"description":"A person", "type":"object", "properties": {"name": {"type":"string"} }, “methods”:{ “getName”:{“returns”:{“type”:”string”}, “params”:[]}, “setName”:{“params”:[{“type”:”string”}]}, }}
Copyright SitePen, Inc. 2008. All Rights Reserved
Cross-site Referencing
{“name”:”Kris Zyp”,“id”:”kriszyp”,“friends”:[{“$ref”:”http://thezyps.com/person/nikki”},{“$ref”:”http://social.com/user/33”}
]}
Copyright SitePen, Inc. 2008. All Rights Reserved
Cross-site Typing
Copyright SitePen, Inc. 2008. All Rights Reserved
Mobile code (run anywhere)
•Code can run anywhere
-Server JavaScript Environment
-Browser JavaScript Environment
•Consistent persisted data structures across environments
Copyright SitePen, Inc. 2008. All Rights Reserved
Connecting and structuring data for the
futureJSON Schema and JSON
Referencing
Copyright SitePen, Inc. 2008. All Rights Reserved
Recommended