Slide 1

Slide 1 text

BENJAMIN ENCZ @BENJAMINENCZ 1 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 2

Slide 2 text

BEYOND REST BUILDING HYBRID APIS THAT WORK FOR WEB AND MOBILE 2 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 3

Slide 3 text

3 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 4

Slide 4 text

! HISTORY TIME! 4 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 5

Slide 5 text

2000 5 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 6

Slide 6 text

REPRESENTATIONAL STATE TRANSFER "ARCHITECTURAL STYLES AND THE DESIGN OF NETWORK-BASED SOFTWARE ARCHITECTURES" ROY FIELDING, 2000 6 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 7

Slide 7 text

▸ Client-Server (Architecture) ▸ Stateless (Scale) ▸ Uniform Interface (Discoverability!) 7 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 8

Slide 8 text

CORE TENETS OF "UNIFORM INTERFACE" CONSTRAINT "identification of resources; manipulation of resources through representations; self-descriptive messages; and, hypermedia as the engine of application state" EXTREMELY USEFUL FOR PUBLIC APIS! 8 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 9

Slide 9 text

"The trade-off, though, is that a uniform interface degrades efficiency [...] optimizing for the common case of the Web, but resulting in an interface that is not optimal for other forms of architectural interaction." 9 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 10

Slide 10 text

APIS AT PLANGRID 10 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 11

Slide 11 text

Developer Tools for Construction Focus on project execution, after spec has been written 11 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 12

Slide 12 text

1. Private Web API 2. Private Mobile API 3. Public API 4. (Inter-service APIs) 12 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 13

Slide 13 text

WEB APIS 13 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 14

Slide 14 text

14 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 15

Slide 15 text

/SHEETS /ANNOTATIONS /USERS /STAMP_DEFAULTS 15 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 16

Slide 16 text

16 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 17

Slide 17 text

Web APIs should provide data in a shape that is required by a view 17 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 18

Slide 18 text

/SHEET-VIEWER/FOR-SHEET/{UID} ! 18 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 19

Slide 19 text

19

Slide 20

Slide 20 text

20 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 21

Slide 21 text

21

Slide 22

Slide 22 text

▸ Single API request to gather data ▸ Frontend can evolve without requiring new endpoints ▸ Good API evolvability without versioning 22 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 23

Slide 23 text

MOBILE APIS FOR APPS WITH OFFLINE CAPABILITIES 23 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 24

Slide 24 text

DATA REPLICATION! 24 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 25

Slide 25 text

25 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 26

Slide 26 text

26 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 27

Slide 27 text

27 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 28

Slide 28 text

/ANNOTATIONS/SYNC 28 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 29

Slide 29 text

▸ Sync endpoints implement bespoke database replication protocol (for reads only) ▸ Currently tied to one resource (based on REST) but might change in future 29 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 30

Slide 30 text

DATA MUTATION IN REST APIS 30 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 31

Slide 31 text

Applications: state + operations 31 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 32

Slide 32 text

"User A assigned Issue X to User B" 32 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 33

Slide 33 text

{ issue_uid: X assignees: [] } Diff two JSON objects, reverse engineer changes out of them { issue_uid: X assignees: [{user_uid: B}] } 33 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 34

Slide 34 text

For writes, offline capable clients already "think" in terms of operations, not state transfers 34 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 35

Slide 35 text

REST & operations: another impedance mismatch 35 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 36

Slide 36 text

PUBLIC PLANGRID API 36 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 37

Slide 37 text

REST IS DEAD LONG LIVE REST 37 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 38

Slide 38 text

PLANGRID APIS IN FUTURE 38 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 39

Slide 39 text

Impedance mismatches between: - REST and typical web application read pattern - REST and data replication - REST and operations 39 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 40

Slide 40 text

Using a REST-like API internally today, but moving away from a few core tenets as we see other more suitable approaches 40 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 41

Slide 41 text

Don't Reinvent The Wheel, Unless You Plan on Learning More About Wheels — codinghorror.com 41 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 42

Slide 42 text

Right tool for job > following industry standards Supported by good docs, tooling and onboarding 42 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 43

Slide 43 text

THANK YOU! Slides https://speakerdeck.com/benjamin_encz/ We have jobs: https://www.plangrid.com/careers/ @BENJAMINENCZ 43 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 44

Slide 44 text

RESOURCES - 1/2 GraphQL schema stitching blog post: https://dev-blog.apollodata.com/graphql-schema- stitching-8af23354ac37 Filtered replication in PouchDB: https://pouchdb.com/2015/04/05/filtered-replication.html 44 — Beyond REST | @benjaminencz | PlanGrid, March 2018

Slide 45

Slide 45 text

RESOURCES - 2/2 Coding Horror on reinventing wheels: https://blog.codinghorror.com/dont-reinvent-the-wheel-unless-you- plan-on-learning-more-about-wheels/ 45 — Beyond REST | @benjaminencz | PlanGrid, March 2018