SlideShare a Scribd company logo
1 of 76
Download to read offline
Your Data In the Major Leagues:
A Practical Guide to REST Services
Serdar Basegmez
Managing Director,
Developi Information Systems
DEV-1383
IBM Connect 2017 Conference, 20-23 February 2017
• IBM Champion (2011 - 2017)
• Developi Information Systems, Istanbul
• OpenNTF / LUGTR / LotusNotus.com
• Featured on…
• Engage UG, IBM Connect, ICON UK, NotesIn9…
Serdar Başeğmez
Agenda
• RESTful Architecture
• Practical Implications
• Advantages of RESTful Services
• Providing REST Services for IBM Domino
• Consuming REST Services for IBM Domino
• Wrap-up
RESTful Web Services
Representational state transfer (REST) is an architectural style used for
web development. Systems and sites designed using this style aim for
fast performance, reliability and the ability to scale (to grow and easily
support extra users). To achieve these goals, developers work with
reusable components that can be managed and updated without
affecting the system as a whole while it is running.
Source: https://en.wikipedia.org/wiki/Representational_state_transfer
History
Old School Web Applications
Source: https://speakerdeck.com/jeffschenck/rest-easy-api-security-done-right
User Interface Business Logic Datastore
Front-end Back-end
ASP, PHP, CGI, Web Agents, JSP, etc.
← HTML, CSS, JavaScript
Forms →
Web Applications Evolving
User Interface Business Logic Datastore
Front-end Back-end
Async web apps, Ruby on Rails, Django, JSF, XPages, etc.
← HTML, CSS, JavaScript
Forms, AJAX →
Web Applications Evolving
User Interface Business Logic Datastore
Front-end Back-end
Modern Web frameworks, Angular.js, React.js, etc.
← HTML, CSS, JavaScript
← REST →
[Web] Applications Evolving
User Interface Business Logic Datastore
Mobile Applications
Back-end
Modern Web frameworks, Angular.js, React.js, etc.
← HTML, CSS, JavaScript
← REST →
Front-end
[Web] Applications Evolving
User Interface Business Logic Datastore
Mobile Applications Back-end
Modern Web frameworks, Angular.js, React.js, etc.
← HTML, CSS, JavaScript
← REST →
Front-end Microservice Microservice Microservice
RESTful, Everywhere!
Solid Architecture
Well-defined practices
Widespread use in modern frameworks
Easily consumable, even in micro environments
Delivers performance & scalability
Stateless / Cacheable / Layered
Every request processed independently
Client does not care who cooked the meal in the kitchen
Everything cacheable
⇣
Scalable, Robust, Resilient
The Conversation Makes Sense!
Source: http://www.bizcoder.com/a-fresh-coat-of-rest-paint-on-a-soap-stack
The Conversation Makes Sense!
GET	/twink/contacts/DLEY-ACLH6Y	HTTP/1.1	
Host:	homer.developi.info	
Cache-Control:	no-cache	
{	
		"zip":	"13202",	
		"state":	"NY",	
		"lastName":	"Abbate",	
		"middle":	"J",	
		"country":	"US",	
		"emailAddress":	"Jessica.J.Abbate@trashymail.com",	
		"number":	"DLEY-ACLH6Y",	
		"city":	"Syracuse",	
		"firstName":	"Jessica"	
}
The Conversation Makes Sense!
http://appserver.company.com/apps/contacts.nsf/
GiveMeTheContactWeNeedPleaseAgent?OpenAgent&id=1522
or…
http://appserver.company.com/api/contacts/1522
Conventions on URLs
GET http://appserver.company.com/api/contacts
GET http://appserver.company.com/api/contacts/UK/London
POST http://appserver.company.com/api/contacts
Retrieve Contacts / Create a new Contact…
Conventions on URLs
GET http://appserver.company.com/api/contacts/1522
PUT http://appserver.company.com/api/contacts/1522
DELETE http://appserver.company.com/api/contacts/1522
Retrieve/Update/Delete the Contact resource with id=1522…
URI GET PUT POST DELETE
/contacts/ List Contacts Replace Contacts Create New Contact Delete Contacts
/contacts/id Retrieve a Contact Replace a Contact N/A (generally) Delete a Contact
Source: https://en.wikipedia.org/wiki/Representational_state_transfer
Conventions on URLs
Unconventional uses in URLs
GET https://api.twitter.com/1.1/statuses/show.json?id=1234567890
Retrieve the Tweet with id=1234567890…
RESTful Services
for
IBM Domino Applications
Some Inspiration
• Alternative Front-ends
• Alternative Web Frameworks (Angular.js, React.js, etc.) / Mobile Applications

• Integration with Custom applications/services to share data and process
• Getting a list of customers from CRM, let SCM to initiate Purchase Request on Domino

• Upload a file into Box, using tone analyser from IBM Watson, send message into Slack

• Webhooks
• Notify or get notified about what happened

• Other
• Enhancing In-page user experience with grids, quick searches, better type-aheads, etc.
Example: Slack Bot for XSnippets
Slack Server
Slack Client
OpenNTF Server
XSnippets.nsf
XSlack REST
Provider
/xsnippets	[params]
Message	
Response
GET	Request FT	Search
Search	Results
Message	Response
GET	http://openntf.org/xsnippets.nsf/slack.xsp?text=xagent
Request:
Here	are	search	results	for	'xagent'	
1.	Scheduled	XAgent	-	NON	SSL	<http://...>	
2.	Use	@Transform	to	build	JSON	and	consume	the	output	in	an	XAgent	<http://...>	
3.	Controlling	the	HTTP	response	status	code	in	XPages	<http://...>	
4.	Build	JSON	from	NotesView	with	support	of	multi-value	fields	<http://...>	
5.	Scheduled	XAgent	-SSL	Encrypted		<http://...>
Response:
Example: Box Webhooks Integration
Box Servers
Box Web
Company Server
Demo.nsf
REST Service
POST	Request Actions
200	Success	Response
POST	http://MyServer.com/MyRestServiceAddress	
{	
		"source":	{	
				"name":	"someFile.xyz",		
				"parent":	{	
						"name":	"someFolder",		
						"type":	"folder"	
				},		
				......	
		},		
		"trigger":	"FILE.UPLOADED",		
		"type":	"webhook_event",		
		........	
}
Request:
BoxSync
Upload	File	
Delete	File	
Comment
RESTful Services on Domino
IBM Domino Server
Web Apps Agents
IBM Notes Client
RESTful
Services
As Consumer
Browser
Remote
Applications
As Provider
Provider
Consumer
Providing RESTful Services
for
IBM Domino Applications
Domino Access Services
• Provided and Supported by IBM
• Fully functional RESTful API for Domino Data
• Access to Views/Folders/Documents/Collections/Fields/Calendar
• Support for caching
• Mail and FreeBusy services added by ExtLib OpenNTF version
• Inherently uses standard security model (ACL, readers/authors…)
• Server-level/Database-level/Design-level control over availability
Domino Access Services
• No coding needed, Immediately available after a few settings.
Enable on Server Enable For Database Enable For Views
Domino Access Services
• Drawbacks:
• No control over the data!

• Reading a document —> Read All fields

• Creating a document —> No checkpoints!

• No place for business logic!

• What about actions? The responsibility is on the consumer

• Everything or Nothing

• Exposes internals

• You should trust consumers and the environment…
REST Components (ExtLib)
• Provided and Supported by IBM
• Access to Views/Folders/Documents/Collections/Fields/Calendar
• Customizable component for RESTful access
• Computed/Filtered columns, Custom search, etc.

• Event model helps building business logic on top of REST model

• Custom REST Service
• Write your own SSJS or Java bean

• Write your CSJS routines for async access (Remote Service / JSON-RPC)

• Dojo support for single page model
REST Components (ExtLib)
• Setup REST component(s) on your page.
• Minimal coding, no administrator needed.
Add to your XPage Add a Service Configure Options
REST Components (ExtLib)
• Drawbacks:
• Careful with the code organization…

• You might inevitably end up with a spaghetti code!

• Error handling is crucial

• Prefer CustomRestService with a Java bean for more advanced stuff…

• Not optimised for performance and scalability

• Difficult to follow RESTful URL Convention

• e.g. https://someserver.domain.com/database.nsf/somepage.xsp/service/…
Hardcoding (Web agents, XAgents, Servlets…)
• Old school way to create services, but still quite useful for some cases.
• Great if you have pre-existing code (e.g. Lotusscript libraries, etc.)
• Customizable, flexible and simple way to create any service
Hardcoding (Web agents, XAgents, Servlets…)
• Drawbacks:
• Hardcode everything…

• e.g. Header/parameter extraction

• Careful with the code organization…

• You might inevitably end up with a spaghetti code!

• Error handling is crucial

• Difficult to follow RESTful URL Convention

• e.g. https://someserver.domain.com/database.nsf/xagent.xsp?…

• e.g. https://someserver.domain.com/database.nsf/someagent?OpenAgent&…
Apache Wink Servlets
• IBM Domino includes Apache Wink 1.1.2
• An implementation of JAX-RS

• JAX-RS: ‘Java-ish’ way to define RESTful services

