Slide 1

Slide 1 text

REST framework: Under the Hood. Saturday, 15 November 14

Slide 2

Slide 2 text

Serialization. Saturday, 15 November 14

Slide 3

Slide 3 text

↕ ↑ ↓ Serialization Rendering Parsing Saturday, 15 November 14

Slide 4

Slide 4 text

Saturday, 15 November 14

Slide 5

Slide 5 text

Saturday, 15 November 14

Slide 6

Slide 6 text

Saturday, 15 November 14

Slide 7

Slide 7 text

Saturday, 15 November 14

Slide 8

Slide 8 text

Problem: Related data. Saturday, 15 November 14

Slide 9

Slide 9 text

Saturday, 15 November 14

Slide 10

Slide 10 text

Saturday, 15 November 14

Slide 11

Slide 11 text

Saturday, 15 November 14

Slide 12

Slide 12 text

Problem: Encapsulation. Saturday, 15 November 14

Slide 13

Slide 13 text

“Fat models, thin views.” ↓ “Never write to a model field or call .save() directly. Always use model methods and manager methods for state changing operations.” Saturday, 15 November 14

Slide 14

Slide 14 text

Saturday, 15 November 14

Slide 15

Slide 15 text

Saturday, 15 November 14

Slide 16

Slide 16 text

Problem: Hidden validation behavior. Saturday, 15 November 14

Slide 17

Slide 17 text

Saturday, 15 November 14

Slide 18

Slide 18 text

Saturday, 15 November 14

Slide 19

Slide 19 text

Saturday, 15 November 14

Slide 20

Slide 20 text

We want explicit validation behavior, but we’d still like the ModelSerializer shortcut. Saturday, 15 November 14

Slide 21

Slide 21 text

Saturday, 15 November 14

Slide 22

Slide 22 text

Saturday, 15 November 14

Slide 23

Slide 23 text

We can use the ModelSerializer shortcut, but our validation behavior is made visible & explicit. • unique_together • field validation Saturday, 15 November 14

Slide 24

Slide 24 text

Consequences of dropping ‘Model.full_clean()’ • All field validation handled. • All uniqueness validation handled. • `Model.clean()` → `Serializer.validate()` Saturday, 15 November 14

Slide 25

Slide 25 text

BaseSerializer. Saturday, 15 November 14

Slide 26

Slide 26 text

Saturday, 15 November 14

Slide 27

Slide 27 text

Saturday, 15 November 14

Slide 28

Slide 28 text

Saturday, 15 November 14

Slide 29

Slide 29 text

Rendering. Saturday, 15 November 14

Slide 30

Slide 30 text

Saturday, 15 November 14

Slide 31

Slide 31 text

Saturday, 15 November 14

Slide 32

Slide 32 text

Accessing field information... Saturday, 15 November 14

Slide 33

Slide 33 text

Saturday, 15 November 14

Slide 34

Slide 34 text

Saturday, 15 November 14

Slide 35

Slide 35 text

Saturday, 15 November 14

Slide 36

Slide 36 text

Simulating nested and list structures in HTML... Saturday, 15 November 14

Slide 37

Slide 37 text

Saturday, 15 November 14

Slide 38

Slide 38 text

Avoid coupling fields to HTML too tightly... Saturday, 15 November 14

Slide 39

Slide 39 text

Saturday, 15 November 14

Slide 40

Slide 40 text

Saturday, 15 November 14

Slide 41

Slide 41 text

Once we’ve got all that it’s easy enough to write a renderer class that uses templated HTML generation... Saturday, 15 November 14

Slide 42

Slide 42 text

Saturday, 15 November 14

Slide 43

Slide 43 text

Saturday, 15 November 14

Slide 44

Slide 44 text

The REST framework 3.0 big picture. • Easier to override save behavior. • More explicit validation. • Better model encapsulation. • Less complex internal implementation. • Supports both Form and API output. • Template based form rendering. • Nested forms and lists of forms. • API compatibility with CBVs. • BaseSerializer for custom cases. Saturday, 15 November 14

Slide 45

Slide 45 text

Web APIs: The Next Level. Saturday, 15 November 14

Slide 46

Slide 46 text

Hypermedia formats • HAL, JSON-LD, SIREN, UBER. • Not yet compelling. Saturday, 15 November 14

Slide 47

Slide 47 text

RSS • Machine readable hypermedia format. • Big win due to shared tooling. • Domain specific. Saturday, 15 November 14

Slide 48

Slide 48 text

HTML • Closest we’ve come to a universal platform. • Document centric, not data centric. • Not intended for programmatic interaction. Saturday, 15 November 14

Slide 49

Slide 49 text

Layering in Web Applications. Saturday, 15 November 14

Slide 50

Slide 50 text

Saturday, 15 November 14

Slide 51

Slide 51 text

Saturday, 15 November 14

Slide 52

Slide 52 text

Saturday, 15 November 14

Slide 53

Slide 53 text

Saturday, 15 November 14

Slide 54

Slide 54 text

Document Object Model Data Object Model • An abstract object interface. • Agnostic to UI environment. • Programmable. • Implied UI model. • Browser environment only. • Not programmable. ~ Saturday, 15 November 14

Slide 55

Slide 55 text

Saturday, 15 November 14

Slide 56

Slide 56 text

Saturday, 15 November 14

Slide 57

Slide 57 text

Saturday, 15 November 14

Slide 58

Slide 58 text

Generic client libraries. Saturday, 15 November 14

Slide 59

Slide 59 text

Saturday, 15 November 14

Slide 60

Slide 60 text

Saturday, 15 November 14

Slide 61

Slide 61 text

Saturday, 15 November 14

Slide 62

Slide 62 text

Saturday, 15 November 14

Slide 63

Slide 63 text

Saturday, 15 November 14

Slide 64

Slide 64 text

Application interfaces. Saturday, 15 November 14

Slide 65

Slide 65 text

Saturday, 15 November 14

Slide 66

Slide 66 text

• Generic client libraries. • In-browser tools. • Functional testing of our applications. • UI binding libraries. • Transparently upgrade encoding or transport layers. The big wins. Saturday, 15 November 14

Slide 67

Slide 67 text

It’s time to start addressing the fundamental issues of system communication. ~ How do we design abstract object interfaces, and describe the actions and transforms they expose. Saturday, 15 November 14

Slide 68

Slide 68 text

Thank you. @_tomchristie Saturday, 15 November 14