43
Push-Enabling RESTful Business Processes Cesare Pautasso Faculty of Informatics, University of Lugano, Switzerland [email protected] http://www.pautasso.info @pautasso 6.12.2011 Erik Wilde EMC [email protected] http://dret.net @dret

Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

Push-Enabling RESTful Business Processes

Cesare Pautasso Faculty of Informatics, University of Lugano, Switzerland [email protected] http://www.pautasso.info @pautasso 6.12.2011

Erik Wilde EMC [email protected] http://dret.net @dret

Page 2: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

RESTful Business Processes

Cesare Pautasso Faculty of Informatics, University of Lugano, Switzerland [email protected] http://www.pautasso.info @pautasso 6.12.2011

Erik Wilde EMC [email protected] http://dret.net @dret

Page 3: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 4

BPM REST

Page 4: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 5

Business Process Management

RESTful Web Services

Page 5: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 6

RESTful APIs…

Page 6: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 7

RESTful APIs…

Page 7: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2009-2010 - Cesare Pautasso - 30.6.2010 8

WS-* Standards Stack

Page 8: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2009-2010 - Cesare Pautasso - 30.6.2010 9

WS-* Standards Stack

Interoperability

Metadata

Reliability

Security

Transactions

State

Messaging

Management BPM

Page 9: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 10

Interoperability

Metadata

Reliability

Security

Transactions

State

Messaging

Management BPM

Can you do it with REST?

Page 10: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 11

We believe there is huge potential to marrying REST with workflow and BPM.

[…] Combined with the architecture of the Web,

a workflow service can provide both a truly simple, portable, and flexible way to build workflow driven integrations and applications.

From REST-*

http

://w

ww.

jbos

s.or

g/re

stst

ar/s

peci

ficat

ions

/wor

kflo

w.ht

ml “

Page 11: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 12

Web Services expose their data and functionality trough resources identified by URI

Uniform Interface constraint: Clients interact with resources through a fix set of verbs. Example HTTP: GET (read), POST (create), PUT (update), DELETE

Multiple representations for the same resource Hyperlinks model resource relationships and valid

state transitions for dynamic protocol description and discovery

REST in one slide

R PUT

DELETE

GET

POST

Page 12: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 13

We believe there is huge potential to marrying REST with workflow and BPM. The HATEOAS (hypermedia and linking)

principal of REST is logically a dynamic state machine and fits very well with how workflow and BPM systems are designed. Combined with the architecture of the Web,

a workflow service can provide both a truly simple, portable, and flexible way to build workflow driven integrations and applications.

From REST-*

http

://w

ww.

jbos

s.or

g/re

stst

ar/s

peci

ficat

ions

/wor

kflo

w.ht

ml “

Page 13: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 14

RESTful Workflow Management Engine

Act 1

Act 2

Act 3

Act 7

Act 6

Act 5

Act 4

Web Services

Process Model

Applications

Adapters

Workflow Users/Clients

Workflow Participants

Business Process Management

Databases

Bus R PUT

DELETE

GET

POST

Page 14: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 15

RESTful Workflow Management Engine

Act 1

Act 2

Act 3

Act 7

Act 6

Act 5

Act 4

Process Model

BPM with REST

R

R

RESTful Service Composition R R

Publishing Processes as Resources

Page 15: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 16

RESTful Workflow Management Engine

BPEL for REST BPMN for REST

BPM with REST

R

R

RESTful Service Composition R R

Publishing Processes as Resources

Page 16: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 17

RESTful Workflow Management Engine

We are here

BPM with REST

R

R

RESTful Service Composition R R

Publishing Processes as Resources

Page 17: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 18

BPM REST Resources/URIs Uniform

Interface Representations Hypermedia

Processes Tasks Control Flow Data Flow …

Page 18: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 19

Everything is a resource

Process Process Instance

Task Task Instance

/process/X

/task/Y /task/Y/1

/process/X/1

Page 19: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 20

Hypermedia

Process Process Instance

Task Task Instance

/process

/process/name

/process/name/instance

