Oracle REST Data Services: POUG Edition

hillbillyToad 625 views 66 slides Mar 21, 2021
Slide 1
Slide 1 of 66
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66

About This Presentation

An overview of ORDS for building RESTful Web Services and your Oracle Database with BEER examples!

Thanks and credit to the POUG organization for making this possible.


Slide Content

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 P ints with O racle U ser G roup 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 RESTful Web Services

O racle R EST D ata S ervices Included for free with your Oracle Database!!! oracle.com/rest

RE presentational S tate T ransfer Architectural Style for networked applications Communicates via HTTP, but.. Using HTTP doesn’t magically make your APIs RESTful Terms: REST Jeff annoys people on twitter @thatjeffsmith

Model things, not actions Use VERBS 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} Bonus Tip! 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 RESTful Web Services defined How is ORDS deployed

Automatic Your Code SQL on the fly Management APIs SQLDev Web Delivery Options Jeff annoys people on twitter @thatjeffsmith

GET https://host/ords/hr/beers/1 SELECT * FROM UNTAPPD WHERE ID = 1 JDBC connection pool 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 Transform s 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 or WLS 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 SQLDev Web to build a RESTful Web Service

Services defined in schema Services executed as user Privileges Resources Step 2. REST Enable Schema Jeff annoys people on twitter @thatjeffsmith Services constrained by Database User:

AUTO REST RESTful Services REST => SQL 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

Database Actions/ 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 REST Table Full CRUD API, Data Loading, Metadata (DESC) Auto REST View Read interface (GET), Write (PUT+POST+DELETE w/PK on VIEW) 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 Enabled TABLE 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 GET one or more rows with a query PUT updates to an existing row

All rows / One row /:id – PK Value 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! Instant access to all of your application logic ORDS ‘wrappers’ your existing PL/SQL with HTTPS Breathe new life into your apps!

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) Simply enable the Program 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 Source Types

Base URI Default pagination size Can be protected by common privileges Modules Packaging related services Jeff annoys people on twitter @thatjeffsmith

/ords/ hr / untappd / beers/ /ords/ hr / untappd / beers/:id URI Templates Addressing our Entities Jeff annoys people on twitter @thatjeffsmith

Handlers: Mapping Verbs to the SQL/PLSQL Jeff annoys people on twitter @thatjeffsmith The code behind a service

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 a TABLE a RESTful Webservice… …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 a TABLE a RESTful Webservice… …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 See Todd’s post on OAUTH2 w/ORDS & Micronaut Jeff annoys people on twitter @thatjeffsmith SECURE Your Services

Slides Blogs Articles UKOUG Scene Why REST, and What’s in it or Me? Oracle Magazine AUTO REST & REST Enabled SQL Other Resources Jeff annoys people on twitter @thatjeffsmith