REST - What's It All About? (SAP TechEd 2012, CD110)

Post on 18-Dec-2014

1.165 views 2 download

description

 

Transcript of REST - What's It All About? (SAP TechEd 2012, CD110)

REST – So What’s It All About?

CD110 @ SAP TechEd 2012 Las Vegas

About Me

Sascha Wenninger

Integration Guy: SOA, PI, etc.

Drawer of Diagrams, Writer of Emails

@sufw

Agenda

Concepts   Applica.ons  in  SAP-­‐land   Demo  

Agenda

Concepts   Applica.ons  in  SAP-­‐land   Demo  

REST

REpresentational State Transfer

What Does That Mean?

The Client communicates with the Server

by modifying the state of Resources

through Representations

It’s  the  Web    

(for  machines)  

REST  interfaces  manipulate  the  state  of  resources  “Process  as  a  state  machine/data  flow  diagram”  Resource-­‐oriented  decomposi.on  of  business  processes  

   

SOA-­‐style  interfaces  perform  a  specific  task  “Process  as  a  flowchart/workflow”  Func.onal  decomposi.on  of  business  processes  

Representations?

The server can store its data in whatever way it likes The client is unaware of this, and can store the same things

differently Each party serialises its internal state into Representations This provides loose coupling!

Everything has a URL

URLs because everyone understands them: http://saperp.BlueT.com.au/customer/12345

URLs are cheap. Use lots of them! http://api.netflix.com/catalog/titles/movies/60021896 http://api.netflix.com/catalog/titles/movies/60021896/cast http://api.netflix.com/catalog/titles/movies/60021896/synopsis

Why the http:// URLs?

HTTP is an Application Protocol.

REST recognises this.

But How is that Better than SOAP?

Remember the OSI Stack?

Layer   Example  7   Applica/on   DNS,  FTP,  HTTP,  etc.  6   Presenta.on   SSL  5   Session   L2TP,  PPTP  4   Transport   TCP  3   Network   IP  2   Data  Link   PPP,  ARP  1   Physical   IEEE  802.11  

SOAP was designed to be transport-protocol agnostic

Many bindings for SOAP:

HTTP SMTP JMS

AMQP

Many bindings for SOAP:

HTTP SMTP JMS

AMQP

REST recognises this.

HTTP  is  an  Applica.on  Protocol.  

SOAP knows nothing about it!

So What?

Well, there are benefits to knowing…

Reliable Communication (as long as the client knows how to

handle errors and retries)

Free* Caching! *provided by commodity infrastructure!

Easy Metadata exchange via HTTP Headers! Accept Content-Type If-Modified-Since Last-Modified

…and last but not least…

A Universally-Understood Protocol!

HTTP has Standard Verbs

GET PUT POST DELETE HEAD OPTIONS PATCH TRACE

HTTP has Standard Verbs

Standard Meaning à Constraints = scope for

optimization Widely Implemented à Everybody knows how to behave

SOAP Doesn’t.

getAccountCustomerByInternalId

searchCustomerByBasicData updateSalesProspectStatusByPartnerSalesRepresentativeBasicData_sync

And everything works via HTTP POST (i.e. it uses HTTP as the dumb transport)

HTTP has Standard Responses

200 OK 302 Moved Permanently 404 Not Found 406 Method Not Allowed 409 Conflict 418 I’m a Teapot …

SOAP Doesn’t.

One last principle before we move on:

HATEOAS  

One last principle before we move on:

Hypertext  As  The  Engine  Of  Applica.on  State  

An Example Client requests Shopping Cart Server sends HTML page with items and links

Client’s move Client clicks the “Check Out” link Server sends HTML page with Total Amount

Client’s move Client clicks the “Pay” link Server sends HTML page with “Thank You” message

Notice Something?

The Client is responsible for moving forward in a process The server guides the client forward

(with ‘Check Out’, ‘Pay’ links) The client is responsible for completing the process

If the client stops, the server doesn’t care!

Notice Something?

The server doesn’t maintain session/application state. It does maintain resource state!

Every request modifies the state of a resource In the example, the client causes the state of the “Shopping

Cart” resource to be modified.

Concepts   Applica.ons  in  SAP-­‐land   Demo  

NetWeaver Gateway

RESTful OData API

Add-On to NetWeaver 7.0*

Current version: 2.0 SP05

Strategic for SAP

Devices Enterprise Software

Web

SRM SCM ERP

PLM CRM

SAP  Business  Suite  

SAP  NetWeaver  Gateway  

Social

*see  Prerequisites  and  Deployment  Op.ons  

The Good Things

•  Exposes BAPIs, RFCs & custom ABAP classes via OData XML –  Specific connectors for BOL (GenIL), HANA, BW, BOR, Workflow, etc.

•  Well integrated into SAP’s roadmap –  Tight integration with SUP 2.1+

–  Duet Enterprise uses Gateway internally

•  Framework provides flexible security and auditing/logging

•  Push notifications to consumers after subscription

•  Expose data & functionality from older (pre-7.0) systems

New Since Last Year

•  JSON (finally! :-) •  Batch operations

•  “Deltas”, aka conditional requests •  “Model Composition”, aka Mash-ups

•  New Service Builder (SEGW)

•  Idempotency Support •  etc… (see What’s New)

2 Approaches to Development

Generation Tools

•  Quickly expose BAPIs, RFCs and GUI screens

•  Up & running in minutes!

OData Channel

•  Complete Control •  Build custom code adhering to

a structured framework with a library of helper classes

•  Since SP04: SEGW

2 Approaches to Development

Generation Tools

•  Quickly expose BAPIs, RFCs and GUI screens

•  Up & running in minutes!

OData Channel

•  Complete Control •  Build custom code adhering to

