SlideShare une entreprise Scribd logo
1  sur  49
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
REST services 
and 
IBM Domino/XWork 
A presentation for DanNotes 
by John Dalsgaard
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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.
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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”:
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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:
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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?????
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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... :-)
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
”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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
”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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
”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 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....
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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.
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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...
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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"} 
]}
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
JSON and JavaScript 
var 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'
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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)
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
Check DAS 
Open: server.dom.dk/api 
– lists service and 
their state
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
Enable data service 
● On Internet site document (configuration tab): 
● Need to refresh http to take effect 
– tell http refresh
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
DAS: List all ”services” (db's) 
● Open: server.dom.dk/api/data
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
DAS: Open a specific database 
● Try: server.dom.dk/reports.nsf/api/data/collections 
→ We need to enable DAS for the database
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
DAS: Enable for database 
● On the advanced properties of the database: 
● Select level in ”Allow Domino Data Service”: 
● Important decision: Views and/or documents
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
DAS: Open database again 
● Try: server.dom.dk/demo/json.nsf/api/data/collections
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
DAS: Open a document 
● Try: server.dom.dk/.../documents/unid/33735D0BC... 
● Requires ”Views and documents” to be set in DB props.
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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”
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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....
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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....
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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!
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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!!
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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!!)
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
Live DEMO
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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 ;-)
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
Questions?? 
● Did you learn something? 
● Could you use it? 
?
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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
© 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 
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

Contenu connexe

Tendances

Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)Esun Kim
 
Vacuum in PostgreSQL
Vacuum in PostgreSQLVacuum in PostgreSQL
Vacuum in PostgreSQLRafia Sabih
 
Primeiros passos com a API do Zabbix
Primeiros passos com a API do ZabbixPrimeiros passos com a API do Zabbix
Primeiros passos com a API do ZabbixJanssen Lima
 
Modern JavaScript Frameworks: Angular, React & Vue.js
Modern JavaScript Frameworks: Angular, React & Vue.jsModern JavaScript Frameworks: Angular, React & Vue.js
Modern JavaScript Frameworks: Angular, React & Vue.jsJonas Bandi
 
Building Windows Images with Packer
Building Windows Images with PackerBuilding Windows Images with Packer
Building Windows Images with PackerMatt Wrock
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!Craig Schumann
 
Speed Up Your APEX Apps with JSON and Handlebars
Speed Up Your APEX Apps with JSON and HandlebarsSpeed Up Your APEX Apps with JSON and Handlebars
Speed Up Your APEX Apps with JSON and HandlebarsMarko Gorički
 
Laravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web ArtisansLaravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web ArtisansWindzoon Technologies
 
Here Be Dragons: The Unexplored Land of Active Directory ACLs
Here Be Dragons: The Unexplored Land of Active Directory ACLsHere Be Dragons: The Unexplored Land of Active Directory ACLs
Here Be Dragons: The Unexplored Land of Active Directory ACLsAndy Robbins
 
Network Automation: Ansible 101
Network Automation: Ansible 101Network Automation: Ansible 101
Network Automation: Ansible 101APNIC
 
Airflow at lyft for Airflow summit 2020 conference
Airflow at lyft for Airflow summit 2020 conferenceAirflow at lyft for Airflow summit 2020 conference
Airflow at lyft for Airflow summit 2020 conferenceTao Feng
 
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Toshiaki Maki
 
OrientDB introduction - NoSQL
OrientDB introduction - NoSQLOrientDB introduction - NoSQL
OrientDB introduction - NoSQLLuca Garulli
 
Unrevealed Story Behind Viettel Network Cloud Hotpot | Đặng Văn Đại, Hà Mạnh ...
Unrevealed Story Behind Viettel Network Cloud Hotpot | Đặng Văn Đại, Hà Mạnh ...Unrevealed Story Behind Viettel Network Cloud Hotpot | Đặng Văn Đại, Hà Mạnh ...
Unrevealed Story Behind Viettel Network Cloud Hotpot | Đặng Văn Đại, Hà Mạnh ...Vietnam Open Infrastructure User Group
 
Building IAM for OpenStack
Building IAM for OpenStackBuilding IAM for OpenStack
Building IAM for OpenStackSteve Martinelli
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpen Gurukul
 

Tendances (20)

Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)
 
