You are on page 1of 120

Creating RESTful APIs

With Oracle Database REST Data Services

Chris Muir
Development Tools Product Management
September, 2015

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Safe Harbor Statement
The following is intended to outline our general product direction. It is intended for
information purposes only, and may not be incorporated into any contract. It is not a
commitment to deliver any material, code, or functionality, and should not be relied upon
in making purchasing decisions. The development, release, and timing of any features or
functionality described for Oracles products remains at the sole discretion of Oracle.

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 2


Program Agenda

1 REST & JSON Overview


2 Oracle REST Data Services Overview
3 Demonstration

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 3


What is REST?

You tell me

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 4


REpresentational State Transfer (REST)

An architectural style to defining,


Zzzzzzz publishing and consuming APIs and
services on the internet using HTTP.
- Formal definition (Zzzzzz)

Think of REST as a high level protocol


for exchanging data across HTTP in a
computer & developer friendly way.
- Anonymous product manager

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 5


REpresentational State Transfer (REST)
Does describe how That is software
the internet works "sharing data"

A contemporary But we mostly talk


replacement for about it in terms of
"SOAP" "web services"

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 6


S imple
O bject
A ccess REST
P rotocol

<xmlHell/> { 'json':true } <XML/>

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Why should you care about REST web services?

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 8


Why does Oracle care about REST web services?
Over 60 groups now
using it as a standard The standard is
driving faster
adoption

Common
integration
technology for
Fusion Apps

Core technology for


Oracle's cloud stack

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 9


Why should you care about REST web services?
Over 60 groups now Defacto development
using it as a standard solution for web/JS, mobile
The standard is
etc
driving faster
adoption
Huge uptake across
vendors, open source,
IT industry Common
integration
technology for
Common language
Fusion Apps
for integration
solutions Available wherever
Core technology for the web is
Oracle's cloud stack available

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 10


No Really?! Why should I care about REST?

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 11


