Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

39
Apigee @apigee Santanu Dey @Santanu_Dey Essential API Facade Patterns Episode 3 – One Phase to Two Phase Conversion

Transcript of Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Page 1: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Apigee@apigee

Santanu Dey@Santanu_Dey

Essential API Facade Patterns

Episode 3 – One Phase to Two Phase Conversion

Page 2: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

groups.google.com/group/api-craft

Page 3: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

slideshare.net/apigee

Page 4: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

youtube.com/apigee

Page 5: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

@Santanu_DeySantanu Dey

Page 6: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Episode 1Composition

Episode 2Session Management

Episode 3One Phase to Two Phase Conversion

Episode 4Synchronous to Asynchronous

Webcast Series: API Facade Patterns

Page 7: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Problem

Solution

Benefits

Considerations

Episode 3 : One-Phase to Two-Phase Conversion

Page 8: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

How to expose a single phase API out of a two phase API

To enable API teams and app developers to implement and improve their API designs and apps

Problem

Page 9: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

From the point of view of the API provider, how to expose a single phase API out of a two phase API

Problem

One Phase Consumer

Two Phase Provider

1

2

Page 10: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

What is a Two Phase Interface?

Page 11: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

First Phase – Prepare (or Vote)

Tx CoordinatorParticipating Resource 2

Participating Resource 3

Participating Resource 1prepare

prepare

prepare

Page 12: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Second Phase - Commit

Tx CoordinatorParticipating Resource 2

Participating Resource 3

Participating Resource 1

commit

commit

commit

Page 13: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Two phase commit works well for server-side distributed architecture

Page 14: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Not such a good idea for an app to consume a two-phase API

AppService

Provider

commit

prepare

Page 15: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Transaction reliability is seldom a requirement for a JavaScript plugin or an app

Page 16: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Making the app a transaction coordinator is asking the developer to do too much

- to think about roll back, compensation etc.

-device runtime not well suited for heavy programming logic

Page 17: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Problems with Service Composition on Device

“chatty service” anti-pattern – multiple callouts from client app to multi services

Client

API Provider

1. Get user attributes

2. Get recommended topics

3. Get recommended books

Network connection, negotiate security, data format & parsing

Page 18: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Problems with Service Composition on Device

Client

API Provider

1. Get user attributes

2. Get recommended topics

3. Get recommended books

Network connection, negotiate security, data format & parsing

Heavy data usageToo many network calls

Battery drainPerformance

Page 19: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Solution

Page 20: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

The solution is to introduce an API Façade in the middle which can handle the conversion

One Phase to Two Phase Conversion using API Façade

One Phase Consumer

Two Phase Provider

1

2

Page 21: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

One Phase to Two Phase Conversion using API Façade

One Phase Consumer

Two Phase Provider

1

2

/reserve/payment

Page 22: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

One Phase to Two Phase Conversion using API Façade

One Phase Consumer

Two Phase Provider

1

2

/payment

Page 23: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Warning! UML Ahead

Page 24: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)
Page 25: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

If I am missing something, please let me know, but for now I consider ”REST transaction" to be an oxymoron.

- Roy Fielding

Page 26: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Example of the API Façade

Backend Server

API Façade

Existing Capabilities

API Exposure &

Mgmt.

App relies on REST

Page 27: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Benefits

Page 28: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Re-use existing enterprise backend

Page 29: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

The client app avoids complexities like managing transactions = Lovable API

Page 30: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

One Phase Consumer

Two Phase Provider

1

2

Two Phase Provider

1

2

Distributed Transaction Management

Page 31: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Resource states do not need to be maintained

Page 32: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Other Considerations

Page 33: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

What is the trade-off?

Ability to coordinate distributed transaction from the client

Page 34: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Is it Possible to Expose Two-Phase API in REST?

Page 35: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

POST /transfer/transaction{”from":”account1”, ”to”:”account2”, "amount":100}

Response:{"id":"/transfer/transaction/123", "state":”started", blah blah}

PUT /transfer/transaction/123{"id":"/transfer/transaction/123", "state":"committed", ...}

Response:{"id":"/transfer/transaction/123", "state":”comitted", blah blah}

Here is an Example

Page 36: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

Questions?

Page 37: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

THANK YOUSubscribe to API webcasts at:

youtube.com/apigee

Apigee@apigee

Page 38: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

THANK YOUQuestions and ideas to:

groups.google.com/group/api-craft

Apigee@apigee

Page 39: Essential API Facade Patterns: One Phase to Two Phase Conversion (Episode 3)

THANK YOUContact me at:

@[email protected]

Apigee@apigee