Download - Of REST and Beans
![Page 1: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/1.jpg)
Of REST and BeansDoor Thimo Jansen
![Page 2: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/2.jpg)
Introductie
* Thimo Jansen
* IBM Domino web developer
* http://www.thimojansenit.nl
![Page 3: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/3.jpg)
Agenda
* REST
* JSON
* Architectuur
* Demo
* Code
![Page 4: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/4.jpg)
REST
![Page 5: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/5.jpg)
REST // Definitie
Representational State Transfer
A set of recommended architectural constraints in order for a system to be described as RESTful
Door Roy Fielding, ook HTTP 1.0 en 1.1
![Page 6: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/6.jpg)
REST // Constraints
* Client - Server
* Stateless
* Cacheable
* Layered system
* Code on demand
* Uniform interface
![Page 7: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/7.jpg)
REST // Communicatie
Data uitwisseling
Client doet weergave
Server doet opslag
![Page 8: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/8.jpg)
REST // Communicatie
Via HTTP
* GET - Ophalen
* POST - Aanmaken
* PUT - Vervangen
* DELETE - Verwijderen
Lijkt op CRUD
![Page 9: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/9.jpg)
JSON
![Page 10: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/10.jpg)
JSON // Definitie
JavaScript Object Notation
* lightweight text-data interchange
* taal onafhankelijk
* "self-describing", easy to understand
![Page 11: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/11.jpg)
JSON // Voorbeeld
Object:
{
"firstName":"John",
"lastName":"Doe"
}
![Page 12: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/12.jpg)
JSON // Voorbeeld
Array:
[
100, 200, 300
]
![Page 13: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/13.jpg)
JSON // Voorbeeld
Array met twee objecten:
[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Hello", "lastName":"World"}
]
![Page 14: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/14.jpg)
JSON // Voorbeeld
Object met arrays en objecten:
{
"event":"XPages & Beer",
"location":"Houten",
"speakers" : [
{"firstName":"Tom", "lastName":"Steenbergen"},
{"firstName":"Thimo", "lastName":"Jansen"},
{"firstName":"Erik", "lastName":"van der Arend"}
]
}
(Syntax: http://www.json.org/, JSON Validator: http://jsonlint.com/)
![Page 15: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/15.jpg)
JSON // Conversie
Javascript -> JSON
XPages: toJson(myObject);
Browser: JSON.stringify(myObject);
![Page 16: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/16.jpg)
JSON // Conversie
JSON -> Javascript
var myJSON = '{"firstName":"John", "lastName":"Doe"}';
XPages: fromJson(myJSON);
Browser: JSON.parse(myJSON);
![Page 17: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/17.jpg)
JSON // Conversie
Test of iets JSON is
XPages: isJson('{<some JSON string>}');
![Page 18: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/18.jpg)
JSON vs REST
JSON != Hypermedia
JSON != REST
Ja, en?
http://norestforjson.blogspot.nl/2012/08/json-is-not-restful.htmlhttp://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
![Page 19: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/19.jpg)
Architectuur
![Page 20: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/20.jpg)
Architectuur // HTML
Browser
Web server
Request GET/POST
Response HTML
Application logic (SSJS, Beans)
![Page 21: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/21.jpg)
Architectuur // REST
Browser
Web server
Request GET/POST
Response HTML
Application logic (SSJS, Beans)
AJAX Request GET/POST/PUT/DELETE
Response JSON
![Page 22: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/22.jpg)
Architectuur // REST
Browser
Web server
Request GET/POST
Response HTML
Application logic
AJAX Request GET/POST/PUT/DELETE
Response JSON
Web server
Application logic
![Page 23: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/23.jpg)
Demo
![Page 24: Of REST and Beans](https://reader034.vdocuments.mx/reader034/viewer/2022042623/54b743824a7959746e8b461a/html5/thumbnails/24.jpg)
Code