// Javascript // Python
var xhr = new XMLHttpRequest(); import json
xhr.onreadystatechange = function() { import requests
if (xhr.readyState == 4) { // Php
var data = xhr.responseText; <?php
url = 'http://myhost/myapp/orders/1001'
doSomething(data); response = requests.get(url) $url = 'http://myhost/myapp/orders/1001';
} data = response.json() $response = file_get_contents($url);
} print data $data = json_decode($response);
xhr.open('GET', 'https://myhost/myapp/orders/1001, true); var_dump($data);
xhr.send(null); ?>
// Java
DefaultHttpClient httpClient = new DefaultHttpClient();
No Really?! Why should I care about REST?
HttpGet getRequest = new
HttpGet("https://myhost/myapp/orders/1001");
HttpResponse response = httpClient.execute(getRequest); // Ruby
BufferedReader br = new BufferedReader( require 'json'
new InputStreamReader((response.getEntity().getContent()))); require 'net/http
// Android url = 'http://whatever/service'
DefaultHttpClient httpClient
response ==new DefaultHttpClient();
Net::HTTP.get_response(URI.parse(url))
// jquery
HttpGet getRequestdata
= new = JSON.parse(response.body)
$.getJSON( "https://myhost/myapp/orders/1001", function( data ) {
HttpGet("https://myhost/myapp/orders/1001");
print data
doSomething(data);
HttpResponse response = httpClient.execute(getRequest);
});
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 12


Exam Question 1 Exam Question 2
Describe the core Explain REST
concepts of REST web services
web services. using pictures.

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 13


Understanding REST: You are already an expert
Everyday you And you enter
use a browser URLs to "GET" a
"resource"

http://cloud.oracle.com/mobile/index.html

A URL is And a web page


comprised of a A path "resource" of a specific
remote server "media type"

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


It's not a human
accessing the
resource, it's
software

http://cloud.oracle.com/mobile/index.html

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


It's not a human
accessing the
And their accessing a
resource, it's
remote service
software

http://cloud.oracle.com/mobile/index.html

It doesn't have to be
web pages, it can be
any file (media type)

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


And they utilize the There can be many
HTTP protocol request-response
cycles

HTTP Request
http://cloud.oracle.com/mobile/index.html

HTTP Response

The client makes a


The server responds
HTTP request

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


HTTP Request

Request
http://cloud.oracle.com/mobile/index.html

Response

The HTTP request


carries a payload

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


HTTP Request

GET /mobile/index.html HTTP/1.1

Host: cloud.oracle.com

User-Agent: Mozilla/5.0 Chrome/3.6


Accept: text/html
Accept-Language: en-us
Accept-Encoding: gzip,deflate
Accept-Charset: utf-8
Keep-Alive: 115
Connection: keep-alive

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


HTTP Request

GET /mobile/index.html HTTP/1.1 HTTP

Host: cloud.oracle.com

User-Agent: Mozilla/5.0 Chrome/3.6


Accept: text/html
Accept-Language: en-us
Accept-Encoding: gzip,deflate
Accept-Charset: utf-8
Keep-Alive: 115
Connection: keep-alive

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


HTTP Verb:
GET/HEAD/PUT
/POST/DELETE HTTP Request

GET /mobile/index.html HTTP/1.1 HTTP

Host: cloud.oracle.com

User-Agent: Mozilla/5.0 Chrome/3.6


Accept: text/html
Accept-Language: en-us
Accept-Encoding: gzip,deflate
Accept-Charset: utf-8
Keep-Alive: 115
Connection: keep-alive

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


HTTP Verb:
GET/HEAD/PUT
/POST/DELETE HTTP Request

GET /mobile/index.html HTTP/1.1 HTTP


URI: Server
Host: cloud.oracle.com

User-Agent: Mozilla/5.0 Chrome/3.6


Accept: text/html
Accept-Language: en-us
Accept-Encoding: gzip,deflate
Accept-Charset: utf-8
Keep-Alive: 115
Connection: keep-alive

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


HTTP Verb: URI: Path +
GET/HEAD/PUT Resource
/POST/DELETE HTTP Request

GET /mobile/index.html HTTP/1.1 HTTP


URI: Server
Host: cloud.oracle.com

User-Agent: Mozilla/5.0 Chrome/3.6


Accept: text/html
Accept-Language: en-us
Accept-Encoding: gzip,deflate
Accept-Charset: utf-8
Keep-Alive: 115
Connection: keep-alive

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


HTTP Verb: URI: Path +
GET/HEAD/PUT Resource
/POST/DELETE HTTP Request

GET /mobile/index.html HTTP/1.1 HTTP


URI: Server
Host: cloud.oracle.com

User-Agent: Mozilla/5.0 Chrome/3.6


Accept: text/html
Accept-Language: en-us
Accept-Encoding: gzip,deflate
HTTP Accept-Charset: utf-8
Headers Keep-Alive: 115
Connection: keep-alive

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


HTTP Verb: URI: Path +
GET/HEAD/PUT Resource
/POST/DELETE HTTP Request

GET /mobile/index.html HTTP/1.1 HTTP


URI: Server
Host: cloud.oracle.com

User-Agent: Mozilla/5.0 Chrome/3.6


Accept: text/html
Accept-Language: en-us
Accept-Encoding: gzip,deflate
HTTP Accept-Charset: utf-8
Accept
Headers Keep-Alive: 115
Connection: keep-alive

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


HTTP Verb: URI: Path +
GET/HEAD/PUT Resource
/POST/DELETE HTTP Request

GET /mobile/index.html HTTP/1.1 HTTP


URI: Server
Host: cloud.oracle.com

User-Agent: Mozilla/5.0 Chrome/3.6


Accept: text/html
Accept-Language: en-us
Accept-Encoding: gzip,deflate
HTTP Accept-Charset: utf-8
Accept
Headers Keep-Alive: 115
Connection: keep-alive

No body
Copyright 2015, Oracle and/or its affiliates. All rights reserved. |
HTTP Response

Request
http://cloud.oracle.com/mobile/index.html

Response

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


HTTP Response

HTTP/1.1 200 OK
Date: 26 Jan 2015 00:02:25 GMT
Server: Apache/2.0.55 (Ubuntu)
Request
Connection: Keep-Alive
http://cloud.oracle.com/mobile/data.json
Etag: "1a690fe-40df-f1645340"
Response
<html>
<head>
<title>Oracle MCS</title>
</head>
..etc..

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Status Code
HTTP Response

HTTP/1.1 200 OK
Date: 26 Jan 2015 00:02:25 GMT
Server: Apache/2.0.55 (Ubuntu)
Request
Connection: Keep-Alive
http://cloud.oracle.com/mobile/data.json
Etag: "1a690fe-40df-f1645340"
Response
<html>
<head>
<title>Oracle MCS</title>
</head>
..etc..

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Status Code
HTTP Response

HTTP/1.1 200 OK
Date: 26 Jan 2015 00:02:25 GMT
Server: Apache/2.0.55 (Ubuntu)
Request
Connection: Keep-Alive
http://cloud.oracle.com/mobile/data.json
Etag: "1a690fe-40df-f1645340"
Response
<html>
<head>
<title>Oracle MCS</title>
</head>
..etc.. Payload

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Understanding REST: The four slide introduction

GET http://host/path/departments

Resources GET http://host/path/employees

HTTP verbs
Status codes GET http://host/path/departments/hr

Media types http://host/path/employees/101


GET

GET http://host/path/departments/hr/employees

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Understanding REST: The four slide introduction

GET 'Read' a resource

Resources POST 'Create' a resource


HTTP verbs
Status codes PUT 'Update or Create'
Media types
DELETE 'Delete' a resource

HEAD 'Read' resource headers

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Understanding REST: The four slide introduction

1xx Informational

Resources 2xx Success


HTTP verbs
Status codes 3xx Redirection
Media types Client Error
4xx

5xx Server Error

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Understanding REST: The four slide introduction

Payload type 'requested' by client


Via HTTP Parameter "accept"
Resources Defines MIME types. e.g.
HTTP verbs application/json, application/xml, image/gif

Status codes
{"departments: [
Media types {"id":"MAN","name":"Manfacturing"},
{"id":"HR","name":"Human Resources"},
{"id":"FIN","name":"Finance"},
...etc...
]}

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Understanding JSON: The three slide introduction
{
"firstName":"John",
"lastName":"Smith", JSON is a standard using
"isAlive":true,
"age":25,
human-readable text to
"address": { transmit data objects of
"streetAddress":"21 2nd Street",
"city":"New York",
attribute-value pairs. It is
"state":"NY", typically used in machine to
"postalCode":"10021-3100"
}, machine communications
"phoneNumbers": [ and is a contemporary
{"type":"home", "number":"1234"},
{"type":"office","number":"4567"} replacement for the older
],
"children":[],
XML standard.
"spouse":null - Wikipedia
}

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Understanding JSON: The three slide introduction
{
"firstName":"John",
"lastName":"Smith",
"isAlive":true, Textual data payloads
"age":25,
"address": {
"streetAddress":"21 2nd Street",
Human readable
"city":"New York",
"state":"NY", Supports validation & schemas
"postalCode":"10021-3100"
}, "Fat free" alternative to XML
"phoneNumbers": [
{"type":"home", "number":"1234"}, Compact mobile friendly payloads
{"type":"office","number":"4567"}
], JavaScript has inbuilt support
"children":[],
"spouse":null
}

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Understanding JSON: The three slide introduction
{
"firstName":"John",
Blocks delineated by ellipses
"lastName":"Smith",
"isAlive":true, Key-value pairs, separated by colon
"age":25,
"address": {
Key with quotes
"streetAddress":"21 2nd Street", Strings & dates with quotes
"city":"New York",
"state":"NY", Boolean, integers, null without quotes
"postalCode":"10021-3100"
}, Supports nesting of records
"phoneNumbers": [ Supports arrays/collections
{"type":"home", "number":"1234"},
{"type":"office","number":"4567"} Empty array
],
"children":[], Null values
"spouse":null
} Elements are comma delimited

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Congratulations! Why?