Vacuum in PostgreSQL
Vacuum in PostgreSQLVacuum in PostgreSQL
Vacuum in PostgreSQL
 
Primeiros passos com a API do Zabbix
Primeiros passos com a API do ZabbixPrimeiros passos com a API do Zabbix
Primeiros passos com a API do Zabbix
 
PWA
PWAPWA
PWA
 
Modern JavaScript Frameworks: Angular, React & Vue.js
Modern JavaScript Frameworks: Angular, React & Vue.jsModern JavaScript Frameworks: Angular, React & Vue.js
Modern JavaScript Frameworks: Angular, React & Vue.js
 
Express JS
Express JSExpress JS
Express JS
 
Building Windows Images with Packer
Building Windows Images with PackerBuilding Windows Images with Packer
Building Windows Images with Packer
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!
 
Speed Up Your APEX Apps with JSON and Handlebars
Speed Up Your APEX Apps with JSON and HandlebarsSpeed Up Your APEX Apps with JSON and Handlebars
Speed Up Your APEX Apps with JSON and Handlebars
 
Laravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web ArtisansLaravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web Artisans
 
Here Be Dragons: The Unexplored Land of Active Directory ACLs
Here Be Dragons: The Unexplored Land of Active Directory ACLsHere Be Dragons: The Unexplored Land of Active Directory ACLs
Here Be Dragons: The Unexplored Land of Active Directory ACLs
 
Network Automation: Ansible 101
Network Automation: Ansible 101Network Automation: Ansible 101
Network Automation: Ansible 101
 
Airflow at lyft for Airflow summit 2020 conference
Airflow at lyft for Airflow summit 2020 conferenceAirflow at lyft for Airflow summit 2020 conference
Airflow at lyft for Airflow summit 2020 conference
 
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1
 
OrientDB introduction - NoSQL
OrientDB introduction - NoSQLOrientDB introduction - NoSQL
OrientDB introduction - NoSQL
 
Unrevealed Story Behind Viettel Network Cloud Hotpot | Đặng Văn Đại, Hà Mạnh ...
Unrevealed Story Behind Viettel Network Cloud Hotpot | Đặng Văn Đại, Hà Mạnh ...Unrevealed Story Behind Viettel Network Cloud Hotpot | Đặng Văn Đại, Hà Mạnh ...
Unrevealed Story Behind Viettel Network Cloud Hotpot | Đặng Văn Đại, Hà Mạnh ...
 
MongoDB and Node.js
MongoDB and Node.jsMongoDB and Node.js
MongoDB and Node.js
 
Building IAM for OpenStack
Building IAM for OpenStackBuilding IAM for OpenStack
Building IAM for OpenStack
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQL
 
Protocol Buffers
Protocol BuffersProtocol Buffers
Protocol Buffers
 

En vedette

XPages Binary Output
XPages Binary OutputXPages Binary Output
XPages Binary OutputJohnFoldager
 
jmp206 - Lotus Domino Web Services Jumpstart
jmp206 - Lotus Domino Web Services Jumpstartjmp206 - Lotus Domino Web Services Jumpstart
jmp206 - Lotus Domino Web Services JumpstartBill Buchan
 
Domino OSGi Development
Domino OSGi DevelopmentDomino OSGi Development
Domino OSGi DevelopmentPaul Fiore
 
IBM Connect 2017 - Beyond Domino Designer
IBM Connect 2017 - Beyond Domino DesignerIBM Connect 2017 - Beyond Domino Designer
IBM Connect 2017 - Beyond Domino DesignerStephan H. Wissel
 
A (XPages) developers guide to Cloudant - MeetIT
A (XPages) developers guide to Cloudant - MeetITA (XPages) developers guide to Cloudant - MeetIT
A (XPages) developers guide to Cloudant - MeetITFrank van der Linden
 
DEV-1129 How Watson, Bluemix, Cloudant, and XPages Can Work Together In A Rea...
DEV-1129 How Watson, Bluemix, Cloudant, and XPages Can Work Together In A Rea...DEV-1129 How Watson, Bluemix, Cloudant, and XPages Can Work Together In A Rea...
DEV-1129 How Watson, Bluemix, Cloudant, and XPages Can Work Together In A Rea...Frank van der Linden
 