Follow links to discover the processes deployed as resources

/process/name/instance/taskname

GET

GET

GET

Page 20: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 21

Representations

/process/name GET

ContentType:

text/html ContentType:

application/bpmn+xml

ContentType:

text/plain ContentType:

application/json ContentType:

image/svg+xml

Web page with form to start a new process instance

Basic textual description of the process

Process metadata in JSON

BPMN2.0 process source code

Page 21: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 22

Uniform Interface and Hypermedia

/process

/process/name

GET

GET

GET

/process/name POST

/process/name/instance

DELETE /process/name/instance

List the deployed processes

Get a form describing how to start the process

Start a new process instance Check what

is the state of the instance

Clean up (once it is done)

Page 22: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 23

Starting or Running processes?

POST /process

Should the client be kept waiting for the process to run until completion?

Clients may want to block until the whole process has completed its execution (or it decides to reply to them)

/process

200 OK (Process Finished

Reply)

Page 23: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 24

Starting or Running processes?

POST /process

GET /process/x

The client starting a long running process is redirected to a location x representing the newly started process instance

The process and the client run asynchronously

The client may retrieve the current state of the process instance at any time

/process

202 Accepted Location: x

200 OK

Page 24: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 25

Push vs. Pull Notification /process

PULL PUSH GET /process/x

200 OK

Problem: how can the process instance tell the client that it has reached a certain state?

Easy to use a PULL-based event notification with HTTP

Can we also support PUSH-based event notification with HTTP?

Page 25: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

Push-Enabling RESTful Business Processes

Cesare Pautasso Faculty of Informatics, University of Lugano, Switzerland [email protected] http://www.pautasso.info @pautasso 6.12.2011

Erik Wilde EMC [email protected] http://dret.net @dret

Page 26: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 27

What is your SOA connector?

RPC BUS

REST/HTTP

Page 27: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 28

REST as a new connector

RPC BUS

REST/HTTP

Call

Publish/Subscribe

Get/Put/Post/Delete

Page 28: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 29

What about event notifications?

RPC BUS

REST/HTTP

Callback

Publish/Subscribe

Get/Put/Post/Delete ?

Page 29: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 30

Solutions

1.Web Feeds (PubSubHubbub) 2.HTTP Long Polling 3.Inverted REST (HTTP Callbacks) 4.WebSockets 5.(XMPP)

Page 30: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

31

Representations

/process/name GET

ContentType:

application/atom+xml

Web feed representing the collection of process instances with links to each instance

Page 31: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

32

Representations

/process/name/instance GET

ContentType:

application/atom+xml

Web feed representing the current state of the process instance (collection of task instances)

Page 32: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 33

Loan Approval Example

Task Published as a Resource

Process Published as a Resource

External Resources

Page 33: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 34

Process as a Web Feed <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>Loan Approval Process</title> <subtitle>Instance x</subtitle> <link href="http://rest.jopera.org/loan/x" rel="self" /> <link href="http://rest.jopera.org/loan" rel="template" /> <link href="http://pubsubhubbub.appspot.com/" rel="hub" /> <id>http://rest.jopera.org/loan/x</id> <updated>2011-06-10T11:11:30Z</updated> <author><name>Cesare Pautasso</name><email>[email protected]</email></author> <entry> <title>Choose Task (Ready)</title> <link href="http://rest.jopera.org/loan/x/choose" /> <id>http://rest.jopera.org/loan/x/choose</id> <updated>2011-06-10T11:12:20Z</updated> <summary>State: ready</summary> </entry> <entry> <title>Approve Task (Waiting)</title> <link href="http://rest.jopera.org/loan/x/approve" /> <id>http://rest.jopera.org/loan/x/approve</id> <updated>2011-06-10T11:11:30Z</updated> <summary>State: waiting</summary> </entry> </feed>

Page 34: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 35

Feed Feed Feed Entry Feed Author Summary Updated Link

Process Instance Task Process User Task State Task Timestamp Task Instance URI

BPM

Page 35: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 36