You're now a
REST expert

I feel kind of icky

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 38


Program Agenda

1 REST & JSON Overview


2 Oracle REST Data Services Overview
3 Demonstration

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 39


Oracle REST Data Services (ORDS)

Provides external data access via HTTP


For modern development frameworks
REST is contemporary choice for
JavaScript (web), mobile, cloud solutions

Maps standard HTTP/S RESTful calls to SQL


Declaratively returns results in JSON format
Supports high number of end users

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 40


Release History
Version Date Description

1.0 2010 First release as Oracle APEX Listener with with support for OWA toolkit used by APEX

1.1 2011 First release with REST support for JSON, Microdata, CSV, Pagination. Also added FOP

2.0 2012 OAuth2 support, Integrated with APEX, Multi Database, SQL Developer integration

2.0.5 2013 Added PDB support

2.0.6 2014 Renamed to Oracle REST Data Services to emphasize REST commitment

2.0.8 2014 Added REST Filtering

3.0 2015 REST AutoTable, NoSQL, DB12 JSON, Bulk loading over REST,

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 41


Oracle REST Data Services

Transform

HTTP/S client Oracle Database

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Theres also a It comes by
standalone version default with
for dev purposes Oracle DBaaS
Oracle REST Data Services

HTTP/S

Transform

HTTP/S client Oracle Database

ORDS runs in any Enhanced version


Java EE container: of the Oracle Java
e.g. WLS, Tomcat, mod_plsql Apache
Glassfish module

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Oracle REST Data Services

HTTP/S

Transform

HTTP/S client Oracle Database

HTTP/S & URI


Client makes a
https://myhost/myapp/sales/orders/1001 HTTP 'GET'
request
Context Root Module Template

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


SELECT * FROM ORDERS
WHERE ORDERNO = :b1

Oracle REST Data Services

HTTP/S Map and Bind

Transform

HTTP/S client Oracle Database

HTTP/S & URI