OpenNTF Domino API (ODA): Super-Charging Domino Development
OpenNTF Domino API (ODA): Super-Charging Domino DevelopmentOpenNTF Domino API (ODA): Super-Charging Domino Development
OpenNTF Domino API (ODA): Super-Charging Domino DevelopmentPaul Withers
 

En vedette (9)

Modernization Math
Modernization MathModernization Math
Modernization Math
 
XPages Binary Output
XPages Binary OutputXPages Binary Output
XPages Binary Output
 
jmp206 - Lotus Domino Web Services Jumpstart
jmp206 - Lotus Domino Web Services Jumpstartjmp206 - Lotus Domino Web Services Jumpstart
jmp206 - Lotus Domino Web Services Jumpstart
 
Domino OSGi Development
Domino OSGi DevelopmentDomino OSGi Development
Domino OSGi Development
 
IBM Connect 2017 - Beyond Domino Designer
IBM Connect 2017 - Beyond Domino DesignerIBM Connect 2017 - Beyond Domino Designer
IBM Connect 2017 - Beyond Domino Designer
 
A (XPages) developers guide to Cloudant - MeetIT
A (XPages) developers guide to Cloudant - MeetITA (XPages) developers guide to Cloudant - MeetIT
A (XPages) developers guide to Cloudant - MeetIT
 
DEV-1129 How Watson, Bluemix, Cloudant, and XPages Can Work Together In A Rea...
DEV-1129 How Watson, Bluemix, Cloudant, and XPages Can Work Together In A Rea...DEV-1129 How Watson, Bluemix, Cloudant, and XPages Can Work Together In A Rea...
DEV-1129 How Watson, Bluemix, Cloudant, and XPages Can Work Together In A Rea...
 
OpenNTF Domino API (ODA): Super-Charging Domino Development
OpenNTF Domino API (ODA): Super-Charging Domino DevelopmentOpenNTF Domino API (ODA): Super-Charging Domino Development
OpenNTF Domino API (ODA): Super-Charging Domino Development
 
GraphQL 101
GraphQL 101GraphQL 101
GraphQL 101
 

Similaire à REST services and IBM Domino/XWork - DanNotes 19-20. november 2014

RESTful services on IBM Domino/XWork (ICON UK 21-22 Sept. 2015)
RESTful services on IBM Domino/XWork (ICON UK 21-22 Sept. 2015)RESTful services on IBM Domino/XWork (ICON UK 21-22 Sept. 2015)
RESTful services on IBM Domino/XWork (ICON UK 21-22 Sept. 2015)John Dalsgaard
 
Serious Sencha - Data Layer and Server-Side REST Interface
Serious Sencha - Data Layer and Server-Side REST InterfaceSerious Sencha - Data Layer and Server-Side REST Interface
Serious Sencha - Data Layer and Server-Side REST InterfaceKlaus Hofeditz
 
DORS/CLUC How to setup Kolab and Seafile as your personal secure data bank
DORS/CLUC How to setup Kolab and Seafile as your personal secure data bankDORS/CLUC How to setup Kolab and Seafile as your personal secure data bank
DORS/CLUC How to setup Kolab and Seafile as your personal secure data bankhcderaad
 
RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)
RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)
RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)John Dalsgaard
 
Get your instance by name integration of nova, neutron and designate
Get your instance by name  integration of nova, neutron and designateGet your instance by name  integration of nova, neutron and designate
Get your instance by name integration of nova, neutron and designateMiguel Lavalle
 
Lasso and Couchdb : the happy couple
Lasso and Couchdb : the happy coupleLasso and Couchdb : the happy couple
Lasso and Couchdb : the happy coupleAri Najarian
 
RESTful OSGi middleware for NoSQL databases with Docker
RESTful OSGi middleware for NoSQL databases with DockerRESTful OSGi middleware for NoSQL databases with Docker
RESTful OSGi middleware for NoSQL databases with DockerBertrand Delacretaz
 
Adding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSASAdding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSASsumedha.r
 
Adriano Di Luzio - Davvy - PyconSEI Talk
Adriano Di Luzio - Davvy - PyconSEI TalkAdriano Di Luzio - Davvy - PyconSEI Talk
Adriano Di Luzio - Davvy - PyconSEI Talkaldur999
 