a structured framework with a library of helper classes

•  New tool SEGW since SP04

The Limitations

•  Only supports OData (both XML & JSON) –  no custom representations (other XML/JSON, PDF, etc.)

•  Limited support for complex input parameters

•  Inherits the limitations of the backend services

More Info on Gateway at TechEd

CD109 How the University of Mississippi Runs Better with NetWeaver Gateway

CD160 NetWeaver Gateway Development for Beginners

CD204 NetWeaver Gateway and OData in Detail

CD267 Developing Applications with HTML5 Toolkit and NetWeaver Gateway

MOB107 Best Practices for Establishing and Running a Mobile Landscape

MOB204 Building SAP Applications Using NetWeaver Gateway and HTML5

MOB205 From Start to Finish - Developing an iPad App Using NW Gateway

PMC206 NetWeaver PI and Gateway - When to Use What

TEC107 NetWeaver Gateway Overview - Roadmap and Strategy

Custom Development

DJ Adams Started It All!

A Simple RESTful API for SAP CRM

•  BusinessPartners everywhere •  BPs have roles (e.g. Customer, Contact Person, Employee…) •  BPs have relationships with other BPs •  Relationships have attributes •  Relationships lead to Opportunities

Target consumer: Mobile app built with HTML5 + jQuery Mobile

3 Resources

http://sapcrm:8000/api/businesspartner http://sapcrm:8000/api/bprelationship http://sapcrm:8000/api/opportunity plus any sub-resources we need

Design Principles

JSON as the default format

Roles & Relationships via hyperlinks

Client must only know the ‘entry point’ URL to its own BP

All other client interaction driven by hyperlinks

There is a great ABAP ßà JSON library on CodeExchange!

Sidebar: Hyperlinks in JSON

Sidebar: Hyperlinks in JSON

No one standard to show hyperlinks à We chose the simplest option we found: “links”: {

“self”: “http://…”,

“up”: “http://…”,

“http://auspost.com.au/api/doc/rels/tracking”: “http://…”,

}

magic  keyword  rela.onship*  

custom  rela.onship   link  URL  

*as  per  IANA  standard  

ICF Configuration in SAP CRM

Create  a  public  class    

ICF Configuration in SAP CRM

Assign interface IF_HTTP_EXTENSION

Insert Code Here…

Demo

Summary

•  REST is an architectural style –  Apply web principles to A2A integration –  Promotes true loose coupling via hyperlinks –  Based on Resources rather than functionality or tasks

•  NetWeaver Gateway can expose SAP data & functionality in a RESTful way.

•  More specific requirements can be met with Z code •  Most mobile frameworks rely on RESTful integration

–  But the REST style is equally valid for A2A and non-mobile scenarios!

About Me

Sascha Wenninger sascha@BlueT.com.au @sufw

Get the Latest Version of this Talk!

http://slideshare.net/sufw

This  presenta.on  by  Sascha  Wenninger  is  available  under  a  Crea.ve  Commons  A`ribu.on-­‐ShareAlike  3.0  license  

Feedback

Please complete a session evaluation for this session

Session Code: CD110

Resources & Further Reading A free eBook on REST, by InfoQ: http://www.infoq.com/minibooks/emag-03-2010-rest Other interesting blogs and articles on InfoQ:

http://www.infoq.com/articles/RESTSOAFuture The Richardson Maturity Model, explained by Martin Fowler: http://martinfowler.com/articles/richardsonMaturityModel.html

...and by Leonard Richardson himself: http://www.crummy.com/writing/speaking/2008-QCon/act3.html DJ Adams’ original blog on REST on SCN:

http://scn.sap.com/people/dj.adams/blog/2004/06/24/forget-soap--build-real-web-services-with-the-icf Further blogs by DJ on implementing RESTful services via the ICF:

http://scn.sap.com/people/dj.adams/blog/2009/09/21/a-new-rest-handler-dispatcher-for-the-icf http://scn.sap.com/people/dj.adams/blog/2010/01/07/representational-state-transfer-rest-and-sap http://scn.sap.com/people/dj.adams/blog/2009/09/30/rest-orientation-controlling-access-to-resources

A Simple Intro to JSON: http://json.org CORS – Cross-Origin Resource Sharing, by the Mozilla Developer Network:

http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

Resources & Further Reading RESTful APIs from Scratch – Lessons Learnt (so far):

http://scn.sap.com/community/technology-innovation/blog/2012/06/03/restful-apis-from-scratch-lessons-learnt-so-far The NetWeaver Gateway space on SCN: http://scn.sap.com/community/netweaver-gateway HTTP: An Application-Level Protocol: http://dev.opera.com/articles/view/http-basic-introduction/ HTTP: Let’s GET It On!: http://dev.opera.com/articles/view/http-lets-get-it-on/ HTTP: Response Codes: http://dev.opera.com/articles/view/http-response-codes/ Resources are not Objects: http://ruben.verborgh.org/blog/2012/09/27/the-object-resource-impedance-mismatch/

(a good read for OO programmers) Known Limitations of SAP NetWeaver Gateway: SAP Note 1574568

Attributions Images by Geek & Poke (Oliver Widder):

http://geekandpoke.typepad.com/.a/6a00d8341d3df553ef0133f3e30a99970b-pi http://geekandpoke.typepad.com/.a/6a00d8341d3df553ef0105362b2664970c-pi http://geekandpoke.typepad.com/.a/6a00d8341d3df553ef015390312d9f970b-pi

‘Standards’ by xkcd (Randall Munroe): http://xkcd.com/927/ ‘Permanent State’ by Gaping Void (Hugh MacLeod): http://gapingvoid.com/2011/07/28/permanent-state/ Many thanks to all for providing their work under a Creative Commons license! J