rest services and ibm domino/xworkengage.ug/.../$file/engage2015_restservices.pdf · 2018-10-07 ·...
TRANSCRIPT
![Page 1: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/1.jpg)
#engageug 1
REST services and
IBM Domino/XWork
A presentation for EngageUG 30-31 March 2015
by John Dalsgaard
![Page 2: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/2.jpg)
#engageug 2
Agenda
● About me● Webservices● REST & JSON● Domino/XWork – out of the box...
– Domino Access Service (DAS)– Extension Library controls– Build your own– Demos
● Round up
![Page 3: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/3.jpg)
#engageug 3
About me● Worked with Notes since 1995
version 4.5● Java since Notes 5.0.7 (2000)● Large web-apps. (40.000+ users)● Object Oriented approach since 1999 (yes, in
LotusScript...)● XPages & mobile apps (Appcelerator Titanium)....● Certified Principal/advanced administrator and
developer – all versions 4.6 → 9.0● Developer, project manager, IT manager – own
company since 1998.● IBM Champion for 2015
![Page 4: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/4.jpg)
#engageug 4
About me
![Page 5: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/5.jpg)
#engageug 5
Webservices
● What is a webservice?– Program to program communication– Implemementation independent– ”Contract” about interface
● Traditionally SOAP & XML...– Very ”verbose” (=not ”light”)– Needs pre-/post processing to ”extract” data
→ Meet the ”new kid on the block”:
![Page 6: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/6.jpg)
#engageug 6
REST services using JSON
● REST = REpresentational State Transfer● JSON = JavaScript Object Notation● Why?? → Loose coupling...
– Angular, Ext.js, etc.– Mobile apps/web apps
● Let's take a quick look at these terms:
![Page 7: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/7.jpg)
#engageug 7
REST
● Wikipedia:
Representational state transfer (REST) is an abstraction of thearchitecture of the World Wide Web; more precisely, REST is anarchitectural style consisting of a coordinated set of architecturalconstraints applied to components, connectors, and data elements,within a distributed hypermedia system. REST ignores the details ofcomponent implementation and protocol syntax in order to focus on theroles of components, the constraints upon their interaction with othercomponents, and their interpretation of significant data elements.....
WHAT?????
![Page 8: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/8.jpg)
#engageug 8
REST● Client-server architecture
– Uniform interface separates client from server● Stateless
– All info in request● Cacheable communications protocol
– Almost always HTTP● Uniform interface...
– HTML, URIs, XML, JSON, MIME, meta-data....
● Actually, WWW via HTTP can also be viewed as a REST-based architecture – so nothing new here that you did notknow... :-)
![Page 9: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/9.jpg)
#engageug 9
”RESTful” web-service
● Architectural style:– URI structure (base URI)– Internet media type. JSON – or: XML, Atom, …– Standard HTTP methods:
● GET● POST● PUT● DELETE
… also known as: CRUD (Create, Read, Update,Delete) methods
![Page 10: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/10.jpg)
#engageug 10
”RESTful” web-service
● Designed for networked applications● Using HTTP as a simple alternative to more
complex mechanisms to connect betweenmachines:– WebServices (SOAP, WSDLs etc.)– CORBA– RPC
![Page 11: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/11.jpg)
#engageug 11
”RESTful” web-service● Example – SOAP:
<?xml version="1.0"?><soap:Envelopexmlns:soap="http://www.w3.org/2001/12/soap-envelope"soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:body pb="http://www.acme.com/phonebook"> <pb:GetUserDetails> <pb:UserID>12345</pb:UserID> </pb:GetUserDetails> </soap:Body></soap:Envelope>
– … must to be sent via a request (HTTP POST)● Example – RESTful web-service:
http://www.acme.com/phonebook/UserDetails/12345
– … just a URL!! (HTTP GET) – simple....
![Page 12: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/12.jpg)
#engageug 12
JSON
● Wikipedia:JSON (/ˈdʒeɪsən/ jay-sən), or JavaScript Object Notation, is anopen standard format that uses human-readable text to transmitdata objects consisting of attribute–value pairs. It is used primarilyto transmit data between a server and web application, as analternative to XML.
Although originally derived from the JavaScript scripting language,JSON is a language-independent data format. Code for parsingand generating JSON data is readily available in a large variety ofprogramming languages.
![Page 13: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/13.jpg)
#engageug 13
JSON
● A syntax for storing & exchanging data● An easier to use alternative to XML● Is a lightweight data interchange format● Is language independant● Is ”self-describing” and easy to understand
JSON uses JavaScript syntax, but the JSON format is textonly, just like XML. Text can be read and used as a dataformat by any programming language...
![Page 14: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/14.jpg)
#engageug 14
JSON vs. XML● XML
<employees> <employee> <firstName>John</firstName> <lastName>Doe</lastName> </employee> <employee> <firstName>Anna</firstName> <lastName>Smith</lastName> </employee> <employee> <firstName>Peter</firstName> <lastName>Jones</lastName> </employee></employees>
● JSON{"employees":[
{"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"}]}
![Page 15: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/15.jpg)
#engageug 15
JSON syntax
● Object: {}{ 'text' : 'Hello world!', 'number' : 123, 'valid' : true }
● Array: []{ 'numbers' : [ 1, 2, 3 ] }
{ 'objects' : [ {'a':1}, {'b':2}, {'c':3} ] }● Value:
– string, number, object, array, boolean, null● Please note: NO date/time type...!!! Grrrrr.....
![Page 16: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/16.jpg)
#engageug 16
JSON and JavaScript
var text = ”{ 'name' : 'EngageUG', 'current' : 2015 }”;● Create an object:
– var engageUG = JSON.parse(text);● Create text representation of an object:
– var engageUGText = JSON.stringify(engageUG);● Refer to attributes:
– var name = engageUG.name;● Add another attribute:
– engageUG['venue'] = 'Ghent'
![Page 17: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/17.jpg)
#engageug 17
Domino/XWork - out of the box
● Webservices (SOAP, XML, etc...)– Consumer (client) – since 8.0– Provider (server) – since 7.0– Written in LotusScript/Java
RESTful service using JSON →
● Domino Access Services (DAS)– core service - since 9.0.1– data service - since 8.5.3 UP1 (~DDS)– calendar service - since 9.0.1
![Page 18: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/18.jpg)
#engageug 18
Domino Access Services
● Implemented as OSGi plugins/servlets● Based on Apache Wink
● How to enable & configure– Web access– Enable Domino Access Service (DAS)– Enable for database– Enable for specific elements
![Page 19: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/19.jpg)
#engageug 19
Enable web access● HTTP Server must be started.
– Check console: show tasksHTTP Server Listen for connect requests on TCP Port:80
● Use internet sites – just do it!– Activate in server document– Create Internet site document for domain
● After changes: restart task http● Check:
– Open the server on the port you saw on the console– http://server.dom.dk:80/ (leave out port if 80)
![Page 20: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/20.jpg)
#engageug 20
Check DAS
Open: server.dom.dk/api– lists service and
their state
![Page 21: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/21.jpg)
#engageug 21
Enable data service
● On Internet site document (configuration tab):
● Need to refresh http to take effect– tell http refresh
![Page 22: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/22.jpg)
#engageug 22
DAS: List all ”services” (db's)
● Open: server.dom.dk/api/data
![Page 23: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/23.jpg)
#engageug 23
DAS: Open a specific database
● Try: server.dom.dk/reports.nsf/api/data/collections
→ We need to enable DAS for the database
![Page 24: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/24.jpg)
#engageug 24
DAS: Enable for database
● On the advanced properties of the database:
● Select level in ”Allow Domino Data Service”:
● Important decision: Views and/or documents
![Page 25: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/25.jpg)
#engageug 25
DAS: Open database again● Try: server.dom.dk/demo/json.nsf/api/data/collections
![Page 26: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/26.jpg)
#engageug 26
DAS: Enable for view● We need to enable DAS for the view first● Open the view in Domino Designer● On the view properties – advanced tab
● Enable: ”Allow Domino Data Service operations”:
● Save the view, open it using the url returned
![Page 27: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/27.jpg)
#engageug 27
DAS: Open a view● Try: server.dom.dk/.../collections/unid/A892133953...
●
● Heureka!! - we see a list of all documents!● Also try: server.dom.dk/.../collections/name/persons
![Page 28: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/28.jpg)
#engageug 28
DAS: Open a document● Try: server.dom.dk/.../documents/unid/33735D0BC...
● Requires ”Views and documents” to be set in DB props.
![Page 29: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/29.jpg)
#engageug 29
DAS: Writing back...● Remember content type MUST be:
– application/json– Set ”Content-type” in header of request
● If you get ”405 Method not allowed”– Enable method in internet site
● By default these are NOT enabled:– PUT– PATCH– DELETE
– Or override header in your request● ”X-HTTP-Method-Override” : ”POST”
![Page 30: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/30.jpg)
#engageug 30
DAS: Save existing document
● Use ”PATCH” to change specific fields– url: …/documents/unid/33735D0BCE799....– updates only the fields in the request
● Use ”PUT” to change ALL fields– url: …/documents/unid/33735D0BCE799....– All fields are replaced with the fields from request –
fields not specified are blanked....
![Page 31: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/31.jpg)
#engageug 31
DAS: Create / delete document
● Use ”POST” to create a document with specifiedfields– url: …/documents?form=Person– You MUST add form to url
● Use ”DELETE” to remove the document entirely– url: …/documents/unid/33735D0BCE799....
![Page 32: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/32.jpg)
#engageug 32
DAS: Data service - more...
● See the design of a view:– //.../collections/name/persons/design
● Compute values on update of document– //.../documents/unid/33735D0BC...?
computewithform=true● Use ”normal” url actions to control view collection,
e.g.– //.../collections/name/persons?start=1&count=2
![Page 33: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/33.jpg)
#engageug 33
DAS: Calendar service
● There is a catch to enable this service...– In the internet site document you have to type
”Calendar” as an option.... - it is not predefined
![Page 34: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/34.jpg)
#engageug 34
DAS: Calendar service
● Built on the new calendar backend classes inDomino/XWork 9.0.1
● Current user's calendars, email address, andservices
server.dom.dk/api/calendar● Events from specific calendar
server.dom.dk/demo/cal.nsf/api/calendar/events● Events from specific calendar (iCal format)
server.dom.dk/.../events?format=iCalendar● Only shows events that have NOT started yet
![Page 35: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/35.jpg)
#engageug 35
DAS: Calendar service
● You can also CREATE new events!!!– Using POST and specifiying all fields under an
”events” object– Handles the various types: Meeting, appointment,
etc.– Will send invites to participants of meetings– Handles notifications– Actions for complete workflow: Accept, decline,
delegate, etc.– … and more!
![Page 36: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/36.jpg)
#engageug 36
Extension Library● Comes with the Domino 9.0.x server (and Domino
Designer)● Just needs to be enabled in XSP properties● Does NOT require DAS to be enabled● Provides easy to use controls:
– REST Service (data)– Remote Service (JSON-RPC)
● Allow you to run serverside code as a REST service...● Also provide support for:
– NSF and OSGi servlets... - advanced stuff!!
![Page 37: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/37.jpg)
#engageug 37
Extension Library
● Why would you use it...????
● → Allows further customizations– Include/exclude certain data columns– Include/exclude system columns (@....)– Calculate contents of own columns– Run code before/after CRUD operations– Sort and search– Create ”handles” (variable) to use in XPage as
datasources
![Page 38: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/38.jpg)
#engageug 38
Ext. Lib. REST Service● Create a new XPage● Drag a ”REST Service” component to it:● Fill in ”the blanks”
– pathInfo → identifies the service– Select service– Fill in the info
needed for thattype of service
![Page 39: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/39.jpg)
#engageug 39
Ext. Lib. REST Service
● To call your service you open the XPage with theREST Service control(s) and add the pathInfo, e.g.:
server.dom.dk/db.nsf/yourpage.xsp/persons– ...assuming you set pathInfo to ”persons” for one of
the REST Services on the ”yourpage” XPage
![Page 40: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/40.jpg)
#engageug 40
Ext. Lib. NSF servlet● You can register a servlet to e.g. give you a JSON
representation of a view● Extends DefaultServletFactory
– add a factory that maps to a service (e.g. view name)– Register in Code/Java/META-INF/services
● file: com.ibm.xsp.adapter.servletFactory→ Full name of servlet class
● Refer to using url, e.g.:server.dom.dk/db.nsf/xsp/services/Persons
● Does NOT require DAS to be enabled
![Page 41: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/41.jpg)
#engageug 41
Build your own...● Why??
– … using your own MVC – Java objects– Full control– Does NOT require DAS to be enabled
● Handy ”ingredients”– Java– XPages
● Use an ”XAgent” (or an NSF/OSGi servlet)● Select a JSON ”package”
– Built-in with XPages– Or others like GSON – (wrap as plugin!!)
![Page 42: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/42.jpg)
#engageug 42
Build your own...
● Use cases:– Generate JSON directly from your Java class– Consume your JSON POSTs directly by parsing
them to the corresponding Java class
→ Ready to use in your logic– Control e.g. date formating generally for all Date
fields● Eg. use ISO datetime format
![Page 43: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/43.jpg)
#engageug 43
Build your own...● LotusScript....
– You didn't expect me to say this!– An option if you have existing systems with business
logic written in LotusScript– Simple:
● print – correct content-type● print …. your JSON (as text)
– … but I would not advice to build new this way →you would like to use a library/package to build yourJSON for you!
● Does NOT require DAS to be enabled
![Page 44: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/44.jpg)
#engageug 44
Demo...● Server:
– Local VM with Domino 9.0.1FP2 on CentOS 6.6– Extension Library (from IBM)– OpenNTF Domino API installed– OpenNTF Essentials installed
● A demo database– Showing an MVC pattern I use– Added a number of JSON demos– Is available for download
● Tool for testing: – Google Chrome Postman
![Page 45: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/45.jpg)
#engageug 45
Demo...● DAS
– core– data– calendar
● Extension Library REST Service● Build you own
– Built-in JSON classes– GSON based on Java objects– LotusScript...
● Download DB from Bitbucket.org
![Page 46: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/46.jpg)
#engageug 46
Live DEMO
![Page 47: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/47.jpg)
#engageug 47
Round Up● What are REST and JSON● GET, POST, PUT, DELETE – ~CRUD● Domino Access Services – out of the box
– Data– Calendar
● Extension Library– REST Service– (Remote Service)
● Build own solution– Java & JSON ”package” - …. & LotusScript ;-)
![Page 48: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/48.jpg)
#engageug 48
Questions??
● Did you learn something?● Could you use it?
?
![Page 49: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/49.jpg)
#engageug 49
Contact info
Please feel free to contact me:
John DalsgaardDalsgaard Data A/SSolbjergvej 42SolbjergDK-4270 Høng
Phone: +45 4914-1271Email: [email protected]: www.dalsgaard-data.euTwitter: @john_dalsgaard, @DalsgaardDataASSkype: john_dalsgaard
![Page 50: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/50.jpg)
#engageug 50
Sources & links● Wikipedia: Representational state transfer● Learn REST: A Tutorial● VIEW Tips: Brad Balassaitis on JSON-RPC● IBM Domino Access Services 9.0.1● Wikipedia: JSON / JavaScript Object Notation● Introducing JSON● JSON Tutorial● REST services in Domino - Domino Access Services (PDF)● Extension Library REST Services (PDF)● Extension Library on OpenNTF (includes demo db)● JSON test client: Chrome Postman● Wrap an existing jar into a plugin● Demo-DB on Bitbucket.org
![Page 51: REST services and IBM Domino/XWorkengage.ug/.../$file/Engage2015_RESTservices.pdf · 2018-10-07 · REST Wikipedia: Representational state transfer (REST) is an abstraction of the](https://reader034.vdocument.in/reader034/viewer/2022042621/5f72c57b07e2f762cc462082/html5/thumbnails/51.jpg)
#engageug 51
Sources & links● For the advanced – check these frameworks....
– Apache Wink (what DAS etc. is build on)– … and Wink with OpenNTF Extension Library
– Jersey
– Specifikation: Java API for RESTful Services (JAX-RS)