rest services and ibm domino/xwork - dannotes 19-20. november 2014

49
DanNotes, 19-20 November 2014 © 2014, Dalsgaard Data A/S REST services and IBM Domino/XWork A presentation for DanNotes by John Dalsgaard

Upload: john-dalsgaard

Post on 02-Jul-2015

1.033 views

Category:

Technology


0 download

DESCRIPTION

Loose coupling of systems is key to future development! Why? Because it will allow us to change the "components" as we go along instead of creating monster big systems that are tied together using all sorts of different technologies. Webservices have been a way to obtain this over the last decade. More recently a special variant has become very popular, namely the JSON based REST service. Imagine you could extend your data out to the world outside your Domino environment? - in an easy way....! And imagine those data could easily be incorporated into other systems via standardized interfaces... Could that extend the value of your current systems further? Could this be a way to use new technologies to modernize your users' experience of working with your systems? Come and take away knowledge about how to open your Domino/XWork based systems up to the world outside using JSON based REST services. They are going to be key to future development in Domino/XWork - whether you want to use data in browser solutions (e.g. based on angular.js or ExtJS) or native mobile apps (built in whatever technology is best).

TRANSCRIPT

Page 1: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

REST services and

IBM Domino/XWork

A presentation for DanNotes

by John Dalsgaard

Page 2: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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.

Page 4: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 5: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 6: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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?????

Page 7: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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... :-)

Page 8: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

”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 9: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

”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

Page 10: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

”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 11: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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.

Page 12: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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...

Page 13: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 14: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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

Page 15: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

JSON and JavaScriptvar text = ”{ 'name' : 'DanNotes', current : 52 }”;

● Create an object:– var danNotes = JSON.parse(text);

● Create text representation of an object:– var danNotesText = JSON.stringify(danNotes);

● Refer to attributes:– var name = danNotes.name;

● Add another attribute:– danNotes['venue'] = 'Korsør'

Page 16: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

Domino/XWork – out of the box● Webservices (SOAP, XML, etc...)

– Consumer (client) – since 8.0– Provider (server) – since 7.0

But for now: 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 17: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 18: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 19: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

Check DAS

Open: server.dom.dk/api– lists service and

their state

Page 20: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

Enable data service● On Internet site document (configuration tab):

● Need to refresh http to take effect– tell http refresh

Page 21: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

DAS: List all ”services” (db's)● Open: server.dom.dk/api/data

Page 22: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

DAS: Open a specific database● Try: server.dom.dk/reports.nsf/api/data/collections

→ We need to enable DAS for the database

Page 23: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 24: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

DAS: Open database again● Try: server.dom.dk/demo/json.nsf/api/data/collections

Page 25: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 26: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 27: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

DAS: Open a document● Try: server.dom.dk/.../documents/unid/33735D0BC...

● Requires ”Views and documents” to be set in DB props.

Page 28: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 29: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 30: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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....

Page 31: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 32: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 33: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

DAS: Calendar service● Built on the new calendar backend classes in

Domino/XWork 9.0.1● Current user's calendars, email address, and

servicesserver.dom.dk/api/calendar

● Events from specific calendarserver.dom.dk/demo/cal.nsf/api/calendar/events

● Events from specific calendar (iCal format)server.dom.dk/.../events?format=iCalendar

Page 34: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 35: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 36: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 37: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 38: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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

Page 39: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 40: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 41: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

Build your own...● One use case:

– 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

Page 42: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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

Page 43: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

Demo...● Server:

– Local VM with Domino 9.0.1FP1 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– Will be made available for download

● Tool for testing: – Google Chrome Postman

Page 44: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 45: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

Live D

EMO

Page 46: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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 47: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

Questions??● Did you learn something?● Could you use it?

?

Page 48: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

Contact infoPlease 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 49: REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

DanNotes, 19-20 November 2014© 2014, Dalsgaard Data A/S

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