Of REST and Beans
  Door Thimo Jansen
Introductie
* Thimo Jansen
* IBM Domino web developer
* http://www.thimojansenit.nl
Agenda
* REST
* JSON
* Architectuur
* Demo
* Code
REST
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
REST // Constraints
 * Client - Server
 * Stateless
 * Cacheable
 * Layered system
 * Code on demand
 * Uniform interface
REST // Communicatie
 Data uitwisseling
 Client doet weergave
 Server doet opslag
REST // Communicatie
  Via HTTP
  * GET - Ophalen
  * POST - Aanmaken
  * PUT - Vervangen
  * DELETE - Verwijderen
  Lijkt op CRUD
JSON
JSON // Definitie
       JavaScript Object Notation


* lightweight text-data interchange
* taal onafhankelijk
* "self-describing", easy to understand
JSON // Voorbeeld
Object:
{
    "firstName":"John",
    "lastName":"Doe"
}
JSON // Voorbeeld
Array:
[
    100, 200, 300
]
JSON // Voorbeeld
Array met twee objecten:
[

        {"firstName":"John", "lastName":"Doe"},

        {"firstName":"Hello", "lastName":"World"}

    ]
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/)
JSON // Conversie
           Javascript -> JSON


XPages:   toJson(myObject);
Browser: JSON.stringify(myObject);
JSON // Conversie
               JSON -> Javascript
var myJSON = '{"firstName":"John", "lastName":"Doe"}';



XPages:     fromJson(myJSON);
Browser: JSON.parse(myJSON);
JSON // Conversie
         Test of iets JSON is


XPages: isJson('{<some JSON string>}');
JSON vs REST
                   JSON != Hypermedia
                   JSON != REST
                   Ja, en?




http://norestforjson.blogspot.nl/2012/08/json-is-not-restful.html
http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Architectuur
Architectuur // HTML

             Browser
  Request              Response
  GET/POST             HTML

          Web server


 Application logic (SSJS, Beans)
Architectuur // REST

                      Browser
                            AJAX Request
Request       Response                       Response
                            GET/POST/PUT/
GET/POST      HTML                           JSON
                            DELETE

                    Web server


           Application logic (SSJS, Beans)
Architectuur // REST

                     Browser
                         AJAX Request       Response
Request     Response
                         GET/POST/PUT/      JSON
GET/POST    HTML
                         DELETE

   Web server                    Web server


 Application logic             Application logic
Demo
Code
Contact
   thimo@jansenit.nl // @thimo
   http://blog.thimojansenit.nl
http://linkedin.com/in/thimojansen

Of REST and Beans

  • 1.
    Of REST andBeans Door Thimo Jansen
  • 2.
    Introductie * Thimo Jansen *IBM Domino web developer * http://www.thimojansenit.nl
  • 3.
    Agenda * REST * JSON *Architectuur * Demo * Code
  • 4.
  • 5.
    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
  • 6.
    REST // Constraints * Client - Server * Stateless * Cacheable * Layered system * Code on demand * Uniform interface
  • 7.
    REST // Communicatie Data uitwisseling Client doet weergave Server doet opslag
  • 8.
    REST // Communicatie Via HTTP * GET - Ophalen * POST - Aanmaken * PUT - Vervangen * DELETE - Verwijderen Lijkt op CRUD
  • 9.
  • 10.
    JSON // Definitie JavaScript Object Notation * lightweight text-data interchange * taal onafhankelijk * "self-describing", easy to understand
  • 11.
    JSON // Voorbeeld Object: { "firstName":"John", "lastName":"Doe" }
  • 12.
  • 13.
    JSON // Voorbeeld Arraymet twee objecten: [ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Hello", "lastName":"World"} ]
  • 14.
    JSON // Voorbeeld Objectmet 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/)
  • 15.
    JSON // Conversie Javascript -> JSON XPages: toJson(myObject); Browser: JSON.stringify(myObject);
  • 16.
    JSON // Conversie JSON -> Javascript var myJSON = '{"firstName":"John", "lastName":"Doe"}'; XPages: fromJson(myJSON); Browser: JSON.parse(myJSON);
  • 17.
    JSON // Conversie Test of iets JSON is XPages: isJson('{<some JSON string>}');
  • 18.
    JSON vs REST JSON != Hypermedia JSON != REST Ja, en? http://norestforjson.blogspot.nl/2012/08/json-is-not-restful.html http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
  • 19.
  • 20.
    Architectuur // HTML Browser Request Response GET/POST HTML Web server Application logic (SSJS, Beans)
  • 21.
    Architectuur // REST Browser AJAX Request Request Response Response GET/POST/PUT/ GET/POST HTML JSON DELETE Web server Application logic (SSJS, Beans)
  • 22.
    Architectuur // REST Browser AJAX Request Response Request Response GET/POST/PUT/ JSON GET/POST HTML DELETE Web server Web server Application logic Application logic
  • 23.
  • 24.
  • 25.
    Contact thimo@jansenit.nl // @thimo http://blog.thimojansenit.nl http://linkedin.com/in/thimojansen