SlideShare a Scribd company logo
RESTful Web Services for
Oracle, POUG Edition
ORDS Product Manager
https://www.thatjeffsmith.com
@thatjeffsmith
Jeff Smith 🍻
• Presented originally in 2019 for POUG in Wroclav, Poland
• Pints with Oracle User Group
• Combines two of my favorite things, ORDS & Beer (beeords!)
• Please drink responsibly
• I have non-alcoholic slides/content on my blog
About these slides…
Jeff annoys people on twitter @thatjeffsmith
• product manager/storyteller
• I help/bother people online
• Working with Oracle Database since 1999
• Helping build database tools since 2001
• I ‘manage’ these products:
whoami
Jeff annoys people on twitter @thatjeffsmith
Today’s Agenda
Jeff annoys people on twitter @thatjeffsmith
• Introduction,Terms, & Definitions
• ORDS Architecture
• Building RESTfulWeb Services
Oracle
REST
Data
Services
Included for free with your Oracle Database!!!
oracle.com/rest
• REpresentational State Transfer
• Architectural Style for networked applications
• Communicates via HTTP, but..
• Using HTTP doesn’t magically make yourAPIs RESTful
Terms: REST
Jeff annoys people on twitter @thatjeffsmith
• Model things, not actions
• UseVERBS to interact,GET, PUT, POST, DELETE
• Stateless, so be sure to use LINKs to guide your users
POST beers/ =>Adds beer, responds w/link
GET beers/:id =>
Jeff annoys people on twitter @thatjeffsmith
RESTful Architecture
🍻
• Jay-Sun
• Not just for js!
• Skinnier than XML
• Flexible
• Link-friendly
Terms: {JSON}
Jeff annoys people on twitter @thatjeffsmith
{JSON} BonusTip!
Our tools make it easy to
get your database data in
JSON format, pretty or RAW
Jeff annoys people on twitter @thatjeffsmith
…
ORDS Features and Architecture
Jeff annoys people on twitter @thatjeffsmith
• How are RESTfulWeb Services defined
• How is ORDS deployed
• Automatic
• Your Code
• SQL on the fly
• ManagementAPIs
• SQLDevWeb
Delivery Options
Jeff annoys people on twitter @thatjeffsmith
GET https://host/ords/hr/beers/1 SELECT *
FROM UNTAPPD
WHERE ID = 1
HTTP/1.1 200 OK
{ “id": 100,
“name": “Bud Lite“,
“score": “0",
“comments": “yuck” }
{json}
URI SQL & PLSQL
Marshalls to Database
HTTP Request
HTTP Response Transforms to JSON SQL Result Set / Standard OUT
Oracle REST Data Services
ORDS: HTTP to SQL and back
Jeff annoys people on twitter @thatjeffsmith
• Webserver layout
• Java Servlet
• Tomcat orWLS
ORDS Architecture
Option #1
Tomcat, WLS
ORDS
Apache
Static Files
-HTML, CSS, JS
/ords/…
/db1/hr/emp/
JSON
Binary
HTML
…
HTTP(s)
Results
JDBC
pool1 pool2 pool3
Request
JDBC JDBC
Jeff annoys people on twitter @thatjeffsmith
java –jar ords.war standalone
• Supported for production!
• ORDS is your webserver &
web listener for your
Oracle Databases
ORDS
Static Files
-HTML
, CSS,
JS
/db1/hr/emp/
JSON
Binary
HTML
…
HTTP(s)
Response
JDBC
pool1 pool2 pool3
Request
JDBC JDBC
Jeff annoys people on twitter @thatjeffsmith
ORDS Architecture
Option #2 : Standalone
• JDBC Conn Pools
• 1 Pool Per Database
• ORDS_PUBLIC_USER
• Proxy Connects
Enabled DB Users
ORDS & Database Communication
Jeff annoys people on twitter @thatjeffsmith
• PUT – HTTP Verb
• HTTPS – secure, encrypted version of HTTP (recommended!)
• Server:8080 – network location where ORDS is running
• ords – ords.war, Java servlet
• hr – schema alias, where service is defined
• examples – module, a collection of services
• beers/:id – template, defines the resource
Unwinding an ORDS Request
Jeff annoys people on twitter @thatjeffsmith
PUT https://server:8080/ords/hr/examples/beers/:id
Install & Start
ORDS
REST Enable
Application
SCHEMA
Publish RESTful
Service or REST
Enable object
1 2 3
Getting Started Steps
Jeff annoys people on twitter @thatjeffsmith
Jeff annoys people on twitter @thatjeffsmith
Step 1, Install ORDS
Video: I talk about the process, DO an install, use SQLDevWeb to build
a RESTfulWeb Service
• Services defined in schema
• Services executed as user
Step 2. REST Enable Schema
Jeff annoys people on twitter @thatjeffsmith
Services constrained by Database User:
• AUTO REST
• RESTful Services
Step 3. Define your Service
Jeff annoys people on twitter @thatjeffsmith
What RESTful Services could look like…
Jeff annoys people on twitter @thatjeffsmith
Twoje zdrowie! Or Cheers!
• UNTAPPD: my personal beer diary
• YES, these are MY pictures and MY comments
• Examples will show building REST APIs for my diary
🍻
Jeff annoys people on twitter @thatjeffsmith
Example – Beers w/pictures
SELECT beer_name,
brewery_name,
created_at,
photo_url "$pics",
comments
FROM untappd
WHERE photo_url IS NOT NULL
ORDER BY checkin_id DESC
Jeff annoys people on twitter @thatjeffsmith
GET all beers, with links to pictures
Example – Using Query String Parameters
?q={"beer_type":{"$like":"Stout%25"}}
Jeff annoys people on twitter @thatjeffsmith
SAME SQL, but…
ORDS injects the WHERE clause
for us.
No additional coding required!
Example: More Query String Parameters
?q={"beer_type":{"$like":"%25Tripel%25"}}
Jeff annoys people on twitter @thatjeffsmith
Filtering, Sorting and More
ORDS Handles the
SQL for you
Jeff annoys people on twitter @thatjeffsmith
Example: Generating Links
“$alias” => LINK
Jeff annoys people on twitter @thatjeffsmith
Example: Working w/JSON Data in the DB
Jeff annoys people on twitter @thatjeffsmith
BAD 
Escaping JSON 
Jeff annoys people on twitter @thatjeffsmith
Where/how to code your Services
Jeff annoys people on twitter @thatjeffsmith
Oracle SQL Developer
• Full ORDS Integration
• Develop RESTful Services
• REST Enable Objects
• Manage ORDS Roles and
Privileges
• Free! OS X,Windows, or Linux
IDE
Jeff annoys people on twitter @thatjeffsmith
DatabaseActions/SQLDev Web
• ORDS Single Page App
• Develop RESTful Services
• REST Enable Objects
• Manage ORDS Roles and
Privileges, OAuth2 Clients
• Free! Any major browser.
Browser
Jeff annoys people on twitter @thatjeffsmith
CLI & PL/SQL APIs
Jeff annoys people on twitter @thatjeffsmith
SQLcl Anywhere you can run PL/SQL
Or Application Express (APEX)
Jeff annoys people on twitter @thatjeffsmith
APEX is NOT required
Time to start building!
Jeff annoys people on twitter @thatjeffsmith
Home Brewing or Store Bought?
Your Code Someone Else’s
Jeff annoys people on twitter @thatjeffsmith
AUTOREST
• CRUD APIs, no SQL to write
• Single ORDS call to create
• Maintained by ORCL
• Feature Packed
• Optimized
RESTful Services
• You control:
• Inputs, outputs, error handling,
response codes, formatting
• Your SQL/PLSQL code
• Easily exported, source
controlled
• Transparent
Choose your own adventure!
Jeff annoys people on twitter @thatjeffsmith
AUTOREST Database Objects
TABLES
VIEWS
PROCEDURES
FUNCTIONS
PACKAGES
Jeff annoys people on twitter @thatjeffsmith
• Auto RESTTable
– Full CRUD API, Data Loading, Metadata (DESC)
• Auto RESTView
– Read interface (GET),Write (PUT+POST+DELETE w/PK onVIEW)
• Auto PL/SQL (RPC)
– POST to execute stored PL/SQL
– We accept {json} in, map to input params, grab output and {json} out
Automatic – ORDS owns the code
Jeff annoys people on twitter @thatjeffsmith
• GET
• PUT
• POST
• DELETE
• DESC
• DOCS
AutoREST Table /ords/hr/beers/
/ords/hr/beers/:PK
Jeff annoys people on twitter @thatjeffsmith
Jeff annoys people on twitter @thatjeffsmith
REST Enabling a TABLE
REST EnabledTABLE Swagger API Doc
• Table Metadata
• SELECT
Query Filtering/Order/ASOF SCN or Timestamp
• INSERT
• UPDATE
• DELETE
• BATCHLOAD
Jeff annoys people on twitter @thatjeffsmith
Jeff annoys people on twitter @thatjeffsmith
Two Quick AUTOREST TABLE Examples
1. GET one or more rows with a query
2. PUT updates to an existing row
• All rows /
• One row /:id – PKValue
– No PK, default to ROWID
– Multi-column PK /x,y,z
• Some rows /?q={json}
SELECT (GET)
Jeff annoys people on twitter @thatjeffsmith
METHOD : PUT /:PK
REQUEST BODY : JSON
RESPONSE: 200 OK
• Location (Header)
• JSON (Body)
UPDATE (PUT) : adding comments
REQUEST BODY
Jeff annoys people on twitter @thatjeffsmith
RESPONSE
Jeff annoys people on twitter @thatjeffsmith
We also support your PL/SQL Code!
1. Instant access to all of your application logic
2. ORDS ‘wrappers’ your existing PL/SQL with HTTPS
• POST /ords/hr/procA
• JSON Responses & Results (OUTs/RETURNs/REFCURSORs)
Accessing your PL/SQL Code, Automatically
Jeff annoys people on twitter @thatjeffsmith
Remote Procedure Call over HTTP (POST)
Jeff annoys people on twitter @thatjeffsmith
Remote Procedure Call over HTTP (POST)
Request
p(arg =>input)
Procedure output formatted {json} – links and all
Jeff annoys people on twitter @thatjeffsmith
RESTful Services, write your own code
Jeff annoys people on twitter @thatjeffsmith
• Modules
• Templates
• Handlers
• SourceTypes
• Base URI
• Default pagination size
• Can be protected by
common privileges
Modules
Jeff annoys people on twitter @thatjeffsmith
/ords/hr/untappd/beers/
/ords/hr/untappd/beers/:id
URI Templates
Jeff annoys people on twitter @thatjeffsmith
Handlers: Mapping Verbs to the SQL/PLSQL
Jeff annoys people on twitter @thatjeffsmith
• Collection Query
– Multiple records/paging
• Collection Query Item
– Single record only/no paging
• Media
– Streams the output directly
• PL/SQL
– Print HTML (HTP.P) or Code the Response
yourself (headers and body)
Source Types - Shapes Responses
Jeff annoys people on twitter @thatjeffsmith
RESTful Service Example #1
• aTABLE
• a RESTfulWebservice…
• …that INSERTs a record
Implementation
• Template => media/
• Handler => POST
• Source => PL/SQL
Jeff annoys people on twitter @thatjeffsmith
INSERT a record w/a BLOB
Jeff annoys people on twitter @thatjeffsmith
• ORDS defines request body & headers w/ :binds
• ORDS defines response body & headers w/ :binds
ORDS makes HTTP & SQL, easy!
INSERT INTO table (blob) VALUES (:body);
:status := 201;
:location := ‘../’ || id;
Jeff annoys people on twitter @thatjeffsmith
• We got the BLOB from the HTTP request via :body
• We got the other columns from HTTP request headers
• We INSERT the record
• We set HTTP LOCATION and STATUS
…in ~3 lines of PL/SQL!!!
What just happened?
Jeff annoys people on twitter @thatjeffsmith
RESTful Service Example #2
• aTABLE
• a RESTfulWebservice…
• …that gives list of links
Implementation
• Template => beers/:style/pics
• Handler => GET
• Source => SQL
Jeff annoys people on twitter @thatjeffsmith
Print a list of Rows w/LINKs to pictures
Jeff annoys people on twitter @thatjeffsmith
• SQL SELECT to get the data
• Predicate value pulled from URI via :type bind
• We told ORDS to generate a link with an “$alias”
What just happened?
Jeff annoys people on twitter @thatjeffsmith
Time to wind things down, Last Call!
Jeff annoys people on twitter @thatjeffsmith
• Source code, CI/CD
• Documentation
• Authorization
Backup/Source Control your REST Code
• GUI
• SQL
• CLI/Liquibase
Generated via:
Jeff annoys people on twitter @thatjeffsmith
Document your APIs with OpenAPI
• GUI
• REST
Generated via:
Jeff annoys people on twitter @thatjeffsmith
• See MY post on OAUTH2 w/ORDS
• SeeTodd’s post on OAUTH2 w/ORDS & Micronaut
Jeff annoys people on twitter @thatjeffsmith
SECURE Your Services
• Slides
• Blogs
• Articles
UKOUG Scene Why REST, andWhat’s in it or Me?
Oracle Magazine AUTO REST & REST Enabled SQL
Other Resources
Jeff annoys people on twitter @thatjeffsmith

More Related Content

PPTX
RESTful Services for your Oracle Autonomous Database
PPTX
Oracle Database Management REST API
PPTX
Oracle Database 12c Feature Support in Oracle SQL Developer
PPTX
Oracle SQL Developer: 3 Features You're Not Using But Should Be
PPTX
Debugging PL/SQL with Oracle SQL Developer
PPTX
Oracle SQL Developer: You're Doing it Wrong!
PPTX
PL/SQL All the Things in Oracle SQL Developer
PPTX
What's New in Oracle SQL Developer for 2018
RESTful Services for your Oracle Autonomous Database
Oracle Database Management REST API
Oracle Database 12c Feature Support in Oracle SQL Developer
Oracle SQL Developer: 3 Features You're Not Using But Should Be
Debugging PL/SQL with Oracle SQL Developer
Oracle SQL Developer: You're Doing it Wrong!
PL/SQL All the Things in Oracle SQL Developer
What's New in Oracle SQL Developer for 2018

What's hot (20)

PPTX
Oracle SQLcl: Formatting your Query Results
PPTX
Oracle SQL Developer Top 10 Tips & Tricks
PPTX
Oracle SQL Developer Reports
PPTX
REST Enabling your Oracle Database (2018 Update)
PPTX
SQLcl overview - A new Command Line Interface for Oracle Database
PPTX
Oracle REST Data Services: Options for your Web Services
PPTX
Oracle SQL Developer Tips & Tricks
PPTX
Change Management for Oracle Database with SQLcl
PPTX
Pennsylvania Banner User Group Webinar: Oracle SQL Developer Tips & Tricks
PPTX
REST Enabling Your Oracle Database
PPTX
Oracle SQL Developer Tips and Tricks: Data Edition
PPTX
Oracle Office Hours - Exposing REST services with APEX and ORDS
PPTX
Debugging PL/SQL from your APEX Applications with Oracle SQL Developer
PPTX
Oracle REST Data Services Best Practices/ Overview
PDF
ORDS - Oracle REST Data Services
PPTX
Oracle SQL Developer for the DBA
PDF
Oracle SQLcl
PPTX
Oracle SQL Developer Data Modeler - for SQL Server
PPTX
Oracle SQL Developer for SQL Server?
PPTX
PLSQL Developer tips and tricks
Oracle SQLcl: Formatting your Query Results
Oracle SQL Developer Top 10 Tips & Tricks
Oracle SQL Developer Reports
REST Enabling your Oracle Database (2018 Update)
SQLcl overview - A new Command Line Interface for Oracle Database
Oracle REST Data Services: Options for your Web Services
Oracle SQL Developer Tips & Tricks
Change Management for Oracle Database with SQLcl
Pennsylvania Banner User Group Webinar: Oracle SQL Developer Tips & Tricks
REST Enabling Your Oracle Database
Oracle SQL Developer Tips and Tricks: Data Edition
Oracle Office Hours - Exposing REST services with APEX and ORDS
Debugging PL/SQL from your APEX Applications with Oracle SQL Developer
Oracle REST Data Services Best Practices/ Overview
ORDS - Oracle REST Data Services
Oracle SQL Developer for the DBA
Oracle SQLcl
Oracle SQL Developer Data Modeler - for SQL Server
Oracle SQL Developer for SQL Server?
PLSQL Developer tips and tricks
Ad

Similar to Oracle REST Data Services: POUG Edition (20)

KEY
Modern Web technologies (and why you should care): Megacomm, Jerusalem, Febru...
PDF
flickr's architecture & php
KEY
Modern Web Technologies — Jerusalem Web Professionals, January 2011
PPTX
Devops kc meetup_5_20_2013
PPTX
Scaling with swagger
PDF
NotaCon 2011 - Networking for Pentesters
PDF
Database story by DevOps
PPTX
DevOps Columbus Meetup Kickoff - Infrastructure as Code
PPT
Website designing company_in_delhi_phpwebdevelopment
KEY
WordPress APIs
KEY
Webapp security testing
KEY
Webapp security testing
PDF
NoSQL and SQL - Why Choose? Enjoy the best of both worlds with MySQL
PPTX
OData Services
PDF
pandas.(to/from)_sql is simple but not fast
PPTX
Modeling Tricks My Relational Database Never Taught Me
PDF
JSON REST API for WordPress
PPTX
Austin Day of Rest - Introduction
KEY
Introduction to NodeJS with LOLCats
PDF
Reviewing RESTful Web Apps
Modern Web technologies (and why you should care): Megacomm, Jerusalem, Febru...
flickr's architecture & php
Modern Web Technologies — Jerusalem Web Professionals, January 2011
Devops kc meetup_5_20_2013
Scaling with swagger
NotaCon 2011 - Networking for Pentesters
Database story by DevOps
DevOps Columbus Meetup Kickoff - Infrastructure as Code
Website designing company_in_delhi_phpwebdevelopment
WordPress APIs
Webapp security testing
Webapp security testing
NoSQL and SQL - Why Choose? Enjoy the best of both worlds with MySQL
OData Services
pandas.(to/from)_sql is simple but not fast
Modeling Tricks My Relational Database Never Taught Me
JSON REST API for WordPress
Austin Day of Rest - Introduction
Introduction to NodeJS with LOLCats
Reviewing RESTful Web Apps
Ad

More from Jeff Smith (7)

PPTX
Social Media - Why a Database Person Should Care
PPTX
All of the Performance Tuning Features in Oracle SQL Developer
PPT
If You Oracle Then You Should Twitter Too
PPTX
My Favorite Oracle SQL Developer Data Modeler Features
PPTX
Oracle SQL Developer Data Modeler - Version Control Your Designs
PPTX
Dimensional modeling in oracle sql developer
PPTX
Oracle SQL Developer version 4.0 New Features Overview
Social Media - Why a Database Person Should Care
All of the Performance Tuning Features in Oracle SQL Developer
If You Oracle Then You Should Twitter Too
My Favorite Oracle SQL Developer Data Modeler Features
Oracle SQL Developer Data Modeler - Version Control Your Designs
Dimensional modeling in oracle sql developer
Oracle SQL Developer version 4.0 New Features Overview

Recently uploaded (20)

PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Electronic commerce courselecture one. Pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPT
Teaching material agriculture food technology
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Spectroscopy.pptx food analysis technology
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
Big Data Technologies - Introduction.pptx
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
cuic standard and advanced reporting.pdf
Network Security Unit 5.pdf for BCA BBA.
NewMind AI Weekly Chronicles - August'25 Week I
MIND Revenue Release Quarter 2 2025 Press Release
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Spectral efficient network and resource selection model in 5G networks
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Electronic commerce courselecture one. Pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Dropbox Q2 2025 Financial Results & Investor Presentation
Teaching material agriculture food technology
MYSQL Presentation for SQL database connectivity
Spectroscopy.pptx food analysis technology
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Encapsulation_ Review paper, used for researhc scholars
Big Data Technologies - Introduction.pptx
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
The AUB Centre for AI in Media Proposal.docx
cuic standard and advanced reporting.pdf

Oracle REST Data Services: POUG Edition

  • 1. RESTful Web Services for Oracle, POUG Edition ORDS Product Manager https://www.thatjeffsmith.com @thatjeffsmith Jeff Smith 🍻
  • 2. • Presented originally in 2019 for POUG in Wroclav, Poland • Pints with Oracle User Group • Combines two of my favorite things, ORDS & Beer (beeords!) • Please drink responsibly • I have non-alcoholic slides/content on my blog About these slides… Jeff annoys people on twitter @thatjeffsmith
  • 3. • product manager/storyteller • I help/bother people online • Working with Oracle Database since 1999 • Helping build database tools since 2001 • I ‘manage’ these products: whoami Jeff annoys people on twitter @thatjeffsmith
  • 4. Today’s Agenda Jeff annoys people on twitter @thatjeffsmith • Introduction,Terms, & Definitions • ORDS Architecture • Building RESTfulWeb Services
  • 5. Oracle REST Data Services Included for free with your Oracle Database!!! oracle.com/rest
  • 6. • REpresentational State Transfer • Architectural Style for networked applications • Communicates via HTTP, but.. • Using HTTP doesn’t magically make yourAPIs RESTful Terms: REST Jeff annoys people on twitter @thatjeffsmith
  • 7. • Model things, not actions • UseVERBS to interact,GET, PUT, POST, DELETE • Stateless, so be sure to use LINKs to guide your users POST beers/ =>Adds beer, responds w/link GET beers/:id => Jeff annoys people on twitter @thatjeffsmith RESTful Architecture 🍻
  • 8. • Jay-Sun • Not just for js! • Skinnier than XML • Flexible • Link-friendly Terms: {JSON} Jeff annoys people on twitter @thatjeffsmith
  • 9. {JSON} BonusTip! Our tools make it easy to get your database data in JSON format, pretty or RAW Jeff annoys people on twitter @thatjeffsmith …
  • 10. ORDS Features and Architecture Jeff annoys people on twitter @thatjeffsmith • How are RESTfulWeb Services defined • How is ORDS deployed
  • 11. • Automatic • Your Code • SQL on the fly • ManagementAPIs • SQLDevWeb Delivery Options Jeff annoys people on twitter @thatjeffsmith
  • 12. GET https://host/ords/hr/beers/1 SELECT * FROM UNTAPPD WHERE ID = 1 HTTP/1.1 200 OK { “id": 100, “name": “Bud Lite“, “score": “0", “comments": “yuck” } {json} URI SQL & PLSQL Marshalls to Database HTTP Request HTTP Response Transforms to JSON SQL Result Set / Standard OUT Oracle REST Data Services ORDS: HTTP to SQL and back Jeff annoys people on twitter @thatjeffsmith
  • 13. • Webserver layout • Java Servlet • Tomcat orWLS ORDS Architecture Option #1 Tomcat, WLS ORDS Apache Static Files -HTML, CSS, JS /ords/… /db1/hr/emp/ JSON Binary HTML … HTTP(s) Results JDBC pool1 pool2 pool3 Request JDBC JDBC Jeff annoys people on twitter @thatjeffsmith
  • 14. java –jar ords.war standalone • Supported for production! • ORDS is your webserver & web listener for your Oracle Databases ORDS Static Files -HTML , CSS, JS /db1/hr/emp/ JSON Binary HTML … HTTP(s) Response JDBC pool1 pool2 pool3 Request JDBC JDBC Jeff annoys people on twitter @thatjeffsmith ORDS Architecture Option #2 : Standalone
  • 15. • JDBC Conn Pools • 1 Pool Per Database • ORDS_PUBLIC_USER • Proxy Connects Enabled DB Users ORDS & Database Communication Jeff annoys people on twitter @thatjeffsmith
  • 16. • PUT – HTTP Verb • HTTPS – secure, encrypted version of HTTP (recommended!) • Server:8080 – network location where ORDS is running • ords – ords.war, Java servlet • hr – schema alias, where service is defined • examples – module, a collection of services • beers/:id – template, defines the resource Unwinding an ORDS Request Jeff annoys people on twitter @thatjeffsmith PUT https://server:8080/ords/hr/examples/beers/:id
  • 17. Install & Start ORDS REST Enable Application SCHEMA Publish RESTful Service or REST Enable object 1 2 3 Getting Started Steps Jeff annoys people on twitter @thatjeffsmith
  • 18. Jeff annoys people on twitter @thatjeffsmith Step 1, Install ORDS Video: I talk about the process, DO an install, use SQLDevWeb to build a RESTfulWeb Service
  • 19. • Services defined in schema • Services executed as user Step 2. REST Enable Schema Jeff annoys people on twitter @thatjeffsmith Services constrained by Database User:
  • 20. • AUTO REST • RESTful Services Step 3. Define your Service Jeff annoys people on twitter @thatjeffsmith
  • 21. What RESTful Services could look like… Jeff annoys people on twitter @thatjeffsmith
  • 22. Twoje zdrowie! Or Cheers! • UNTAPPD: my personal beer diary • YES, these are MY pictures and MY comments • Examples will show building REST APIs for my diary 🍻 Jeff annoys people on twitter @thatjeffsmith
  • 23. Example – Beers w/pictures SELECT beer_name, brewery_name, created_at, photo_url "$pics", comments FROM untappd WHERE photo_url IS NOT NULL ORDER BY checkin_id DESC Jeff annoys people on twitter @thatjeffsmith GET all beers, with links to pictures
  • 24. Example – Using Query String Parameters ?q={"beer_type":{"$like":"Stout%25"}} Jeff annoys people on twitter @thatjeffsmith SAME SQL, but… ORDS injects the WHERE clause for us. No additional coding required!
  • 25. Example: More Query String Parameters ?q={"beer_type":{"$like":"%25Tripel%25"}} Jeff annoys people on twitter @thatjeffsmith
  • 26. Filtering, Sorting and More ORDS Handles the SQL for you Jeff annoys people on twitter @thatjeffsmith
  • 27. Example: Generating Links “$alias” => LINK Jeff annoys people on twitter @thatjeffsmith
  • 28. Example: Working w/JSON Data in the DB Jeff annoys people on twitter @thatjeffsmith BAD 
  • 29. Escaping JSON  Jeff annoys people on twitter @thatjeffsmith
  • 30. Where/how to code your Services Jeff annoys people on twitter @thatjeffsmith
  • 31. Oracle SQL Developer • Full ORDS Integration • Develop RESTful Services • REST Enable Objects • Manage ORDS Roles and Privileges • Free! OS X,Windows, or Linux IDE Jeff annoys people on twitter @thatjeffsmith
  • 32. DatabaseActions/SQLDev Web • ORDS Single Page App • Develop RESTful Services • REST Enable Objects • Manage ORDS Roles and Privileges, OAuth2 Clients • Free! Any major browser. Browser Jeff annoys people on twitter @thatjeffsmith
  • 33. CLI & PL/SQL APIs Jeff annoys people on twitter @thatjeffsmith SQLcl Anywhere you can run PL/SQL
  • 34. Or Application Express (APEX) Jeff annoys people on twitter @thatjeffsmith APEX is NOT required
  • 35. Time to start building! Jeff annoys people on twitter @thatjeffsmith
  • 36. Home Brewing or Store Bought? Your Code Someone Else’s Jeff annoys people on twitter @thatjeffsmith
  • 37. AUTOREST • CRUD APIs, no SQL to write • Single ORDS call to create • Maintained by ORCL • Feature Packed • Optimized RESTful Services • You control: • Inputs, outputs, error handling, response codes, formatting • Your SQL/PLSQL code • Easily exported, source controlled • Transparent Choose your own adventure! Jeff annoys people on twitter @thatjeffsmith
  • 39. • Auto RESTTable – Full CRUD API, Data Loading, Metadata (DESC) • Auto RESTView – Read interface (GET),Write (PUT+POST+DELETE w/PK onVIEW) • Auto PL/SQL (RPC) – POST to execute stored PL/SQL – We accept {json} in, map to input params, grab output and {json} out Automatic – ORDS owns the code Jeff annoys people on twitter @thatjeffsmith
  • 40. • GET • PUT • POST • DELETE • DESC • DOCS AutoREST Table /ords/hr/beers/ /ords/hr/beers/:PK Jeff annoys people on twitter @thatjeffsmith
  • 41. Jeff annoys people on twitter @thatjeffsmith REST Enabling a TABLE
  • 42. REST EnabledTABLE Swagger API Doc • Table Metadata • SELECT Query Filtering/Order/ASOF SCN or Timestamp • INSERT • UPDATE • DELETE • BATCHLOAD Jeff annoys people on twitter @thatjeffsmith
  • 43. Jeff annoys people on twitter @thatjeffsmith Two Quick AUTOREST TABLE Examples 1. GET one or more rows with a query 2. PUT updates to an existing row
  • 44. • All rows / • One row /:id – PKValue – No PK, default to ROWID – Multi-column PK /x,y,z • Some rows /?q={json} SELECT (GET) Jeff annoys people on twitter @thatjeffsmith
  • 45. METHOD : PUT /:PK REQUEST BODY : JSON RESPONSE: 200 OK • Location (Header) • JSON (Body) UPDATE (PUT) : adding comments REQUEST BODY Jeff annoys people on twitter @thatjeffsmith RESPONSE
  • 46. Jeff annoys people on twitter @thatjeffsmith We also support your PL/SQL Code! 1. Instant access to all of your application logic 2. ORDS ‘wrappers’ your existing PL/SQL with HTTPS
  • 47. • POST /ords/hr/procA • JSON Responses & Results (OUTs/RETURNs/REFCURSORs) Accessing your PL/SQL Code, Automatically Jeff annoys people on twitter @thatjeffsmith
  • 48. Remote Procedure Call over HTTP (POST) Jeff annoys people on twitter @thatjeffsmith
  • 49. Remote Procedure Call over HTTP (POST) Request p(arg =>input) Procedure output formatted {json} – links and all Jeff annoys people on twitter @thatjeffsmith
  • 50. RESTful Services, write your own code Jeff annoys people on twitter @thatjeffsmith • Modules • Templates • Handlers • SourceTypes
  • 51. • Base URI • Default pagination size • Can be protected by common privileges Modules Jeff annoys people on twitter @thatjeffsmith
  • 53. Handlers: Mapping Verbs to the SQL/PLSQL Jeff annoys people on twitter @thatjeffsmith
  • 54. • Collection Query – Multiple records/paging • Collection Query Item – Single record only/no paging • Media – Streams the output directly • PL/SQL – Print HTML (HTP.P) or Code the Response yourself (headers and body) Source Types - Shapes Responses Jeff annoys people on twitter @thatjeffsmith
  • 55. RESTful Service Example #1 • aTABLE • a RESTfulWebservice… • …that INSERTs a record Implementation • Template => media/ • Handler => POST • Source => PL/SQL Jeff annoys people on twitter @thatjeffsmith
  • 56. INSERT a record w/a BLOB Jeff annoys people on twitter @thatjeffsmith
  • 57. • ORDS defines request body & headers w/ :binds • ORDS defines response body & headers w/ :binds ORDS makes HTTP & SQL, easy! INSERT INTO table (blob) VALUES (:body); :status := 201; :location := ‘../’ || id; Jeff annoys people on twitter @thatjeffsmith
  • 58. • We got the BLOB from the HTTP request via :body • We got the other columns from HTTP request headers • We INSERT the record • We set HTTP LOCATION and STATUS …in ~3 lines of PL/SQL!!! What just happened? Jeff annoys people on twitter @thatjeffsmith
  • 59. RESTful Service Example #2 • aTABLE • a RESTfulWebservice… • …that gives list of links Implementation • Template => beers/:style/pics • Handler => GET • Source => SQL Jeff annoys people on twitter @thatjeffsmith
  • 60. Print a list of Rows w/LINKs to pictures Jeff annoys people on twitter @thatjeffsmith
  • 61. • SQL SELECT to get the data • Predicate value pulled from URI via :type bind • We told ORDS to generate a link with an “$alias” What just happened? Jeff annoys people on twitter @thatjeffsmith
  • 62. Time to wind things down, Last Call! Jeff annoys people on twitter @thatjeffsmith • Source code, CI/CD • Documentation • Authorization
  • 63. Backup/Source Control your REST Code • GUI • SQL • CLI/Liquibase Generated via: Jeff annoys people on twitter @thatjeffsmith
  • 64. Document your APIs with OpenAPI • GUI • REST Generated via: Jeff annoys people on twitter @thatjeffsmith
  • 65. • See MY post on OAUTH2 w/ORDS • SeeTodd’s post on OAUTH2 w/ORDS & Micronaut Jeff annoys people on twitter @thatjeffsmith SECURE Your Services
  • 66. • Slides • Blogs • Articles UKOUG Scene Why REST, andWhat’s in it or Me? Oracle Magazine AUTO REST & REST Enabled SQL Other Resources Jeff annoys people on twitter @thatjeffsmith

Editor's Notes

  • #6: There have been many many remote procedure call/distributed communication protocols. Many have been very deeply specified with thousands of pages of specifications, but in the end the industry moved away from these protocols to a much looser concept. So loose it cannot even deemed a protocol, rather REST is referred to as an architectural style. REST won not by being the most advanced, or the most capable, or the most efficient, but by being the easiest to get to grips with. Which is both a blessing and a curse. The world is full of less than optimal REST APIs. Because REST is so approachable folks quickly move to building and shipping APIs without considering some of the more thorny issues that every distributed application has to deal with How to manage concurrency, how to deal with lost updates, co-ordinate transactions How to deal with unavailability How to deal with massive scale Oracle REST Data Services is designed to deal with many of these issues, we’ve done the hard thinking and chosen approaches to deal with these issues so developers using ORDS don’t need to worry about them so much. I want to draw a comparison between REST and another foundational technology, UNIX. When I think of UNIX I picture big air conditioned rooms in data centres full of big iron servers. But that’s not the reality of UNIX today. It’s not just data centres and backend servers. The reality is UNIX is all around you, you wear it on your wrist, you carry it in your pocket, it powers the movies you watch when sat on an aeroplane, it controls the car you drive, it is literally everywhere. It is part of the fabric of our reality, but it’s not something out there in front of you. It’s a building block, something atop which much of the rest of the technology in our lives is built upon. I’m sure everyone in this room knows how to get around in UNIX, I’m sure that wasn’t always the case, there was a time when all I knew was MS-DOS and Windows. UNIX was a foreign land, and even seemed like something that was fading away under the march of Windows, but that time was so long ago and now I can’t picture a future where knowing and being comfortable using UNIX won’t be a valuable skill for at least another decade or two. I feel REST is following a similar trajectory. It is almost as old as the HTTP protocol itself, and it’s popularity and ubiquity has taken a considerable amount of time to build, but now that it’s value has been recognised, I don’t see it’s utility being displaced until the next paradigm shift in computing technology occurs. It has become one of the building blocks we take for granted. And thus everyone needs to know and understand REST and more importantly every piece of technology involved in distributed computing needs to be a good and competent REST citizen.
  • #13: New with REST Data services 3.0 it does not require APEX to define your REST Data services. Oracle currently distributes “Oracle APEX Listener”, which will be renamed to Oracle REST Data Services. Delivered with Database 12.1.0.2 Java Based plugin replacement for Apache mod_plsql Formally known as Oracle APEX listener available on OTN Available today on our Database Cloud Schema Service
  • #46: Perform a GET on the Collection URI to retrieve the resource In ORDS the response is a JSON document with two main elements: items: lists the items in the collection links: provides hyperlinks to help navigate the collection (next) and to identify the URI to use to POST new Items to the Collection