Extending Cassandra with Doradus OLAP for High Performance Analytics
Extending Cassandra with Doradus OLAP for High Performance AnalyticsExtending Cassandra with Doradus OLAP for High Performance Analytics
Extending Cassandra with Doradus OLAP for High Performance Analyticsrandyguck
 
How happy they became with H2O/mruby and the future of HTTP
How happy they became with H2O/mruby and the future of HTTPHow happy they became with H2O/mruby and the future of HTTP
How happy they became with H2O/mruby and the future of HTTPIchito Nagata
 
Sql on everything with drill
Sql on everything with drillSql on everything with drill
Sql on everything with drillJulien Le Dem
 
MVC and IBM XPages - from #DanNotes in Korsør (DK) 28 November 2013
MVC and IBM XPages - from #DanNotes in Korsør (DK) 28 November 2013MVC and IBM XPages - from #DanNotes in Korsør (DK) 28 November 2013
MVC and IBM XPages - from #DanNotes in Korsør (DK) 28 November 2013John Dalsgaard
 
iguazio - nuclio Meetup Nov 30th
iguazio - nuclio Meetup Nov 30thiguazio - nuclio Meetup Nov 30th
iguazio - nuclio Meetup Nov 30thiguazio
 
Teradata - Hadoop profile
Teradata - Hadoop profileTeradata - Hadoop profile
Teradata - Hadoop profileSantosh Dandge
 
Deploying Perl apps on dotCloud
Deploying Perl apps on dotCloudDeploying Perl apps on dotCloud
Deploying Perl apps on dotClouddaoswald
 
Webinar about Spring Data Neo4j 4
Webinar about Spring Data Neo4j 4Webinar about Spring Data Neo4j 4
Webinar about Spring Data Neo4j 4GraphAware
 
Beautiful Monitoring With Grafana and InfluxDB
Beautiful Monitoring With Grafana and InfluxDBBeautiful Monitoring With Grafana and InfluxDB
Beautiful Monitoring With Grafana and InfluxDBleesjensen
 
Hong Kong Drupal User Group - Sep 13th
Hong Kong Drupal User Group - Sep 13thHong Kong Drupal User Group - Sep 13th
Hong Kong Drupal User Group - Sep 13thWong Hoi Sing Edison
 

Similaire à REST services and IBM Domino/XWork - DanNotes 19-20. november 2014 (20)

RESTful services on IBM Domino/XWork (ICON UK 21-22 Sept. 2015)
RESTful services on IBM Domino/XWork (ICON UK 21-22 Sept. 2015)RESTful services on IBM Domino/XWork (ICON UK 21-22 Sept. 2015)
RESTful services on IBM Domino/XWork (ICON UK 21-22 Sept. 2015)
 
Serious Sencha - Data Layer and Server-Side REST Interface
Serious Sencha - Data Layer and Server-Side REST InterfaceSerious Sencha - Data Layer and Server-Side REST Interface
Serious Sencha - Data Layer and Server-Side REST Interface
 
DORS/CLUC How to setup Kolab and Seafile as your personal secure data bank
DORS/CLUC How to setup Kolab and Seafile as your personal secure data bankDORS/CLUC How to setup Kolab and Seafile as your personal secure data bank
DORS/CLUC How to setup Kolab and Seafile as your personal secure data bank
 
RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)
RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)
RESTful services on IBM Domino/XWork (SUTOL 11 Nov. 2015 in Prague)
 
Get your instance by name integration of nova, neutron and designate
Get your instance by name  integration of nova, neutron and designateGet your instance by name  integration of nova, neutron and designate
Get your instance by name integration of nova, neutron and designate
 
Lasso and Couchdb : the happy couple
Lasso and Couchdb : the happy coupleLasso and Couchdb : the happy couple
Lasso and Couchdb : the happy couple
 
RESTful OSGi middleware for NoSQL databases with Docker
RESTful OSGi middleware for NoSQL databases with DockerRESTful OSGi middleware for NoSQL databases with Docker
RESTful OSGi middleware for NoSQL databases with Docker
 
Adding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSASAdding Data into your SOA with WSO2 WSAS
Adding Data into your SOA with WSO2 WSAS
 
Adriano Di Luzio - Davvy - PyconSEI Talk
Adriano Di Luzio - Davvy - PyconSEI TalkAdriano Di Luzio - Davvy - PyconSEI Talk
Adriano Di Luzio - Davvy - PyconSEI Talk
 