ORDS maps to
https://myhost/myapp/sales/orders/1001
"ORDERS" SQL
Context Root Module Template

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


SELECT * FROM ORDERS
WHERE ORDERNO = :b1

Oracle REST Data Services

HTTP/S Map and Bind SQL

Transform

HTTP/S client Oracle Database

HTTP/S & URI

https://myhost/myapp/sales/orders/1001 JDBC SQL Call


Context Root Module Template

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


SELECT * FROM ORDERS
WHERE ORDERNO = :b1

Oracle REST Data Services

HTTP/S Map and Bind SQL

Transform Result Set

HTTP/S client Oracle Database

HTTP/S & URI

https://myhost/myapp/sales/orders/1001 DB returns
result set
Context Root Module Template

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


SELECT * FROM ORDERS
Transform to WHERE ORDERNO = :b1
JSON, CSV, Excel or
Binary
Oracle REST Data Services

HTTP/S Map and Bind SQL

Transform Transform Result Set

HTTP/S client Oracle Database

{ "orderno": 1001,
HTTP/S & URI "name": "Scott King",
"address": "500 Main street, Innovation CA",
https://myhost/myapp/sales/orders/1001 "items": [ { "itemno": 404, "quantity": 7,
"status": "in process"},
{ "itemno": 303, "quantity": 32,
Context Root Module Template
"status": "closed"} ] }

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


SELECT * FROM ORDERS
Response to HTTP WHERE ORDERNO = :b1
request

Oracle REST Data Services

HTTP/S Map and Bind SQL

JSON
Transform Transform Result Set

HTTP/S client Oracle Database

{ "orderno": 1001,
HTTP/S & URI "name": "Scott King",
"address": "500 Main street, Innovation CA",
https://myhost/myapp/sales/orders/1001 "items": [ { "itemno": 404, "quantity": 7,
"status": "in process"},
{ "itemno": 303, "quantity": 32,
Context Root Module Template
"status": "closed"} ] }

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Summary: Serving JSON results from the database
Oracle REST Data Services

HTTP/S Map and Bind SQL

JSON
Transform Transform Result Set

HTTP/S client Oracle Database

App developers call named URI over HTTP(S) to retrieve and update data
Oracle REST Data Services (ORDS) Developer defines URI<>SQL mapping/binding
Utilizes the data stored in standard relational tables and columns

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Program Agenda

1 REST & JSON Overview


2 Oracle REST Data Services Overview
3 Demonstration

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 51


http://bit.ly/letstalkoracle001

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 52


Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 53
Installing ORDS support in the Database

Several routes:
1. Scripts
2. APEX
3. SQL Developer

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 54


Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 55
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 56
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 57
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 58
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 59
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 60
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 61
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 62
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 63
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 64
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 65
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 66
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 67
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 68
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 69
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 70
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 71
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 72
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 73
Enabling ORDS support in the Database

Several routes:
1. PL/SQL APIs
2. APEX
3. SQL Developer

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 74


Enabling AutoREST Support

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 75


Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 76
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 77
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 78
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 79
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 80
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 81
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 82
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 83
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 84
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 85
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 86
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 87
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 88
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 89
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 90
Generic Filtering via URI Query Support

Add as ?q=<filter> Examples:


Ensure to escape the filter

?q={ "qty": { "$gt": 20 } }


Operators
?q={"$and": [{"price": {"$ne": 1.99}},{"price": {"$notnull": ""}}]
$eq,$gt,$lt,$lte,$gte,
?q={"price": [{"$ne": 1.99}},{"$notnull": ""}]
$ne,$instr,$asof
?q={"$or": [{"qty": {"$lt": 20}},{"sale": {"$eq": "TRUE"}}]
Logical
?q={$asof: {"$timestamp": "}}
$and, $or

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


Configuring Modules & Templates

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 92


Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 93
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 94
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 95
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 96
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 97
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 98
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 99
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 100
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 101
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 102
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 103
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 104
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 105
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 106
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 107
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 108
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 109
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 110
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 111
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 112
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 113
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 114
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 115
Overall REST should be a key technology for:

For you to Common IT Unlock your Unlock your


understand language IT silos data

Data is a Drive the Consider the Consider


key asset business API world Microservices

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 116
Don't forget the alternatives:

JSON inside the db REST & JSON out of the db


PL/JSON, APEX_JSON.. Node.js DB Driver, ORDS..

.#cough #cough and just about every middleware product #hint #hint.

Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 117
Learn More With Gordon Smith

http://bit.ly/letstalkoracle003

Copyright 2015, Oracle and/or its affiliates. All rights reserved. |


118
Copyright 2015, Oracle and/or its affiliates. All rights reserved. | 119

You might also like