Slide 1

Slide 1 text

REST LESS APP MOBILE FIRST BACKEND

Slide 2

Slide 2 text

REST?

Slide 3

Slide 3 text

TEXT SHORT HISTORY OF REST ▸ 1996 - developing the pattern ▸ 2000 - formalizing the pattern ▸ 2010 - spreading around the world. http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

Slide 4

Slide 4 text

TEXT REST REQUIREMENTS ▸ Client - Server ▸ No client state ▸ No client session on a client ▸ Caching (CDN and HTTP powered) ▸ Resource by URL / URI http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

Slide 5

Slide 5 text

TEXT REST PROBLEMS ▸ Versioning ▸ Discoverability ▸ Dynamic API ▸ Assumption Driven Development

Slide 6

Slide 6 text

SERVER FIRST

Slide 7

Slide 7 text

MOBILE FIRST?

Slide 8

Slide 8 text

TEXT MOBILE NEEDS ▸ Multiple Environments ▸ Versioning (multiple versions in store) ▸ Minimum logic on client side ▸ Sessions ▸ Feature toggles ▸ API Spec

Slide 9

Slide 9 text

TEXT MICROSERVICES ▸ Multiple Instances ▸ More like distributed objects ▸ Composition enabled ▸ Feature oriented

Slide 10

Slide 10 text

TEXT MICROSERVICES ▸ Multiple Instances ▸ More like distributed objects ▸ Composition enabled ▸ Feature oriented

Slide 11

Slide 11 text

TEXT CONFIG SERVICE REQUEST "context": { "version": "1.0", "locale": "en_US", "bundle": "com.my.food-delivery", "device": "iPhone", "screen": { "width": 320, "height": 480 }, "uuid": "ABCD-1234-1242-1564", ... }

Slide 12

Slide 12 text

TEXT CONFIG SERVICE RESPONSE "config": { "menu": { "search": { "url": "https://m.com/menu/v1/search", "context": { "session": "ABCD-1234-1242-1564", "currency": "USD" } }, "popular": [ ... ], ... }, ... }

Slide 13

Slide 13 text

TEXT CONFIG SERVICE RESPONSE "error": { "kind": "temporal", "message": "We are updating our service, please wait up to 2 AM of tommorow." }

Slide 14

Slide 14 text

TEXT CONFIG SERVICE RESPONSE "error": { "kind": "permanent", "message": "Please download new version from App Store", "action": "app store page" }

Slide 15

Slide 15 text

TEXT SEARCH SERVICE REQUEST "search": { "term": "sushi", "context": { ... } }

Slide 16

Slide 16 text

TEXT SEARCH SERVICE RESPONSE "items": [ { "title": "Roll", "price": "18 USD", "markAsFavorite": { "url": "http://food.com/markAsFavorite", "context": { "id": 1990, "user": "ABCD-1234-1242-1564" } }, } ]

Slide 17

Slide 17 text

CODE IS DATA

Slide 18

Slide 18 text

TEXT NEXT STEPS ▸ Tell server about needed data ▸ GraphQL ▸ Remote code injection

Slide 19

Slide 19 text

TEXT CONFIG SERVICE REQUEST "context": { ... "menu": { "search": { "url": { "type": "$url" }, "json": { "type": "$object", "variables": ["$term"] } } } }

Slide 20

Slide 20 text

TEXT CONFIG SERVICE RESPONSE "config": { "menu": { "search": { "url": "https://food-delivery.com/menu/v1/search", "json": { "term": "$term", "session": "ABCD-1234-1242-1564", "currency": "USD" } } } }

Slide 21

Slide 21 text

GRAPH QL http://graphql.org

Slide 22

Slide 22 text

REACT NATIVE https://facebook.github.io/react-native/

Slide 23

Slide 23 text

SERVER APP LOGIC UI

Slide 24

Slide 24 text

SERVER APP LOGIC UI

Slide 25

Slide 25 text

WHY IT IS IMPORTANT?

Slide 26

Slide 26 text

PROJECTS ARE DEAD

Slide 27

Slide 27 text

TEXT PRODUCT TRAITS ▸ Dynamic set of functionality ▸ Data driven decisions ▸ Weekly updates

Slide 28

Slide 28 text

QUESTIONS? [email protected]