Extending Cassandra with Doradus OLAP for High Performance Analytics
Extending Cassandra with Doradus OLAP for High Performance AnalyticsExtending Cassandra with Doradus OLAP for High Performance Analytics
Extending Cassandra with Doradus OLAP for High Performance Analytics
 
How happy they became with H2O/mruby and the future of HTTP
How happy they became with H2O/mruby and the future of HTTPHow happy they became with H2O/mruby and the future of HTTP
How happy they became with H2O/mruby and the future of HTTP
 
Sql on everything with drill
Sql on everything with drillSql on everything with drill
Sql on everything with drill
 
MVC and IBM XPages - from #DanNotes in Korsør (DK) 28 November 2013
MVC and IBM XPages - from #DanNotes in Korsør (DK) 28 November 2013MVC and IBM XPages - from #DanNotes in Korsør (DK) 28 November 2013
MVC and IBM XPages - from #DanNotes in Korsør (DK) 28 November 2013
 
iguazio - nuclio Meetup Nov 30th
iguazio - nuclio Meetup Nov 30thiguazio - nuclio Meetup Nov 30th
iguazio - nuclio Meetup Nov 30th
 
Teradata - Hadoop profile
Teradata - Hadoop profileTeradata - Hadoop profile
Teradata - Hadoop profile
 
Deploying Perl apps on dotCloud
Deploying Perl apps on dotCloudDeploying Perl apps on dotCloud
Deploying Perl apps on dotCloud
 
Webinar about Spring Data Neo4j 4
Webinar about Spring Data Neo4j 4Webinar about Spring Data Neo4j 4
Webinar about Spring Data Neo4j 4
 
Beautiful Monitoring With Grafana and InfluxDB
Beautiful Monitoring With Grafana and InfluxDBBeautiful Monitoring With Grafana and InfluxDB
Beautiful Monitoring With Grafana and InfluxDB
 
DNSaaS and FWaaS
DNSaaS and FWaaSDNSaaS and FWaaS
DNSaaS and FWaaS
 
Hong Kong Drupal User Group - Sep 13th
Hong Kong Drupal User Group - Sep 13thHong Kong Drupal User Group - Sep 13th
Hong Kong Drupal User Group - Sep 13th
 

Dernier

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 

Dernier (20)

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 

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

  • 1. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 REST services and IBM Domino/XWork A presentation for DanNotes by John Dalsgaard
  • 2. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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.
  • 4. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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”:
  • 5. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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:
  • 6. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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?????
  • 7. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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... :-)
  • 8. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 ”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
  • 9. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 ”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
  • 10. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 ”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 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....
  • 11. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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.
  • 12. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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...
  • 13. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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"} ]}
  • 14. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 15. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 JSON and JavaScript var 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'
  • 16. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 17. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 18. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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)
  • 19. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 Check DAS Open: server.dom.dk/api – lists service and their state
  • 20. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 Enable data service ● On Internet site document (configuration tab): ● Need to refresh http to take effect – tell http refresh
  • 21. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 DAS: List all ”services” (db's) ● Open: server.dom.dk/api/data
  • 22. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 DAS: Open a specific database ● Try: server.dom.dk/reports.nsf/api/data/collections → We need to enable DAS for the database
  • 23. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 DAS: Enable for database ● On the advanced properties of the database: ● Select level in ”Allow Domino Data Service”: ● Important decision: Views and/or documents
  • 24. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 DAS: Open database again ● Try: server.dom.dk/demo/json.nsf/api/data/collections
  • 25. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 26. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 27. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 DAS: Open a document ● Try: server.dom.dk/.../documents/unid/33735D0BC... ● Requires ”Views and documents” to be set in DB props.
  • 28. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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”
  • 29. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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....
  • 30. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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....
  • 31. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 32. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 33. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 34. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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!
  • 35. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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!!
  • 36. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 37. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 38. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 39. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 40. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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!!)
  • 41. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 42. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 43. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 44. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 45. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 Live DEMO
  • 46. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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 ;-)
  • 47. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 Questions?? ● Did you learn something? ● Could you use it? ?
  • 48. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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
  • 49. © 2014, Dalsgaard Data A/S DanNotes, 19-20 November 2014 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