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