RESTful services on IBM Domino/XWork (ICON UK 21-22 Sept. 2015)

33 %
67 %
Information about RESTful services on IBM Domino/XWork (ICON UK 21-22 Sept. 2015)

Published on September 23, 2015

Author: JohnDalsgaard

Source: slideshare.net

1. 1 UKLUG 2012 – Cardiff, Wales REST services and IBM Domino/XWork A presentation for ICON UK 2015 21-22 September 2015 by John Dalsgaard

2. 2 UKLUG 2012 – Cardiff, Wales 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

3. 3 UKLUG 2012 – Cardiff, Wales 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 (Dalsgaard Data A/S) since 1998. ● IBM Champion for 2015

4. 4 UKLUG 2012 – Cardiff, Wales About me

5. 5 UKLUG 2012 – Cardiff, Wales 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”:

6. 6 UKLUG 2012 – Cardiff, Wales 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:

7. 7 UKLUG 2012 – Cardiff, Wales REST ● Wikipedia: Representational state transfer (REST) is an abstraction of the architecture of the World Wide Web; more precisely, REST is an architectural style consisting of a coordinated set of architectural constraints applied to components, connectors, and data elements, within a distributed hypermedia system. REST ignores the details of component implementation and protocol syntax in order to focus on the roles of components, the constraints upon their interaction with other components, and their interpretation of significant data elements..... WHAT?????

8. 8 UKLUG 2012 – Cardiff, Wales 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 not know... :-)

9. 9 UKLUG 2012 – Cardiff, Wales ”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

10. 10 UKLUG 2012 – Cardiff, Wales ”RESTful” web-service ● Designed for networked applications ● Using HTTP as a simple alternative to more complex mechanisms to connect between machines: – WebServices (SOAP, WSDLs etc.) – CORBA – RPC

11. 11 UKLUG 2012 – Cardiff, Wales ”RESTful” web-service ● Example – SOAP: <?xml version="1.0"?> <soap:Envelope xmlns: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 be sent via a request (HTTP POST) ● Example – RESTful web-service: http://www.acme.com/phonebook/UserDetails/12345 – … just a URL!! (HTTP GET) – simple....

12. 12 UKLUG 2012 – Cardiff, Wales JSON ● Wikipedia: JSON (/ d e sən/ jay-sən), orˈ ʒ ɪ JavaScript Object Notation, is an open standard format that uses human-readable text to transmit data objects consisting of attribute–value pairs. It is used primarily to transmit data between a server and web application, as an alternative to XML. Although originally derived from the JavaScript scripting language, JSON is a language-independent data format. Code for parsing and generating JSON data is readily available in a large variety of programming languages.

13. 13 UKLUG 2012 – Cardiff, Wales 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 text only, just like XML. Text can be read and used as a data format by any programming language...

14. 14 UKLUG 2012 – Cardiff, Wales 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"} ]}

15. 15 UKLUG 2012 – Cardiff, Wales 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.....

16. 16 UKLUG 2012 – Cardiff, Wales JSON and JavaScript Sample data: var text = ”{ 'name' : 'ICON UK', 'current' : 2015 }”; ● Create an object: – var iconUK = JSON.parse(text); ● Create text representation of an object: – var iconUKText = JSON.stringify(iconUK); ● Refer to attributes: – var name = iconUK.name; ● Add another attribute: – iconUK['venue'] = 'London'

17. 17 UKLUG 2012 – Cardiff, Wales Domino/XWork - out of the box ● Webservices (SOAP, XML, etc...) – Provider (server) – since 7.0 – Consumer (client) – since 8.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

18. 18 UKLUG 2012 – Cardiff, Wales 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

19. 19 UKLUG 2012 – Cardiff, Wales Enable web access ● HTTP Server must be started. – Check console: show tasks HTTP 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)

20. 20 UKLUG 2012 – Cardiff, Wales Check DAS Open: server.dom.dk/api – lists services and their state

21. 21 UKLUG 2012 – Cardiff, Wales Enable data service ● On Internet site document (configuration tab): ● Need to refresh http to take effect – tell http refresh