• Create JAX-RS based REST services on top of OSGi plugins.
• Complete Java solution, extensible with custom providers
• Compatible with OpenNTF Domino API
• Code reusability outside IBM Domino world.
Apache Wink Runtime Application Code
Apache Wink Basic Architecture
Wink Servlet
(Customizable)
HTTP/HTTPS
Client
Datastore
Resource
Resource
Resource
Resource
Controllers
Data Accessors
Tools/Utilities
Request Processor
Helpers
/BaseURI/* /BaseURI/Path-Patterns
@Path("/contacts")	
public	class	ContactResource	{	
	 private	DominoAccessor	accessor	=	new	DominoAccessor(ContextInfo.getUserSession());	
	 	
	 @GET()	
	 public	Response	getContactList(	@QueryParam("start")	int	start,	@QueryParam("count")	int	count)	{	
	 	 	
	 	 List<Contact>	contactList	=	accessor.pullContacts(start,	count);	
	 	 String	result	=	ModelUtils.toJson(contactList).toString();	
	 	 	
	 	 return	Response.ok(result,	MediaType.APPLICATION_JSON).build();	
	 }	
	 	
	 @Path("/{id}")	
	 @GET()	
	 public	Response	getContact(@PathParam("id")	String	id)	{	
	 	 Contact	contact	=	accessor.findContact(id);	
	 	 if(null	==	contact)	{	
	 	 	 throw	new	WebApplicationException(Response.Status.NOT_FOUND);	
	 	 }	else	{	
	 	 	 String	result	=	ModelUtils.toJson(contact).toString();	
	 	 	 return	Response.ok(result,	MediaType.APPLICATION_JSON).build();	
	 	 }	
	 }	
}
{	
		"zip":	"13202",	
		"state":	"NY",	
		"lastName":	"Abbate",	
		"middle":	"J",	
		"country":	"US",	
		"emailAddress":	"Jessica.J.Abbate@trashymail.com",	
		"number":	"DLEY-ACLH6Y",	
		"city":	"Syracuse",	
		"firstName":	"Jessica"	
}
Contact Resource Class
Contact Resource
Short JSON Representation
Apache Wink Servlets
• Drawbacks:
• Plugin only

• Difficult if you are not familiar

• Takes time to learn

• Overkill?

• Not suitable for small projects and simple needs

• Apache Wink is old school

• Not that bad, IBM still using Wink. But Apache took another way.

• Alternatives: RESTEasy, Jersey, Apache CXF, etc. 

• Integrating a new module into Domino might be an issue
Providing RESTful Services on Domino
Benefits Challenges Suggested When?
Domino Access Services

(DAS)
No Backend Code
Zero-setup
Limited Control
No Business Logic
Exposes the Internals
Simple internal integrations
ExtLib Components

for REST
Less Backend Code
Minimal Setup
Partial/Full Customization
Error Handling
Spaghetti Code Risk
URL Convention
Simple needs for a limited
scope
Hardcoding

(XAgents, Web agents,
Servlets)
Tailor-made
(Almost) No Learning Curve
Hardcoding Everything
Spaghetti Code Risk
URL Conventions
Very specific needs for a
limited scope
Apache Wink Servlets
Tailor-made
Based on JAX-RS
OSGi Benefits
Learning Curve
Barrier to Entry
Large scope
implementation,
API Design
Consuming RESTful Services
for
IBM Domino Applications
How to Consume any RESTful Service?
• It is just an HTTP Request…
• Questions to ask:
• Lotusscript or Java or SSJS?

• On-demand or Background?

• The remote service has an SDK?

• Who is going to be authenticated?
Java or SSJS or Lotusscript?
• Lotusscript
• No internal support for Networking…

• On Windows platform, we can use COM objects

• Call Java via LS2J

• Server-side JavaScript
• Use Java!

• Java
• Core Java provides URLConnection class for basic operations

• Open source libraries are preferred (e.g. Apache HttpComponents)
Connecting LotusScript
• Pulling exchange rates (When needed or on a schedule)
Set rates = CreateObject("msxml2.DOMDocument" )
rates.async = False
rates.validateOnParse = False
rates.setProperty "ServerHTTPRequest" ,True
If rates.load("http://www.tcmb.gov.tr/kurlar/today.xml" ) Then
Set currencies =rates.getElementsByTagName("Currency" )
For i=0 To currencies.length - 1
Set node=currencies.item(i)
If node.attributes.getNamedItem("Kod").value="USD" Then
For j=0 To node.childnodes.length-1
If node.childnodes.item(j).NodeName="ForexBuying" Then
forexBuyingUSD = node.childnodes.item(j).nodeTypedValue
Elseif node.childnodes.item(j).NodeName="ForexSelling" Then
forexSellingUSD = node.childnodes.item(j).nodeTypedValue
End If
Next
‘ Elseif for others…
End If
Next
GetExchangeRates=True
Else
GetExchangeRates=False
End If
Using OLE Automation
(or LS2J alternatively)
XML Parsing
Windows only!
Connecting Java
• Pulling exchange rates via Java (When needed or on a schedule)
public Double receiveEurUsdRate() throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("http://api.fixer.io/latest?base=USD");
CloseableHttpResponse response = httpclient.execute(httpGet);
try {
HttpEntity entity = response.getEntity();
// This is the worst practice ever!
// We don't check anything! Everything can go wrong...
JsonJavaObject ratesMap = (JsonJavaObject) JsonParser.fromJson(JsonJavaFactory.instanceEx,
EntityUtils.toString(entity));
JsonJavaObject rates = ratesMap.getAsObject("rates");
// We can write values into a NotesDocument
return rates.getAsDouble("EUR");
} finally {
response.close();
}
}
Create an HTTP client
Get a response
Convert to JSON
* Networking is a restricted operation for Agents!
Agent Security should be configured.
Connecting SSJS
• Pulling exchange rates on an XPage action
<xp:button
id="button1" value="What is the exchange rate?">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="computedField1">
<xp:this.action><![CDATA[#{javascript:
viewScope.EurUsdRate = test.ExchangeRate.receiveEurUsdRate()
}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
We can also call Java!
* This code will run multiple times for each page cycle.
Always cache values!
A Simple Example
• Pulling exchange rates (When needed or on a schedule)
• Running from an Java Agent

• Apache HttpComponents and IBM Commons should be imported.

• Agent Security should be configured

• Running from an XPage / Java or SSJS

• Apache HttpComponents should be imported.

• Time-outs and service hiccups should be considered

• Values should always be cached!

• Lotusscript

• Platform specific vs. LS2J
When/How to Connect?
• Web Application triggers the RESTful conversation.
IBM Domino Server
Web Apps
RESTful Service
Web Client
1. Click/Save/Update
2. REST Request
3. REST Response
4. Render Response
Latency!!!
When/How to Connect?
• Web Application performs the RESTful conversation at the browser.
IBM Domino Server
Web Apps
RESTful ServiceWeb Client
1. CSJS Action 2. AJAX Request
3. AJAX Response
4. Process Response
Latency!!!
CORS (Cross Origin Resource Sharing)?
When/How to Connect?
• Notes Client performs the RESTful conversation
IBM Domino Server
Agent Manager
RESTful ServiceNotes Client
1. Run local code (Java/LS) 2. REST Request
3. REST Response
Latency!!!
4. Process Results
When/How to Connect?
• Notes Client performs the RESTful conversation via a Server Agent
IBM Domino Server
Agent Manager
RESTful Service
Notes Client
1. Agent.RunOnServer()
2. REST Request
3. REST Response
4. Read Results
Latency!!!
Latency!!!
When/How to Connect?
• RESTful conversation happens in the background
IBM Domino Server
Agent Manager
RESTful Service
1. Agent or DOTS run on a schedule
2. REST Request
3. REST Response
4. Process Results
DOTS
When/How to Connect?
• More complicated scenarios…
IBM Domino Server
REST Service
RESTful Service
RESTful Consumer
1. REST Call
3. REST Request
4. REST Response
6. Return response
Latency!!!
2.Process the Request
5. Process More
Why not SDK?
• Many remote services provide a Java SDK or Wrapper
• Wrapper vs SDK

• Wrapper: Well-defined data model (e.g. POJO classes)

• SDK: No need to deal with low level operations

• Generally supported by the provider or the community

• But…
• Compatibility issues (especially on Java Agents)

• e.g. IBM Watson SDK requires Java 7

• JVM Security issues

• Too much dependency, Poor documentation, etc.
Authentication
• Who is going to be authenticated and how?
• Predefined credential or application key

• Single Sign-on

• Users with their own credentials on remote (OAuth, Saved password…)
Authentication
• Predefined credential or application key
• Server to Server authentication

• Every REST request should be configured with proper keys

• Credential or Application key should be secured

• Not suitable for CSJS Model
Authentication
• Users with their own credentials on the remote system
• Single Sign-on
• Valid for integrations when SSO is available (e.g. IBM Connections)

• Works within the same domain!

• The remote system expects a token, generally in cookie form

• CSJS model will work without any modification

• When HTTP request passes through the server, cookie should be transferred
Authentication
• Saved Password:
• Easy for the developer, but not convenient!

• Security risk, changing passwords, two-factor authentication, etc.

• Many applications do not allow credentials via API

• OAuth
• Users can delegate their authentication to your application for a limited scope

• Domino has no native support, but possible with some effort (See Demo)

• IBM Social Business Toolkit SDK brings the support for OAUTH (well, sort of…)
Consuming RESTful Services
Usage Examples
XPages

Java - SSJS
Through SSJS or Java beans
Called when needed
Sending message to Slack
Integrations to IBM Watson
Social Media Interaction
Agents
Java - Lotusscript
Scheduled agents
Can be called by Notes Client
Periodically pulling exchange rates
Pushing data to remote service
Training IBM Watson AI
Using SDKs
XPages - OSGi
Access to services using external libraries
Called when needed
Scheduled using DOTS
Accessing IBM Connections
Integration to Box
Demo
Stackoverflow - IBM Watson Demo
Browser
Box-Domino 3-legged OAuth Dance
Web Application
Domino Server
0.ClientId	is	needed	for	initiation
https://Box_Api_Url?client_id=<App_Client_Id>&redirect_uri=<Rest_Service_Url>
We	will	build	a	Link	to	initiate	the		flow…
TokenStore
Callback REST
Browser
Box-Domino 3-legged OAuth Dance
Box Servers
Web Application
Domino Server
Login Page
0.ClientId	is	needed	for	initiation
1.Redirect	User	to	the	Login	Page
TokenStore
Callback REST
Browser
Box-Domino 3-legged OAuth Dance
Box Servers
Web Application
Domino Server
Login Page
0.ClientId	is	needed	for	initiation
1.Redirect	User	to	the	Login	Page
TokenStore
Callback REST
Box	will	ask	the	user	
to	login	and	request	
permission	for	the	
application.
Browser
Box-Domino 3-legged OAuth Dance
Box Servers
Web Application
Domino Server
Login Page
0.ClientId	is	needed	for	initiation
1.Redirect	User	to	the	Login	Page
2.User	Accepted	the	Permission	Request…
TokenStore
Callback REST
Browser
Box-Domino 3-legged OAuth Dance
Box Servers
Web Application
Domino Server
TokenStore
Callback REST
Login Page
0.ClientId	is	needed	for	initiation
1.Redirect	User	to	the	Login	Page
3.Box	Issues	a	GET	Request	with	
a	temporary	Authentication	Code
GET
2.User	Accepted	the	Permission	Request…
Browser
Box-Domino 3-legged OAuth Dance
Box Servers
Web Application
Domino Server
TokenStore
Callback REST
Login Page
0.ClientId	is	needed	for	initiation
1.Redirect	User	to	the	Login	Page
3.Box	Issues	a	GET	Request	with	
a	temporary	Authentication	Code	
4.We	Issue	a	POST	Request	with		
ClientSecret+Authentication	Code
GET
2.User	Accepted	the	Permission	Request…
POST
Browser
Box-Domino 3-legged OAuth Dance
Box Servers
Web Application
Domino Server
TokenStore
Callback REST
Login Page
0.ClientId	is	needed	for	initiation
1.Redirect	User	to	the	Login	Page
3.Box	Issues	a	GET	Request	with	
a	temporary	Authentication	Code	
4.We	Issue	a	POST	Request	with		
ClientSecret+Authentication	Code	
5.Box	responds	with	tokens		
AccessToken+RefreshToken
GET
2.User	Accepted	the	Permission	Request…
POST
RESPONSE
Browser
Box-Domino 3-legged OAuth Dance
Box Servers
Web Application
Domino Server
TokenStore
Callback REST
6.Save	Tokens
7.DONE!
Login Page
0.ClientId	is	needed	for	initiation
1.Redirect	User	to	the	Login	Page
4.Box	Issues	a	GET	Request	with	
a	temporary	Authentication	Code	
5.We	Issue	a	POST	Request	with		
ClientSecret+Authentication	Code	
6.Box	responds	with	tokens		
AccessToken+RefreshToken
GET
2.User	Accepted	the	Permission	Request…
POST
RESPONSE
Now,	we	can	act	on	
behalf	of	the	user…
Some Tweaks
• SSL Issue
• TLS 1.2 is required in most cases.

• Technote: https://www-01.ibm.com/support/docview.wss?uid=swg21985289

• HTTP Proxy/Gateway
• Proxy through the Domino Server for CSJS requests (Mostly for security reasons)

• Options

• IBM Domino provides HTTP-proxy servlet

• Programmatically create a gateway using “Remote Service” component

• Testing
• REST service: Postman (Chrome Plugin / Standalone)

• REST consumer: MockBin RequestBin httpbin
Wrap-up
Summary
RESTful Services Architecture
Providing and Consuming RESTful services for Domino Applications
Scenarios around RESTful Services
Architecture Examples
Takeaway
Download and play with demos
Experiment simple services
Get yourself familiar with RESTful Services
Download OpenNTF projects
Study on RESTful design practices
Have a Pet Project
Notices and
disclaimers
Copyright © 2017 by International Business Machines Corporation (IBM). No part of this document may be reproduced or transmitted in
any form without written permission from IBM.
U.S. Government Users Restricted Rights — Use, duplication or disclosure restricted by GSA ADP Schedule Contract with
IBM.
Information in these presentations (including information relating to products that have not yet been announced by IBM) has been
reviewed for accuracy as of the date of initial publication and could include unintentional technical or typographical errors. IBM shall
have no responsibility to update this information. THIS DOCUMENT IS DISTRIBUTED "AS IS" WITHOUT ANY WARRANTY, EITHER
EXPRESS OR IMPLIED. IN NO EVENT SHALL IBM BE LIABLE FOR ANY DAMAGE ARISING FROM THE USE OF THIS
INFORMATION, INCLUDING BUT NOT LIMITED TO, LOSS OF DATA, BUSINESS INTERRUPTION, LOSS OF PROFIT OR LOSS OF
OPPORTUNITY. IBM products and services are warranted according to the terms and conditions of the agreements under which they
are provided.
IBM products are manufactured from new parts or new and used parts. In some cases, a product may not be new and may have been
previously installed. Regardless, our warranty terms apply.”
Any statements regarding IBM's future direction, intent or product plans are subject to change or withdrawal without notice.
Performance data contained herein was generally obtained in a controlled, isolated environments. Customer examples are presented as
illustrations of how those customers have used IBM products and the results they may have achieved. Actual performance, cost,
savings or other results in other operating environments may vary.
References in this document to IBM products, programs, or services does not imply that IBM intends to make such products, programs
or services available in all countries in which IBM operates or does business.
Workshops, sessions and associated materials may have been prepared by independent session speakers, and do not necessarily
reflect the views of IBM. All materials and discussions are provided for informational purposes only, and are neither intended to, nor
shall constitute legal or other guidance or advice to any individual participant or their specific situation.
It is the customer’s responsibility to insure its own compliance with legal requirements and to obtain advice of competent legal counsel
as to the identification and interpretation of any relevant laws and regulatory requirements that may affect the customer’s business and
any actions the customer may need to take to comply with such laws. IBM does not provide legal advice or represent or warrant that its
services or products will ensure that the customer is in compliance with any law
Notices and
disclaimers
continued
Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other
publicly available sources. IBM has not tested those products in connection with this publication and cannot confirm the accuracy of
performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should
be addressed to the suppliers of those products. IBM does not warrant the quality of any third-party products, or the ability of any such
third-party products to interoperate with IBM’s products. IBM EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESSED OR
IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.
The provision of the information contained herein is not intended to, and does not, grant any right or license under any IBM patents,
copyrights, trademarks or other intellectual property right.
IBM, the IBM logo, ibm.com, Aspera®, Bluemix, Blueworks Live, CICS, Clearcase, Cognos®, DOORS®, Emptoris®, Enterprise
Document Management System™, FASP®, FileNet®, Global Business Services ®, Global Technology Services ®, IBM
ExperienceOne™, IBM SmartCloud®, IBM Social Business®, Information on Demand, ILOG, Maximo®, MQIntegrator®, MQSeries®,
Netcool®, OMEGAMON, OpenPower, PureAnalytics™, PureApplication®, pureCluster™, PureCoverage®, PureData®,
PureExperience®, PureFlex®, pureQuery®, pureScale®, PureSystems®, QRadar®, Rational®, Rhapsody®, Smarter Commerce®,
SoDA, SPSS, Sterling Commerce®, StoredIQ, Tealeaf®, Tivoli®, Trusteer®, Unica®, urban{code}®, Watson, WebSphere®, Worklight®,
X-Force® and System z® Z/OS, are trademarks of International Business Machines Corporation, registered in many jurisdictions
worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is
available on the Web at "Copyright and trademark information" at: www.ibm.com/legal/copytrade.shtml.
Resources
• Serdar Başeğmez: Demo for this session

https://github.com/sbasegmez/IC17RestDemo
• Serdar Başeğmez: Apache Wink Template and Demo

https://github.com/sbasegmez/RestAssuredDemo
• Serdar Başeğmez: Box - SBT Demo

https://github.com/sbasegmez/Blogged/tree/master/CloudFile
• Graham Acres / Serdar Başeğmez: The Journey to Becoming a Social Application Developer (IBM Connect 2014)

https://speakerdeck.com/sbasegmez/bp308-the-journey-to-becoming-a-social-application-developer
• Stephan H. Wissel: Custom REST service in XPages using a service bean

https://wissel.net/blog/d6plinks/SHWL-9Q55QL
• John Dalsgaard: REST Services in IBM Domino/XWork

https://www.dalsgaard-data.eu/blog/rest-services-in-ibm-dominoxwork
Resources (cont.)
• Eric McCormick: Series on JSON Data with Java in XPages

https://edm00se.io/json-with-java-in-xpages
• Thomas Ladehoff: REST Services with the XPages Extension Library

https://www.assono.de/blog/d6plinks/REST-Services-with-the-XPages-Extension-Library
• Paul Withers: XPages OSGi Plugins series

http://www.intec.co.uk/xpages-osgi-plugins-1-an-introduction/
• John Cooper: Domino OSGI (Part 1) - Configuring Eclipse for XPages OSGI Plugins

http://developmentblog.johnmcooper.co.uk/2014/05/configuring-eclipse-for-xpages-osgi-plugins-part1.html
• Toby Samples: JAX-RS or THE way to do REST in Domino series

https://tobysamples.wordpress.com/2015/04/28/jax-rs-or-the-way-to-do-rest-in-domino-part-1/
• Jesse Gallagher: Eclipse Tutorial for Domino Developers

https://github.com/jesse-gallagher/eclipse-tutorial-oct2015/wiki/Java
Thank you
Serdar Basegmez
@serdar_basegmez
http://lotusnotus.com

More Related Content

What's hot

Your App Deserves More – The Art of App Modernization
Your App Deserves More – The Art of App ModernizationYour App Deserves More – The Art of App Modernization
Your App Deserves More – The Art of App ModernizationKlaus Bild
 
One Firm's Wild Ride to The Cloud
One Firm's Wild Ride to The CloudOne Firm's Wild Ride to The Cloud
One Firm's Wild Ride to The CloudKeith Brooks
 
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
 
Escaping the yellow bubble - rewriting Domino using MongoDb and Angular
Escaping the yellow bubble - rewriting Domino using MongoDb and AngularEscaping the yellow bubble - rewriting Domino using MongoDb and Angular
Escaping the yellow bubble - rewriting Domino using MongoDb and AngularMark Leusink
 
Optimus XPages Part 2: The Deep Dive
Optimus XPages Part 2: The Deep DiveOptimus XPages Part 2: The Deep Dive
Optimus XPages Part 2: The Deep DiveTeamstudio
 
Angular.js in XPages
Angular.js in XPagesAngular.js in XPages
Angular.js in XPagesMark Roden
 
A Beard, An App, A Blender
A Beard, An App, A BlenderA Beard, An App, A Blender
A Beard, An App, A Blenderedm00se
 
Connect 2014 - EXTJS in XPages: Modernizing IBM Notes Views Without Sacrifici...
Connect 2014 - EXTJS in XPages: Modernizing IBM Notes Views Without Sacrifici...Connect 2014 - EXTJS in XPages: Modernizing IBM Notes Views Without Sacrifici...
Connect 2014 - EXTJS in XPages: Modernizing IBM Notes Views Without Sacrifici...Mark Roden
 
LinkedIn Mobile: How do we do it?
LinkedIn Mobile: How do we do it?LinkedIn Mobile: How do we do it?
LinkedIn Mobile: How do we do it?phegaro
 
Your Future HTML: The Evolution of Site Design with Web Components
Your Future HTML: The Evolution of Site Design with Web ComponentsYour Future HTML: The Evolution of Site Design with Web Components
Your Future HTML: The Evolution of Site Design with Web ComponentsKen Tabor
 
The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...Mark Roden
 
Everything XControls
Everything XControlsEverything XControls
Everything XControlsTeamstudio
 
A 20 minute introduction to AngularJS for XPage developers
A 20 minute introduction to AngularJS for XPage developersA 20 minute introduction to AngularJS for XPage developers
A 20 minute introduction to AngularJS for XPage developersMark Leusink
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal JavaPhilippe Riand
 
Ask the XPages Experts
Ask the XPages ExpertsAsk the XPages Experts
Ask the XPages ExpertsTeamstudio
 
jQuery Conference Boston 2011 CouchApps
jQuery Conference Boston 2011 CouchAppsjQuery Conference Boston 2011 CouchApps
jQuery Conference Boston 2011 CouchAppsBradley Holt
 
Android Development...Using Web Technologies
Android Development...Using Web TechnologiesAndroid Development...Using Web Technologies
Android Development...Using Web TechnologiesCommonsWare
 

What's hot (20)

Naked and afraid Offline Mobile
Naked and afraid Offline MobileNaked and afraid Offline Mobile
Naked and afraid Offline Mobile
 
Your App Deserves More – The Art of App Modernization
Your App Deserves More – The Art of App ModernizationYour App Deserves More – The Art of App Modernization
Your App Deserves More – The Art of App Modernization
 
One Firm's Wild Ride to The Cloud
One Firm's Wild Ride to The CloudOne Firm's Wild Ride to The Cloud
One Firm's Wild Ride to The Cloud
 
20120802 timisoara
20120802 timisoara20120802 timisoara
20120802 timisoara
 
IBM Connect 2017 - Beyond Domino Designer
IBM Connect 2017 - Beyond Domino DesignerIBM Connect 2017 - Beyond Domino Designer
IBM Connect 2017 - Beyond Domino Designer
 
Escaping the yellow bubble - rewriting Domino using MongoDb and Angular
Escaping the yellow bubble - rewriting Domino using MongoDb and AngularEscaping the yellow bubble - rewriting Domino using MongoDb and Angular
Escaping the yellow bubble - rewriting Domino using MongoDb and Angular
 
Optimus XPages Part 2: The Deep Dive
Optimus XPages Part 2: The Deep DiveOptimus XPages Part 2: The Deep Dive
Optimus XPages Part 2: The Deep Dive
 
Angular.js in XPages
Angular.js in XPagesAngular.js in XPages
Angular.js in XPages
 
A Beard, An App, A Blender
A Beard, An App, A BlenderA Beard, An App, A Blender
A Beard, An App, A Blender
 
Connect 2014 - EXTJS in XPages: Modernizing IBM Notes Views Without Sacrifici...
Connect 2014 - EXTJS in XPages: Modernizing IBM Notes Views Without Sacrifici...Connect 2014 - EXTJS in XPages: Modernizing IBM Notes Views Without Sacrifici...
Connect 2014 - EXTJS in XPages: Modernizing IBM Notes Views Without Sacrifici...
 
LinkedIn Mobile: How do we do it?
LinkedIn Mobile: How do we do it?LinkedIn Mobile: How do we do it?
LinkedIn Mobile: How do we do it?
 
Your Future HTML: The Evolution of Site Design with Web Components
Your Future HTML: The Evolution of Site Design with Web ComponentsYour Future HTML: The Evolution of Site Design with Web Components
Your Future HTML: The Evolution of Site Design with Web Components
 
The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...
 
Everything XControls
Everything XControlsEverything XControls
Everything XControls
 
A 20 minute introduction to AngularJS for XPage developers
A 20 minute introduction to AngularJS for XPage developersA 20 minute introduction to AngularJS for XPage developers
A 20 minute introduction to AngularJS for XPage developers
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal Java
 
Ask the XPages Experts
Ask the XPages ExpertsAsk the XPages Experts
Ask the XPages Experts
 
jQuery Conference Boston 2011 CouchApps
jQuery Conference Boston 2011 CouchAppsjQuery Conference Boston 2011 CouchApps
jQuery Conference Boston 2011 CouchApps
 
IBM Domino Modernizing apps with Angularjs
IBM Domino Modernizing apps with AngularjsIBM Domino Modernizing apps with Angularjs
IBM Domino Modernizing apps with Angularjs
 
Android Development...Using Web Technologies
Android Development...Using Web TechnologiesAndroid Development...Using Web Technologies
Android Development...Using Web Technologies
 

Viewers also liked

Engage 2015 - 10 Mistakes You and Every XPages Developer Make. Yes, I said YOU!
Engage 2015 - 10 Mistakes You and Every XPages Developer Make. Yes, I said YOU!Engage 2015 - 10 Mistakes You and Every XPages Developer Make. Yes, I said YOU!
Engage 2015 - 10 Mistakes You and Every XPages Developer Make. Yes, I said YOU!Serdar Basegmez
 
Connect 2017 DEV-1420 - Blue Mix and Domino – Complementing Smartcloud
Connect 2017 DEV-1420 - Blue Mix and Domino – Complementing SmartcloudConnect 2017 DEV-1420 - Blue Mix and Domino – Complementing Smartcloud
Connect 2017 DEV-1420 - Blue Mix and Domino – Complementing SmartcloudMatteo Bisi
 
Spark 2.x Troubleshooting Guide
Spark 2.x Troubleshooting GuideSpark 2.x Troubleshooting Guide
Spark 2.x Troubleshooting GuideIBM
 
ICONUK 2015: How to Embrace Your XPages Plugin Super Powers
ICONUK 2015: How to Embrace Your XPages Plugin Super PowersICONUK 2015: How to Embrace Your XPages Plugin Super Powers
ICONUK 2015: How to Embrace Your XPages Plugin Super PowersSerdar Basegmez
 
ICONUK 2016: REST Assured, Freeing Your Domino Data Has Never Been That Easy!
ICONUK 2016: REST Assured, Freeing Your Domino Data Has Never Been That Easy!ICONUK 2016: REST Assured, Freeing Your Domino Data Has Never Been That Easy!
ICONUK 2016: REST Assured, Freeing Your Domino Data Has Never Been That Easy!Serdar Basegmez
 
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
 
The Digital Transformation – platforms and network effects
The Digital Transformation – platforms and network effectsThe Digital Transformation – platforms and network effects
The Digital Transformation – platforms and network effectsThomas Bay Pedersen
 
2016 SUTOL: React.js – High-Performance Client for Domino
2016 SUTOL: React.js – High-Performance Client for Domino2016 SUTOL: React.js – High-Performance Client for Domino
2016 SUTOL: React.js – High-Performance Client for DominoKnut Herrmann
 
InterConnect 2017 HBP-3394-Enable innovative cloud solutions with IBM BPM and...
InterConnect 2017 HBP-3394-Enable innovative cloud solutions with IBM BPM and...InterConnect 2017 HBP-3394-Enable innovative cloud solutions with IBM BPM and...
InterConnect 2017 HBP-3394-Enable innovative cloud solutions with IBM BPM and...Brian Petrini
 
Domino Security Present and Future ConnectED Review - ICS.UG 2016
Domino Security Present and Future ConnectED Review - ICS.UG 2016Domino Security Present and Future ConnectED Review - ICS.UG 2016
Domino Security Present and Future ConnectED Review - ICS.UG 2016ICS User Group
 
Agile br one_week_inception
Agile br one_week_inceptionAgile br one_week_inception
Agile br one_week_inceptioncaetano_tc
 
So you've thrown out Annual Performance Reviews - now what?
So you've thrown out Annual Performance Reviews - now what?So you've thrown out Annual Performance Reviews - now what?
So you've thrown out Annual Performance Reviews - now what?David Perks
 
Pentesting like a grandmaster with owtf
Pentesting like a grandmaster with owtfPentesting like a grandmaster with owtf
Pentesting like a grandmaster with owtfViyat Bhalodia
 
evaluation part 6
evaluation part 6evaluation part 6
evaluation part 6officialmo
 
Show110 | Using the XPages Extension Library for the Real World
Show110 | Using the XPages Extension Library for the Real WorldShow110 | Using the XPages Extension Library for the Real World
Show110 | Using the XPages Extension Library for the Real Worldpdhannan
 
IBM Interconnect 2016 - Hybrid Cloud Messaging
IBM Interconnect 2016 - Hybrid Cloud MessagingIBM Interconnect 2016 - Hybrid Cloud Messaging
IBM Interconnect 2016 - Hybrid Cloud MessagingRobert Nicholson
 

Viewers also liked (18)

Engage 2015 - 10 Mistakes You and Every XPages Developer Make. Yes, I said YOU!
Engage 2015 - 10 Mistakes You and Every XPages Developer Make. Yes, I said YOU!Engage 2015 - 10 Mistakes You and Every XPages Developer Make. Yes, I said YOU!
Engage 2015 - 10 Mistakes You and Every XPages Developer Make. Yes, I said YOU!
 
Connect 2017 DEV-1420 - Blue Mix and Domino – Complementing Smartcloud
Connect 2017 DEV-1420 - Blue Mix and Domino – Complementing SmartcloudConnect 2017 DEV-1420 - Blue Mix and Domino – Complementing Smartcloud
Connect 2017 DEV-1420 - Blue Mix and Domino – Complementing Smartcloud
 
Spark 2.x Troubleshooting Guide
Spark 2.x Troubleshooting GuideSpark 2.x Troubleshooting Guide
Spark 2.x Troubleshooting Guide
 
ICONUK 2015: How to Embrace Your XPages Plugin Super Powers
ICONUK 2015: How to Embrace Your XPages Plugin Super PowersICONUK 2015: How to Embrace Your XPages Plugin Super Powers
ICONUK 2015: How to Embrace Your XPages Plugin Super Powers
 
ICONUK 2016: REST Assured, Freeing Your Domino Data Has Never Been That Easy!
ICONUK 2016: REST Assured, Freeing Your Domino Data Has Never Been That Easy!ICONUK 2016: REST Assured, Freeing Your Domino Data Has Never Been That Easy!
ICONUK 2016: REST Assured, Freeing Your Domino Data Has Never Been That Easy!
 
DEV-1467 - Darwino
DEV-1467 - DarwinoDEV-1467 - Darwino
DEV-1467 - Darwino
 
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
 
The Digital Transformation – platforms and network effects
The Digital Transformation – platforms and network effectsThe Digital Transformation – platforms and network effects
The Digital Transformation – platforms and network effects
 
2016 SUTOL: React.js – High-Performance Client for Domino
2016 SUTOL: React.js – High-Performance Client for Domino2016 SUTOL: React.js – High-Performance Client for Domino
2016 SUTOL: React.js – High-Performance Client for Domino
 
InterConnect 2017 HBP-3394-Enable innovative cloud solutions with IBM BPM and...
InterConnect 2017 HBP-3394-Enable innovative cloud solutions with IBM BPM and...InterConnect 2017 HBP-3394-Enable innovative cloud solutions with IBM BPM and...
InterConnect 2017 HBP-3394-Enable innovative cloud solutions with IBM BPM and...
 
Domino Security Present and Future ConnectED Review - ICS.UG 2016
Domino Security Present and Future ConnectED Review - ICS.UG 2016Domino Security Present and Future ConnectED Review - ICS.UG 2016
Domino Security Present and Future ConnectED Review - ICS.UG 2016
 
Agile br one_week_inception
Agile br one_week_inceptionAgile br one_week_inception
Agile br one_week_inception
 
So you've thrown out Annual Performance Reviews - now what?
So you've thrown out Annual Performance Reviews - now what?So you've thrown out Annual Performance Reviews - now what?
So you've thrown out Annual Performance Reviews - now what?
 
Pentesting like a grandmaster with owtf
Pentesting like a grandmaster with owtfPentesting like a grandmaster with owtf
Pentesting like a grandmaster with owtf
 
свідоцтво про держреєстрацію
свідоцтво про держреєстраціюсвідоцтво про держреєстрацію
свідоцтво про держреєстрацію
 
evaluation part 6
evaluation part 6evaluation part 6
evaluation part 6
 
Show110 | Using the XPages Extension Library for the Real World
Show110 | Using the XPages Extension Library for the Real WorldShow110 | Using the XPages Extension Library for the Real World
Show110 | Using the XPages Extension Library for the Real World
 
IBM Interconnect 2016 - Hybrid Cloud Messaging
IBM Interconnect 2016 - Hybrid Cloud MessagingIBM Interconnect 2016 - Hybrid Cloud Messaging
IBM Interconnect 2016 - Hybrid Cloud Messaging
 

Similar to IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST Services

Meetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech PeopleMeetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech PeopleIT Arena
 
Microservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problemsMicroservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problemsŁukasz Sowa
 
Hpc lunch and learn
Hpc lunch and learnHpc lunch and learn
Hpc lunch and learnJohn D Almon
 
Accelerate DevOps/Microservices and Kubernetes
Accelerate DevOps/Microservices and KubernetesAccelerate DevOps/Microservices and Kubernetes
Accelerate DevOps/Microservices and KubernetesRick Hightower
 
WSO2 Intro Webinar - Simplifying Enterprise Integration with Configurable WS...
WSO2 Intro Webinar -  Simplifying Enterprise Integration with Configurable WS...WSO2 Intro Webinar -  Simplifying Enterprise Integration with Configurable WS...
WSO2 Intro Webinar - Simplifying Enterprise Integration with Configurable WS...WSO2
 
JAX 2014 - The PaaS to a better IT architecture.
JAX 2014 - The PaaS to a better IT architecture.JAX 2014 - The PaaS to a better IT architecture.
JAX 2014 - The PaaS to a better IT architecture.Sebastian Faulhaber
 
Stay productive while slicing up the monolith
Stay productive while slicing up the monolithStay productive while slicing up the monolith
Stay productive while slicing up the monolithMarkus Eisele
 
Mobile gotcha
Mobile gotchaMobile gotcha
Mobile gotchaphegaro
 
Discover MongoDB Atlas and MongoDB Stitch - DEM02-S - Mexico City AWS Summit
Discover MongoDB Atlas and MongoDB Stitch - DEM02-S - Mexico City AWS SummitDiscover MongoDB Atlas and MongoDB Stitch - DEM02-S - Mexico City AWS Summit
Discover MongoDB Atlas and MongoDB Stitch - DEM02-S - Mexico City AWS SummitAmazon Web Services
 
Modernizing Applications with Microservices and DC/OS (Lightbend/Mesosphere c...
Modernizing Applications with Microservices and DC/OS (Lightbend/Mesosphere c...Modernizing Applications with Microservices and DC/OS (Lightbend/Mesosphere c...
Modernizing Applications with Microservices and DC/OS (Lightbend/Mesosphere c...Lightbend
 
Stay productive while slicing up the monolith
Stay productive while slicing up the monolithStay productive while slicing up the monolith
Stay productive while slicing up the monolithMarkus Eisele
 
After the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEANAfter the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEANJeff Fox
 
Convertigo Mobile Application Development platform for Enterprises
Convertigo Mobile Application Development platform for EnterprisesConvertigo Mobile Application Development platform for Enterprises
Convertigo Mobile Application Development platform for EnterprisesConvertigo | MADP & MBaaS
 
.NET Cloud-Native Bootcamp- Los Angeles
.NET Cloud-Native Bootcamp- Los Angeles.NET Cloud-Native Bootcamp- Los Angeles
.NET Cloud-Native Bootcamp- Los AngelesVMware Tanzu
 
Praxistaugliche notes strategien 4 cloud
Praxistaugliche notes strategien 4 cloudPraxistaugliche notes strategien 4 cloud
Praxistaugliche notes strategien 4 cloudRoman Weber
 
Architecture: When, how, and if to Adopt Microservices
Architecture: When, how, and if to Adopt MicroservicesArchitecture: When, how, and if to Adopt Microservices
Architecture: When, how, and if to Adopt MicroservicesAmazon Web Services
 
Stay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolithStay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolithMarkus Eisele
 

Similar to IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST Services (20)

Meetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech PeopleMeetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech People
 
Microservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problemsMicroservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problems
 
Hpc lunch and learn
Hpc lunch and learnHpc lunch and learn
Hpc lunch and learn
 
Building SPA’s (Single Page App) with Backbone.js
Building SPA’s (Single Page App) with Backbone.jsBuilding SPA’s (Single Page App) with Backbone.js
Building SPA’s (Single Page App) with Backbone.js
 
20120306 dublin js
20120306 dublin js20120306 dublin js
20120306 dublin js
 
Accelerate DevOps/Microservices and Kubernetes
Accelerate DevOps/Microservices and KubernetesAccelerate DevOps/Microservices and Kubernetes
Accelerate DevOps/Microservices and Kubernetes
 
WSO2 Intro Webinar - Simplifying Enterprise Integration with Configurable WS...
WSO2 Intro Webinar -  Simplifying Enterprise Integration with Configurable WS...WSO2 Intro Webinar -  Simplifying Enterprise Integration with Configurable WS...
WSO2 Intro Webinar - Simplifying Enterprise Integration with Configurable WS...
 
JAX 2014 - The PaaS to a better IT architecture.
JAX 2014 - The PaaS to a better IT architecture.JAX 2014 - The PaaS to a better IT architecture.
JAX 2014 - The PaaS to a better IT architecture.
 
Stay productive while slicing up the monolith
Stay productive while slicing up the monolithStay productive while slicing up the monolith
Stay productive while slicing up the monolith
 
Mobile gotcha
Mobile gotchaMobile gotcha
Mobile gotcha
 
Discover MongoDB Atlas and MongoDB Stitch - DEM02-S - Mexico City AWS Summit
Discover MongoDB Atlas and MongoDB Stitch - DEM02-S - Mexico City AWS SummitDiscover MongoDB Atlas and MongoDB Stitch - DEM02-S - Mexico City AWS Summit
Discover MongoDB Atlas and MongoDB Stitch - DEM02-S - Mexico City AWS Summit
 
Modernizing Applications with Microservices and DC/OS (Lightbend/Mesosphere c...
Modernizing Applications with Microservices and DC/OS (Lightbend/Mesosphere c...Modernizing Applications with Microservices and DC/OS (Lightbend/Mesosphere c...
Modernizing Applications with Microservices and DC/OS (Lightbend/Mesosphere c...
 
Stay productive while slicing up the monolith
Stay productive while slicing up the monolithStay productive while slicing up the monolith
Stay productive while slicing up the monolith
 
After the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEANAfter the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEAN
 
Convertigo Mobile Application Development platform for Enterprises
Convertigo Mobile Application Development platform for EnterprisesConvertigo Mobile Application Development platform for Enterprises
Convertigo Mobile Application Development platform for Enterprises
 
.NET Cloud-Native Bootcamp- Los Angeles
.NET Cloud-Native Bootcamp- Los Angeles.NET Cloud-Native Bootcamp- Los Angeles
.NET Cloud-Native Bootcamp- Los Angeles
 
Be faster then rabbits
Be faster then rabbitsBe faster then rabbits
Be faster then rabbits
 
Praxistaugliche notes strategien 4 cloud
Praxistaugliche notes strategien 4 cloudPraxistaugliche notes strategien 4 cloud
Praxistaugliche notes strategien 4 cloud
 
Architecture: When, how, and if to Adopt Microservices
Architecture: When, how, and if to Adopt MicroservicesArchitecture: When, how, and if to Adopt Microservices
Architecture: When, how, and if to Adopt Microservices
 
Stay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolithStay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolith
 

More from Serdar Basegmez

OpenNTF Webinar - October 2021: Return of the DOTS
OpenNTF Webinar - October 2021: Return of the DOTSOpenNTF Webinar - October 2021: Return of the DOTS
OpenNTF Webinar - October 2021: Return of the DOTSSerdar Basegmez
 
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...Serdar Basegmez
 
Engage 2023: Taking Domino Apps to the next level by providing a Rest API
Engage 2023: Taking Domino Apps to the next level by providing a Rest APIEngage 2023: Taking Domino Apps to the next level by providing a Rest API
Engage 2023: Taking Domino Apps to the next level by providing a Rest APISerdar Basegmez
 
Engage 2020: Six Polite Ways to Design a RESTful API for Your Application!
Engage 2020: Six Polite Ways to Design a RESTful API for Your Application!Engage 2020: Six Polite Ways to Design a RESTful API for Your Application!
Engage 2020: Six Polite Ways to Design a RESTful API for Your Application!Serdar Basegmez
 
Engage 2019: Your Data in the Major Leagues: A Practical and Updated Guide to...
Engage 2019: Your Data in the Major Leagues: A Practical and Updated Guide to...Engage 2019: Your Data in the Major Leagues: A Practical and Updated Guide to...
Engage 2019: Your Data in the Major Leagues: A Practical and Updated Guide to...Serdar Basegmez
 
ICONUK 2016: Back From the Dead: How Bad Code Kills a Good Server
ICONUK 2016: Back From the Dead: How Bad Code Kills a Good ServerICONUK 2016: Back From the Dead: How Bad Code Kills a Good Server
ICONUK 2016: Back From the Dead: How Bad Code Kills a Good ServerSerdar Basegmez
 
Engage 2016: Back From the Dead: How Bad Code Kills a Good Server
Engage 2016: Back From the Dead: How Bad Code Kills a Good ServerEngage 2016: Back From the Dead: How Bad Code Kills a Good Server
Engage 2016: Back From the Dead: How Bad Code Kills a Good ServerSerdar Basegmez
 
BP 308 - The Journey to Becoming a Social Application Developer
BP 308 - The Journey to Becoming a Social Application DeveloperBP 308 - The Journey to Becoming a Social Application Developer
BP 308 - The Journey to Becoming a Social Application DeveloperSerdar Basegmez
 
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®Serdar Basegmez
 
BP207 - Meet the Java Application Server You Already Own – IBM Domino
BP207 - Meet the Java Application Server You Already Own – IBM DominoBP207 - Meet the Java Application Server You Already Own – IBM Domino
BP207 - Meet the Java Application Server You Already Own – IBM DominoSerdar Basegmez
 

More from Serdar Basegmez (10)

OpenNTF Webinar - October 2021: Return of the DOTS
OpenNTF Webinar - October 2021: Return of the DOTSOpenNTF Webinar - October 2021: Return of the DOTS
OpenNTF Webinar - October 2021: Return of the DOTS
 
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
 
Engage 2023: Taking Domino Apps to the next level by providing a Rest API
Engage 2023: Taking Domino Apps to the next level by providing a Rest APIEngage 2023: Taking Domino Apps to the next level by providing a Rest API
Engage 2023: Taking Domino Apps to the next level by providing a Rest API
 
Engage 2020: Six Polite Ways to Design a RESTful API for Your Application!
Engage 2020: Six Polite Ways to Design a RESTful API for Your Application!Engage 2020: Six Polite Ways to Design a RESTful API for Your Application!
Engage 2020: Six Polite Ways to Design a RESTful API for Your Application!
 
Engage 2019: Your Data in the Major Leagues: A Practical and Updated Guide to...
Engage 2019: Your Data in the Major Leagues: A Practical and Updated Guide to...Engage 2019: Your Data in the Major Leagues: A Practical and Updated Guide to...
Engage 2019: Your Data in the Major Leagues: A Practical and Updated Guide to...
 
ICONUK 2016: Back From the Dead: How Bad Code Kills a Good Server
ICONUK 2016: Back From the Dead: How Bad Code Kills a Good ServerICONUK 2016: Back From the Dead: How Bad Code Kills a Good Server
ICONUK 2016: Back From the Dead: How Bad Code Kills a Good Server
 
Engage 2016: Back From the Dead: How Bad Code Kills a Good Server
Engage 2016: Back From the Dead: How Bad Code Kills a Good ServerEngage 2016: Back From the Dead: How Bad Code Kills a Good Server
Engage 2016: Back From the Dead: How Bad Code Kills a Good Server
 
BP 308 - The Journey to Becoming a Social Application Developer
BP 308 - The Journey to Becoming a Social Application DeveloperBP 308 - The Journey to Becoming a Social Application Developer
BP 308 - The Journey to Becoming a Social Application Developer
 
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®
 
BP207 - Meet the Java Application Server You Already Own – IBM Domino
BP207 - Meet the Java Application Server You Already Own – IBM DominoBP207 - Meet the Java Application Server You Already Own – IBM Domino
BP207 - Meet the Java Application Server You Already Own – IBM Domino
 

Recently uploaded

The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....ShaimaaMohamedGalal
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 

Recently uploaded (20)

The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 

IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST Services

  • 1. Your Data In the Major Leagues: A Practical Guide to REST Services Serdar Basegmez Managing Director, Developi Information Systems DEV-1383 IBM Connect 2017 Conference, 20-23 February 2017
  • 2. • IBM Champion (2011 - 2017) • Developi Information Systems, Istanbul • OpenNTF / LUGTR / LotusNotus.com • Featured on… • Engage UG, IBM Connect, ICON UK, NotesIn9… Serdar Başeğmez
  • 3. Agenda • RESTful Architecture • Practical Implications • Advantages of RESTful Services • Providing REST Services for IBM Domino • Consuming REST Services for IBM Domino • Wrap-up
  • 4. RESTful Web Services Representational state transfer (REST) is an architectural style used for web development. Systems and sites designed using this style aim for fast performance, reliability and the ability to scale (to grow and easily support extra users). To achieve these goals, developers work with reusable components that can be managed and updated without affecting the system as a whole while it is running. Source: https://en.wikipedia.org/wiki/Representational_state_transfer
  • 6. Old School Web Applications Source: https://speakerdeck.com/jeffschenck/rest-easy-api-security-done-right User Interface Business Logic Datastore Front-end Back-end ASP, PHP, CGI, Web Agents, JSP, etc. ← HTML, CSS, JavaScript Forms →
  • 7. Web Applications Evolving User Interface Business Logic Datastore Front-end Back-end Async web apps, Ruby on Rails, Django, JSF, XPages, etc. ← HTML, CSS, JavaScript Forms, AJAX →
  • 8. Web Applications Evolving User Interface Business Logic Datastore Front-end Back-end Modern Web frameworks, Angular.js, React.js, etc. ← HTML, CSS, JavaScript ← REST →
  • 9. [Web] Applications Evolving User Interface Business Logic Datastore Mobile Applications Back-end Modern Web frameworks, Angular.js, React.js, etc. ← HTML, CSS, JavaScript ← REST → Front-end
  • 10. [Web] Applications Evolving User Interface Business Logic Datastore Mobile Applications Back-end Modern Web frameworks, Angular.js, React.js, etc. ← HTML, CSS, JavaScript ← REST → Front-end Microservice Microservice Microservice
  • 11. RESTful, Everywhere! Solid Architecture Well-defined practices Widespread use in modern frameworks Easily consumable, even in micro environments Delivers performance & scalability
  • 12. Stateless / Cacheable / Layered Every request processed independently Client does not care who cooked the meal in the kitchen Everything cacheable ⇣ Scalable, Robust, Resilient
  • 13. The Conversation Makes Sense! Source: http://www.bizcoder.com/a-fresh-coat-of-rest-paint-on-a-soap-stack
  • 14. The Conversation Makes Sense! GET /twink/contacts/DLEY-ACLH6Y HTTP/1.1 Host: homer.developi.info Cache-Control: no-cache { "zip": "13202", "state": "NY", "lastName": "Abbate", "middle": "J", "country": "US", "emailAddress": "Jessica.J.Abbate@trashymail.com", "number": "DLEY-ACLH6Y", "city": "Syracuse", "firstName": "Jessica" }
  • 15. The Conversation Makes Sense! http://appserver.company.com/apps/contacts.nsf/ GiveMeTheContactWeNeedPleaseAgent?OpenAgent&id=1522 or… http://appserver.company.com/api/contacts/1522
  • 16. Conventions on URLs GET http://appserver.company.com/api/contacts GET http://appserver.company.com/api/contacts/UK/London POST http://appserver.company.com/api/contacts Retrieve Contacts / Create a new Contact…
  • 17. Conventions on URLs GET http://appserver.company.com/api/contacts/1522 PUT http://appserver.company.com/api/contacts/1522 DELETE http://appserver.company.com/api/contacts/1522 Retrieve/Update/Delete the Contact resource with id=1522…
  • 18. URI GET PUT POST DELETE /contacts/ List Contacts Replace Contacts Create New Contact Delete Contacts /contacts/id Retrieve a Contact Replace a Contact N/A (generally) Delete a Contact Source: https://en.wikipedia.org/wiki/Representational_state_transfer Conventions on URLs
  • 19. Unconventional uses in URLs GET https://api.twitter.com/1.1/statuses/show.json?id=1234567890 Retrieve the Tweet with id=1234567890…
  • 21. Some Inspiration • Alternative Front-ends • Alternative Web Frameworks (Angular.js, React.js, etc.) / Mobile Applications • Integration with Custom applications/services to share data and process • Getting a list of customers from CRM, let SCM to initiate Purchase Request on Domino • Upload a file into Box, using tone analyser from IBM Watson, send message into Slack • Webhooks • Notify or get notified about what happened • Other • Enhancing In-page user experience with grids, quick searches, better type-aheads, etc.
  • 22. Example: Slack Bot for XSnippets Slack Server Slack Client OpenNTF Server XSnippets.nsf XSlack REST Provider /xsnippets [params] Message Response GET Request FT Search Search Results Message Response GET http://openntf.org/xsnippets.nsf/slack.xsp?text=xagent Request: Here are search results for 'xagent' 1. Scheduled XAgent - NON SSL <http://...> 2. Use @Transform to build JSON and consume the output in an XAgent <http://...> 3. Controlling the HTTP response status code in XPages <http://...> 4. Build JSON from NotesView with support of multi-value fields <http://...> 5. Scheduled XAgent -SSL Encrypted <http://...> Response:
  • 23. Example: Box Webhooks Integration Box Servers Box Web Company Server Demo.nsf REST Service POST Request Actions 200 Success Response POST http://MyServer.com/MyRestServiceAddress { "source": { "name": "someFile.xyz", "parent": { "name": "someFolder", "type": "folder" }, ...... }, "trigger": "FILE.UPLOADED", "type": "webhook_event", ........ } Request: BoxSync Upload File Delete File Comment
  • 24. RESTful Services on Domino IBM Domino Server Web Apps Agents IBM Notes Client RESTful Services As Consumer Browser Remote Applications As Provider Provider Consumer
  • 25. Providing RESTful Services for IBM Domino Applications
  • 26. Domino Access Services • Provided and Supported by IBM • Fully functional RESTful API for Domino Data • Access to Views/Folders/Documents/Collections/Fields/Calendar • Support for caching • Mail and FreeBusy services added by ExtLib OpenNTF version • Inherently uses standard security model (ACL, readers/authors…) • Server-level/Database-level/Design-level control over availability
  • 27. Domino Access Services • No coding needed, Immediately available after a few settings. Enable on Server Enable For Database Enable For Views
  • 28. Domino Access Services • Drawbacks: • No control over the data! • Reading a document —> Read All fields • Creating a document —> No checkpoints! • No place for business logic! • What about actions? The responsibility is on the consumer • Everything or Nothing • Exposes internals • You should trust consumers and the environment…
  • 29. REST Components (ExtLib) • Provided and Supported by IBM • Access to Views/Folders/Documents/Collections/Fields/Calendar • Customizable component for RESTful access • Computed/Filtered columns, Custom search, etc. • Event model helps building business logic on top of REST model • Custom REST Service • Write your own SSJS or Java bean • Write your CSJS routines for async access (Remote Service / JSON-RPC) • Dojo support for single page model
  • 30. REST Components (ExtLib) • Setup REST component(s) on your page. • Minimal coding, no administrator needed. Add to your XPage Add a Service Configure Options
  • 31. REST Components (ExtLib) • Drawbacks: • Careful with the code organization… • You might inevitably end up with a spaghetti code! • Error handling is crucial • Prefer CustomRestService with a Java bean for more advanced stuff… • Not optimised for performance and scalability • Difficult to follow RESTful URL Convention • e.g. https://someserver.domain.com/database.nsf/somepage.xsp/service/…
  • 32. Hardcoding (Web agents, XAgents, Servlets…) • Old school way to create services, but still quite useful for some cases. • Great if you have pre-existing code (e.g. Lotusscript libraries, etc.) • Customizable, flexible and simple way to create any service
  • 33. Hardcoding (Web agents, XAgents, Servlets…) • Drawbacks: • Hardcode everything… • e.g. Header/parameter extraction • Careful with the code organization… • You might inevitably end up with a spaghetti code! • Error handling is crucial • Difficult to follow RESTful URL Convention • e.g. https://someserver.domain.com/database.nsf/xagent.xsp?… • e.g. https://someserver.domain.com/database.nsf/someagent?OpenAgent&…
  • 34. Apache Wink Servlets • IBM Domino includes Apache Wink 1.1.2 • An implementation of JAX-RS • JAX-RS: ‘Java-ish’ way to define RESTful services • Create JAX-RS based REST services on top of OSGi plugins. • Complete Java solution, extensible with custom providers • Compatible with OpenNTF Domino API • Code reusability outside IBM Domino world.
  • 35. Apache Wink Runtime Application Code Apache Wink Basic Architecture Wink Servlet (Customizable) HTTP/HTTPS Client Datastore Resource Resource Resource Resource Controllers Data Accessors Tools/Utilities Request Processor Helpers /BaseURI/* /BaseURI/Path-Patterns
  • 36. @Path("/contacts") public class ContactResource { private DominoAccessor accessor = new DominoAccessor(ContextInfo.getUserSession()); @GET() public Response getContactList( @QueryParam("start") int start, @QueryParam("count") int count) { List<Contact> contactList = accessor.pullContacts(start, count); String result = ModelUtils.toJson(contactList).toString(); return Response.ok(result, MediaType.APPLICATION_JSON).build(); } @Path("/{id}") @GET() public Response getContact(@PathParam("id") String id) { Contact contact = accessor.findContact(id); if(null == contact) { throw new WebApplicationException(Response.Status.NOT_FOUND); } else { String result = ModelUtils.toJson(contact).toString(); return Response.ok(result, MediaType.APPLICATION_JSON).build(); } } } { "zip": "13202", "state": "NY", "lastName": "Abbate", "middle": "J", "country": "US", "emailAddress": "Jessica.J.Abbate@trashymail.com", "number": "DLEY-ACLH6Y", "city": "Syracuse", "firstName": "Jessica" } Contact Resource Class Contact Resource Short JSON Representation
  • 37. Apache Wink Servlets • Drawbacks: • Plugin only • Difficult if you are not familiar • Takes time to learn • Overkill? • Not suitable for small projects and simple needs • Apache Wink is old school • Not that bad, IBM still using Wink. But Apache took another way. • Alternatives: RESTEasy, Jersey, Apache CXF, etc. • Integrating a new module into Domino might be an issue
  • 38. Providing RESTful Services on Domino Benefits Challenges Suggested When? Domino Access Services
 (DAS) No Backend Code Zero-setup Limited Control No Business Logic Exposes the Internals Simple internal integrations ExtLib Components
 for REST Less Backend Code Minimal Setup Partial/Full Customization Error Handling Spaghetti Code Risk URL Convention Simple needs for a limited scope Hardcoding
 (XAgents, Web agents, Servlets) Tailor-made (Almost) No Learning Curve Hardcoding Everything Spaghetti Code Risk URL Conventions Very specific needs for a limited scope Apache Wink Servlets Tailor-made Based on JAX-RS OSGi Benefits Learning Curve Barrier to Entry Large scope implementation, API Design
  • 39. Consuming RESTful Services for IBM Domino Applications
  • 40. How to Consume any RESTful Service? • It is just an HTTP Request… • Questions to ask: • Lotusscript or Java or SSJS? • On-demand or Background? • The remote service has an SDK? • Who is going to be authenticated?
  • 41. Java or SSJS or Lotusscript? • Lotusscript • No internal support for Networking… • On Windows platform, we can use COM objects • Call Java via LS2J • Server-side JavaScript • Use Java! • Java • Core Java provides URLConnection class for basic operations • Open source libraries are preferred (e.g. Apache HttpComponents)
  • 42. Connecting LotusScript • Pulling exchange rates (When needed or on a schedule) Set rates = CreateObject("msxml2.DOMDocument" ) rates.async = False rates.validateOnParse = False rates.setProperty "ServerHTTPRequest" ,True If rates.load("http://www.tcmb.gov.tr/kurlar/today.xml" ) Then Set currencies =rates.getElementsByTagName("Currency" ) For i=0 To currencies.length - 1 Set node=currencies.item(i) If node.attributes.getNamedItem("Kod").value="USD" Then For j=0 To node.childnodes.length-1 If node.childnodes.item(j).NodeName="ForexBuying" Then forexBuyingUSD = node.childnodes.item(j).nodeTypedValue Elseif node.childnodes.item(j).NodeName="ForexSelling" Then forexSellingUSD = node.childnodes.item(j).nodeTypedValue End If Next ‘ Elseif for others… End If Next GetExchangeRates=True Else GetExchangeRates=False End If Using OLE Automation (or LS2J alternatively) XML Parsing Windows only!
  • 43. Connecting Java • Pulling exchange rates via Java (When needed or on a schedule) public Double receiveEurUsdRate() throws Exception { CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://api.fixer.io/latest?base=USD"); CloseableHttpResponse response = httpclient.execute(httpGet); try { HttpEntity entity = response.getEntity(); // This is the worst practice ever! // We don't check anything! Everything can go wrong... JsonJavaObject ratesMap = (JsonJavaObject) JsonParser.fromJson(JsonJavaFactory.instanceEx, EntityUtils.toString(entity)); JsonJavaObject rates = ratesMap.getAsObject("rates"); // We can write values into a NotesDocument return rates.getAsDouble("EUR"); } finally { response.close(); } } Create an HTTP client Get a response Convert to JSON * Networking is a restricted operation for Agents! Agent Security should be configured.
  • 44. Connecting SSJS • Pulling exchange rates on an XPage action <xp:button id="button1" value="What is the exchange rate?"> <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="computedField1"> <xp:this.action><![CDATA[#{javascript: viewScope.EurUsdRate = test.ExchangeRate.receiveEurUsdRate() }]]></xp:this.action> </xp:eventHandler> </xp:button> We can also call Java! * This code will run multiple times for each page cycle. Always cache values!
  • 45. A Simple Example • Pulling exchange rates (When needed or on a schedule) • Running from an Java Agent • Apache HttpComponents and IBM Commons should be imported. • Agent Security should be configured • Running from an XPage / Java or SSJS • Apache HttpComponents should be imported. • Time-outs and service hiccups should be considered • Values should always be cached! • Lotusscript • Platform specific vs. LS2J
  • 46. When/How to Connect? • Web Application triggers the RESTful conversation. IBM Domino Server Web Apps RESTful Service Web Client 1. Click/Save/Update 2. REST Request 3. REST Response 4. Render Response Latency!!!
  • 47. When/How to Connect? • Web Application performs the RESTful conversation at the browser. IBM Domino Server Web Apps RESTful ServiceWeb Client 1. CSJS Action 2. AJAX Request 3. AJAX Response 4. Process Response Latency!!! CORS (Cross Origin Resource Sharing)?
  • 48. When/How to Connect? • Notes Client performs the RESTful conversation IBM Domino Server Agent Manager RESTful ServiceNotes Client 1. Run local code (Java/LS) 2. REST Request 3. REST Response Latency!!! 4. Process Results
  • 49. When/How to Connect? • Notes Client performs the RESTful conversation via a Server Agent IBM Domino Server Agent Manager RESTful Service Notes Client 1. Agent.RunOnServer() 2. REST Request 3. REST Response 4. Read Results Latency!!! Latency!!!
  • 50. When/How to Connect? • RESTful conversation happens in the background IBM Domino Server Agent Manager RESTful Service 1. Agent or DOTS run on a schedule 2. REST Request 3. REST Response 4. Process Results DOTS
  • 51. When/How to Connect? • More complicated scenarios… IBM Domino Server REST Service RESTful Service RESTful Consumer 1. REST Call 3. REST Request 4. REST Response 6. Return response Latency!!! 2.Process the Request 5. Process More
  • 52. Why not SDK? • Many remote services provide a Java SDK or Wrapper • Wrapper vs SDK • Wrapper: Well-defined data model (e.g. POJO classes) • SDK: No need to deal with low level operations • Generally supported by the provider or the community • But… • Compatibility issues (especially on Java Agents) • e.g. IBM Watson SDK requires Java 7 • JVM Security issues • Too much dependency, Poor documentation, etc.
  • 53. Authentication • Who is going to be authenticated and how? • Predefined credential or application key • Single Sign-on • Users with their own credentials on remote (OAuth, Saved password…)
  • 54. Authentication • Predefined credential or application key • Server to Server authentication • Every REST request should be configured with proper keys • Credential or Application key should be secured • Not suitable for CSJS Model
  • 55. Authentication • Users with their own credentials on the remote system • Single Sign-on • Valid for integrations when SSO is available (e.g. IBM Connections) • Works within the same domain! • The remote system expects a token, generally in cookie form • CSJS model will work without any modification • When HTTP request passes through the server, cookie should be transferred
  • 56. Authentication • Saved Password: • Easy for the developer, but not convenient! • Security risk, changing passwords, two-factor authentication, etc. • Many applications do not allow credentials via API • OAuth • Users can delegate their authentication to your application for a limited scope • Domino has no native support, but possible with some effort (See Demo) • IBM Social Business Toolkit SDK brings the support for OAUTH (well, sort of…)
  • 57. Consuming RESTful Services Usage Examples XPages
 Java - SSJS Through SSJS or Java beans Called when needed Sending message to Slack Integrations to IBM Watson Social Media Interaction Agents Java - Lotusscript Scheduled agents Can be called by Notes Client Periodically pulling exchange rates Pushing data to remote service Training IBM Watson AI Using SDKs XPages - OSGi Access to services using external libraries Called when needed Scheduled using DOTS Accessing IBM Connections Integration to Box
  • 58. Demo
  • 59. Stackoverflow - IBM Watson Demo
  • 60. Browser Box-Domino 3-legged OAuth Dance Web Application Domino Server 0.ClientId is needed for initiation https://Box_Api_Url?client_id=<App_Client_Id>&redirect_uri=<Rest_Service_Url> We will build a Link to initiate the flow… TokenStore Callback REST
  • 61. Browser Box-Domino 3-legged OAuth Dance Box Servers Web Application Domino Server Login Page 0.ClientId is needed for initiation 1.Redirect User to the Login Page TokenStore Callback REST
  • 62. Browser Box-Domino 3-legged OAuth Dance Box Servers Web Application Domino Server Login Page 0.ClientId is needed for initiation 1.Redirect User to the Login Page TokenStore Callback REST Box will ask the user to login and request permission for the application.
  • 63. Browser Box-Domino 3-legged OAuth Dance Box Servers Web Application Domino Server Login Page 0.ClientId is needed for initiation 1.Redirect User to the Login Page 2.User Accepted the Permission Request… TokenStore Callback REST
  • 64. Browser Box-Domino 3-legged OAuth Dance Box Servers Web Application Domino Server TokenStore Callback REST Login Page 0.ClientId is needed for initiation 1.Redirect User to the Login Page 3.Box Issues a GET Request with a temporary Authentication Code GET 2.User Accepted the Permission Request…
  • 65. Browser Box-Domino 3-legged OAuth Dance Box Servers Web Application Domino Server TokenStore Callback REST Login Page 0.ClientId is needed for initiation 1.Redirect User to the Login Page 3.Box Issues a GET Request with a temporary Authentication Code 4.We Issue a POST Request with ClientSecret+Authentication Code GET 2.User Accepted the Permission Request… POST
  • 66. Browser Box-Domino 3-legged OAuth Dance Box Servers Web Application Domino Server TokenStore Callback REST Login Page 0.ClientId is needed for initiation 1.Redirect User to the Login Page 3.Box Issues a GET Request with a temporary Authentication Code 4.We Issue a POST Request with ClientSecret+Authentication Code 5.Box responds with tokens AccessToken+RefreshToken GET 2.User Accepted the Permission Request… POST RESPONSE
  • 67. Browser Box-Domino 3-legged OAuth Dance Box Servers Web Application Domino Server TokenStore Callback REST 6.Save Tokens 7.DONE! Login Page 0.ClientId is needed for initiation 1.Redirect User to the Login Page 4.Box Issues a GET Request with a temporary Authentication Code 5.We Issue a POST Request with ClientSecret+Authentication Code 6.Box responds with tokens AccessToken+RefreshToken GET 2.User Accepted the Permission Request… POST RESPONSE Now, we can act on behalf of the user…
  • 68. Some Tweaks • SSL Issue • TLS 1.2 is required in most cases. • Technote: https://www-01.ibm.com/support/docview.wss?uid=swg21985289 • HTTP Proxy/Gateway • Proxy through the Domino Server for CSJS requests (Mostly for security reasons) • Options • IBM Domino provides HTTP-proxy servlet • Programmatically create a gateway using “Remote Service” component • Testing • REST service: Postman (Chrome Plugin / Standalone) • REST consumer: MockBin RequestBin httpbin
  • 70. Summary RESTful Services Architecture Providing and Consuming RESTful services for Domino Applications Scenarios around RESTful Services Architecture Examples
  • 71. Takeaway Download and play with demos Experiment simple services Get yourself familiar with RESTful Services Download OpenNTF projects Study on RESTful design practices Have a Pet Project
  • 72. Notices and disclaimers Copyright © 2017 by International Business Machines Corporation (IBM). No part of this document may be reproduced or transmitted in any form without written permission from IBM. U.S. Government Users Restricted Rights — Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM. Information in these presentations (including information relating to products that have not yet been announced by IBM) has been reviewed for accuracy as of the date of initial publication and could include unintentional technical or typographical errors. IBM shall have no responsibility to update this information. THIS DOCUMENT IS DISTRIBUTED "AS IS" WITHOUT ANY WARRANTY, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL IBM BE LIABLE FOR ANY DAMAGE ARISING FROM THE USE OF THIS INFORMATION, INCLUDING BUT NOT LIMITED TO, LOSS OF DATA, BUSINESS INTERRUPTION, LOSS OF PROFIT OR LOSS OF OPPORTUNITY. IBM products and services are warranted according to the terms and conditions of the agreements under which they are provided. IBM products are manufactured from new parts or new and used parts. In some cases, a product may not be new and may have been previously installed. Regardless, our warranty terms apply.” Any statements regarding IBM's future direction, intent or product plans are subject to change or withdrawal without notice. Performance data contained herein was generally obtained in a controlled, isolated environments. Customer examples are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual performance, cost, savings or other results in other operating environments may vary. References in this document to IBM products, programs, or services does not imply that IBM intends to make such products, programs or services available in all countries in which IBM operates or does business. Workshops, sessions and associated materials may have been prepared by independent session speakers, and do not necessarily reflect the views of IBM. All materials and discussions are provided for informational purposes only, and are neither intended to, nor shall constitute legal or other guidance or advice to any individual participant or their specific situation. It is the customer’s responsibility to insure its own compliance with legal requirements and to obtain advice of competent legal counsel as to the identification and interpretation of any relevant laws and regulatory requirements that may affect the customer’s business and any actions the customer may need to take to comply with such laws. IBM does not provide legal advice or represent or warrant that its services or products will ensure that the customer is in compliance with any law
  • 73. Notices and disclaimers continued Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products in connection with this publication and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. IBM does not warrant the quality of any third-party products, or the ability of any such third-party products to interoperate with IBM’s products. IBM EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The provision of the information contained herein is not intended to, and does not, grant any right or license under any IBM patents, copyrights, trademarks or other intellectual property right. IBM, the IBM logo, ibm.com, Aspera®, Bluemix, Blueworks Live, CICS, Clearcase, Cognos®, DOORS®, Emptoris®, Enterprise Document Management System™, FASP®, FileNet®, Global Business Services ®, Global Technology Services ®, IBM ExperienceOne™, IBM SmartCloud®, IBM Social Business®, Information on Demand, ILOG, Maximo®, MQIntegrator®, MQSeries®, Netcool®, OMEGAMON, OpenPower, PureAnalytics™, PureApplication®, pureCluster™, PureCoverage®, PureData®, PureExperience®, PureFlex®, pureQuery®, pureScale®, PureSystems®, QRadar®, Rational®, Rhapsody®, Smarter Commerce®, SoDA, SPSS, Sterling Commerce®, StoredIQ, Tealeaf®, Tivoli®, Trusteer®, Unica®, urban{code}®, Watson, WebSphere®, Worklight®, X-Force® and System z® Z/OS, are trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at: www.ibm.com/legal/copytrade.shtml.
  • 74. Resources • Serdar Başeğmez: Demo for this session
 https://github.com/sbasegmez/IC17RestDemo • Serdar Başeğmez: Apache Wink Template and Demo
 https://github.com/sbasegmez/RestAssuredDemo • Serdar Başeğmez: Box - SBT Demo
 https://github.com/sbasegmez/Blogged/tree/master/CloudFile • Graham Acres / Serdar Başeğmez: The Journey to Becoming a Social Application Developer (IBM Connect 2014)
 https://speakerdeck.com/sbasegmez/bp308-the-journey-to-becoming-a-social-application-developer • Stephan H. Wissel: Custom REST service in XPages using a service bean
 https://wissel.net/blog/d6plinks/SHWL-9Q55QL • John Dalsgaard: REST Services in IBM Domino/XWork
 https://www.dalsgaard-data.eu/blog/rest-services-in-ibm-dominoxwork
  • 75. Resources (cont.) • Eric McCormick: Series on JSON Data with Java in XPages
 https://edm00se.io/json-with-java-in-xpages • Thomas Ladehoff: REST Services with the XPages Extension Library
 https://www.assono.de/blog/d6plinks/REST-Services-with-the-XPages-Extension-Library • Paul Withers: XPages OSGi Plugins series
 http://www.intec.co.uk/xpages-osgi-plugins-1-an-introduction/ • John Cooper: Domino OSGI (Part 1) - Configuring Eclipse for XPages OSGI Plugins
 http://developmentblog.johnmcooper.co.uk/2014/05/configuring-eclipse-for-xpages-osgi-plugins-part1.html • Toby Samples: JAX-RS or THE way to do REST in Domino series
 https://tobysamples.wordpress.com/2015/04/28/jax-rs-or-the-way-to-do-rest-in-domino-part-1/ • Jesse Gallagher: Eclipse Tutorial for Domino Developers
 https://github.com/jesse-gallagher/eclipse-tutorial-oct2015/wiki/Java