Link Relations <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>Loan Approval Process</title> <subtitle>Instance x</subtitle> <link href="http://rest.jopera.org/loan/x" rel="self"/> <link href="http://rest.jopera.org/loan" rel="template”/> <link href="http://pubsubhubbub.appspot.com/" rel="hub“/> <id>http://rest.jopera.org/loan/x</id> </feed>

Process Process Instance

Template Self

Page 36: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 37

PubSubHubbub

Feed Consumer

Feed Producer

Hub

Feed

Hub

Subscribe

Ping

Get

Notify/Poll

Page 37: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 38

Architecture

http://www.jopera.org/

Page 38: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

Conclusion Thanks to hypermedia, URIs and the HTTP

uniform interface, REST resources are a very good abstraction to publish executable business processes on the Web RESTful HTTP is good enough to interact without

any extension with process execution engines to drive the execution of process and task instances and to deliver notifications The state of a process instance can be projected

to be represented as a standard Web feed The PubSubHubbub protocol can be used as an

optimization to scale the corresponding delivery of notication callbacks

©2011 - Cesare Pautasso 39

Page 39: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2009-2010 - Cesare Pautasso, Erik Wilde 40

References Roy Fielding, Architectural Styles and the Design of Network-based

Software Architectures, PhD Thesis, University of California, Irvine, 2000

Leonard Richardson, Sam Ruby, RESTful Web Services, O’Reilly, May 2007

Jim Webber, Savas Parastatidis, Ian Robinson, REST in Practice: Hypermedia and Systems Architecture, O‘Reilly, 2010

Subbu Allamaraju, RESTful Web Services Cookbook: Solutions for Improving Scalability and Simplicity, O’Reilly, 2010

Stevan Tilkov, HTTP und REST, dpunkt Verlag, 2009, http://rest-http.info/

Thomas Erl, Raj Balasubramanians, Cesare Pautasso, Benjamin Carlyle, SOA with REST, Prentice Hall, end of 2010

Martin Fowler, Richardson Maturity Model: steps toward the glory of REST,

http://martinfowler.com/articles/richardsonMaturityModel.html

Page 40: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2009-2010 - Cesare Pautasso, Erik Wilde 41

Self-References Cesare Pautasso, Olaf Zimmermann, Frank Leymann,

RESTful Web Services vs. Big Web Services: Making the Right Architectural Decision, Proc. of the 17th International World Wide Web Conference (WWW2008), Bejing, China, April 2008.

Cesare Pautasso and Erik Wilde. Why is the Web Loosely Coupled? A Multi-Faceted Metric for Service Design, Proc of the 18th International World Wide Web Conference (WWW2009), Madrid, Spain, April 2009.

Cesare Pautasso, BPEL for REST, Proc. of the 6th International Conference on Business Process Management (BPM 2008), Milan, Italy, September 2008.

Cesare Pautasso, BPMN for REST, Proc. of the 3rd BPMN Workshop (BPMN 2011), Luzern, Switzerland, November 2011

Cesare Pautasso, RESTful Web Service Composition with JOpera, Proc. Of the International Conference on Software Composition (SC 2009), Zurich, Switzerland, July 2009.

Cesare Pautasso, Gustavo Alonso: From Web Service Composition to Megaprogramming In: Proceedings of the 5th VLDB Workshop on Technologies for E-Services (TES-04), Toronto, Canada, August 2004.

Page 41: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2011 - Cesare Pautasso 42

Raj Balasubramanians, Benjamin Carlyle, Thomas Erl, Cesare Pautasso, SOA with REST, Prentice Hall, 2012

Page 42: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 43

10th International Conference on Business Process Management

(BPM 2012)

September 3-6 2012, Tallinn, Estonia http://bpm2012.ut.ee

Page 43: Push-Enabling RESTful Business Processes · 2011-12-06 · Push vs. Pull Notification /process . PULL . GET /process/x . PUSH 200 OK Problem: how can the process instance tell the

©2010 - Cesare Pautasso 44

16-20 April 2012, Lyon, France http://ws-rest.org/2012