22. 22 UKLUG 2012 – Cardiff, Wales DAS: List all ”services” (db's) ● Open: server.dom.dk/api/data

23. 23 UKLUG 2012 – Cardiff, Wales DAS: Open a specific database ● Try: server.dom.dk/reports.nsf/api/data/collections → We need to enable DAS for the database

24. 24 UKLUG 2012 – Cardiff, Wales DAS: Enable for database ● On the advanced properties of the database: ● Select level in ”Allow Domino Data Service”: ● Important decision: – Views only or views and documents

25. 25 UKLUG 2012 – Cardiff, Wales DAS: Open database again ● Try: server.dom.dk/demo/json.nsf/api/data/collections

26. 26 UKLUG 2012 – Cardiff, Wales 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

27. 27 UKLUG 2012 – Cardiff, Wales 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

28. 28 UKLUG 2012 – Cardiff, Wales DAS: Open a document ● Try: server.dom.dk/.../documents/unid/33735D0BC... ● Requires ”Views and documents” to be set in DB props.

29. 29 UKLUG 2012 – Cardiff, Wales 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”

30. 30 UKLUG 2012 – Cardiff, Wales 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....

31. 31 UKLUG 2012 – Cardiff, Wales DAS: Create / delete document ● Use ”POST” to create a document with specified fields – url: …/documents?form=Person – You MUST add form to url ● Use ”DELETE” to remove the document entirely – url: …/documents/unid/33735D0BCE799....

32. 32 UKLUG 2012 – Cardiff, Wales 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

33. 33 UKLUG 2012 – Cardiff, Wales Live D EM O

34. 34 UKLUG 2012 – Cardiff, Wales Demo... ● Server: – Local VM with Domino 9.0.1FP2 on CentOS 6.7 – Extension Library (from IBM) – OpenNTF Domino API installed – OpenNTF Essentials installed ● A demo database (download from Bitbucket.org) – Showing an MVC pattern I use – Added a number of JSON demos – Is available for download ● Tool for testing: – Google Chrome Postman

35. 35 UKLUG 2012 – Cardiff, Wales DAS: Calendar service ● There is a ”catch” to enabling this service... – In the internet site document you have to type ”Calendar” as an option.... - it is not predefined

36. 36 UKLUG 2012 – Cardiff, Wales DAS: Calendar service ● Built on the new calendar backend classes in Domino/XWork 9.0.1 ● Current user's calendars, email address, and services 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

37. 37 UKLUG 2012 – Cardiff, Wales 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!

38. 38 UKLUG 2012 – Cardiff, Wales DAS: Calendar service ● You can also UPDATE existing events!!! – Using PUT and specifiying ALL fields under an ”events” object – as it is returned by creating or getting the event ● Use ”.../events/<exact id as from request> –including ”....-Lotus_Auto_Generated” !!! ● You should keep all fields – including system fields – If you don't → Defaults are applied... ● E.g. specifying only start time → end time set to same..!!! ● Failure to follow these guidelines will result in an error 400 ”Bad request”

39. 39 UKLUG 2012 – Cardiff, Wales Live D EM O

40. 40 UKLUG 2012 – Cardiff, Wales 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!!

41. 41 UKLUG 2012 – Cardiff, Wales 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

42. 42 UKLUG 2012 – Cardiff, Wales 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 that type of service

43. 43 UKLUG 2012 – Cardiff, Wales Ext. Lib. REST Service ● To call your service you open the XPage with the REST 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

44. 44 UKLUG 2012 – Cardiff, Wales 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

45. 45 UKLUG 2012 – Cardiff, Wales Live D EM O

46. 46 UKLUG 2012 – Cardiff, Wales 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!!)

47. 47 UKLUG 2012 – Cardiff, Wales 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

48. 48 UKLUG 2012 – Cardiff, Wales 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 your JSON for you! ● Does NOT require DAS to be enabled

49. 49 UKLUG 2012 – Cardiff, Wales Live D EM O

50. 50 UKLUG 2012 – Cardiff, Wales 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 ;-)

51. 51 UKLUG 2012 – Cardiff, Wales Questions?? ● Did you learn something? ● Could you use it? ?

52. 52 UKLUG 2012 – Cardiff, Wales Contact info Please feel free to contact me: John Dalsgaard Dalsgaard Data A/S Solbjergvej 42 Solbjerg DK-4270 Høng Phone: +45 4914-1271 Email: john@dalsgaard-data.dk www.dalsgaard-data.dk Blog: www.dalsgaard-data.eu Twitter: @john_dalsgaard, @DalsgaardDataAS Skype: john_dalsgaard

53. 53 UKLUG 2012 – Cardiff, Wales 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

54. 54 UKLUG 2012 – Cardiff, Wales 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)

Add a comment

Related pages

Dalsgaard Data A/S (Intl)

... 2015 af John i Blog. I have just been accepted to speak at ICON UK 21-22 September in London in England. I am going to speak about REST services in IBM ...
Read more

PC Pro - 2015.10 by Enitre - issuu

... £1 offer – visit subscribe. pcpro.co.uk now. AUGUST 2015. ... SEPT 2016. Terms and ... store in the UK, but the streaming service integrates with ...
Read more

Technical Challenges With Selenium - Scribd

Technical Challenges with Selenium WHAT ARE ... How to do web service testing using selenium ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
Read more

IBM Centers for Advanced Studies : Canada CAS - CAS Research

... In the IBM conference of the Centre for Advanced Studies on Collaborative Research (CASCON), Toronto, Ontario, Canada, November 2014. ...
Read more

oro.open.ac.uk

Bárcena, Elena; Read, Timothy; Underwood, Joshua; Obari , Hiroyuki; Cojocnean, Diana; Koyama, Toshiko; Pareja-Lora , Antonio; Calle, Cristina; Pomposo ...
Read more

Bal des Conscrits de Besse - EventsDiscovery.com

Monday, May 4, 2015 Venez nombreux!!!:) 5 0 × Contact × Log ...
Read more

Net – december 2015 by Dario Pintar - issuu

... Author: Dario Pintar, Name: net_____december_2015, Length ... SEPT 2015 Win the net award for ... IBM’s artificial intelligence service is also ...
Read more

Registration - Usenet.nl

Registration. 1 / 3 Yes, I want to learn about other offers via the newsletter. I can cancel it at any time. ...
Read more