Transcript

REST EASY

WITH

DJANGO-REST-

FRAMEWORK

MARCEL CHASTAIN (@MARCELCHASTAIN)

LA DJANGO - 2014-10-28

WHAT WE’LL COVER

• What’s REST? Why/when would we use it?

• REST challenges

• Django solutions

• Installing DRF

• DRF Core Components (and Django counterparts)

• Building our Demo API

• Customizing

• Resources

ABOUT

REST

DJANGO-REST-FRAMEWORK

…BUT I’M NOT TIRED

BUT I’M NOT TIRED

REST stands for Representational State Transfer

All 4 CRUD operations

Uses HTTP requests to:

• Post data(Create, Update)

• Read data

• Delete

WHY REST?

Better than SOAP

XML is the stuff of nightmares

Uses JSON for data structures

Popular – most modern 3rd party web APIs use RESTful

endpoints

COMMON USE-CASES

Single-Page Applications

Real-Time Services

SaaS APIs

Creating external APIs for existing sites

Mobile Apps

WebComponents, Polymer, modular site design

Modern JS Site Frameworks (Angular, Ember, Backbone, etc)

SOUNDS SIMPLE

ENOUGH!

ALL TOGETHER NOW:

ALL TOGETHER NOW:

We should

roll our own!

… OK JUST BE SURE

TO INCLUDE

• serialization/deserialization

… OK JUST BE SURE

TO INCLUDE

• serialization/deserialization

• parsing

… OK JUST BE SURE

TO INCLUDE

• serialization/deserialization

• parsing

• model introspection

… OK JUST BE SURE

TO INCLUDE

• serialization/deserialization

• parsing

• model introspection

• relationship traversal

• pluggable authentication

• permissions

• url structure

• proper HTTP methods

• pagination

• forms

• error handling

• request filters

• consistency

• maybe some generic views

• request throttling

• …and tests!

ALL TOGETHER NOW:

EXACTLY, WONDER WOMAN.

PROPER SOLUTIONS

django-rest-framework

• 900+ forks

• 304 contributors

• 3k stars

• The greatest documentation

I’ve seen in a library

django-tastypie

• 900+ forks

• 112 contributors

• 2.6k stars

• Delicious-sounding name

…YOU’VE GOT

OPTIONS

THE SETUP

DJANGO-REST-FRAMEWORK

INSTALLATION

pip install djangorestframework

pip install markdown # optional

pip install django-filter # optional

INSTALLATION (2)

Add to INSTALLED_APPS

# settings.py

INSTALLED_APPS = (

...

‘rest_framework’,

)

INSTALLATION (3)

Include the login/logout views

# urls.py

MODELS

MODELS

MODELS

DJANGO MODELS

THE CORE

COMPONENTS

DJANGO-REST-FRAMEWORK

IN TRADITIONAL

DJANGO:

1. Models/Querysets

2. Class-Based Views/Mixins

3. Generic Views

4. URLs

5. HTTP Requests

6. Rendered Responses

IN DRF:

1. Serializers

2. APIViews/Mixins

3. ViewSets

4. Routers

5. HTTP Requests

6. HTTP Responses

1. SERIALIZERS

“Serializers allow complex data to be

converted to native Python datatypes that

can then be easily rendered in JSON, XML

or other content types”

1.1 SERIALIZERS

Declarative syntax, similar to Forms/ModelForms

Automatically handle single Model instances or Querysets

1.2 SERIALIZERS

# using it

>>> note = Note.objects.first()

>>> serializer = NoteSerializer(note)

>>> serializer.data

{u'id': 1,

'body': u'First, do no harm.',

'pub_date': datetime.datetime(2014, 10, 28, 11, 23, 30, tzinfo=<UTC>),

'title': u'Hippocratic Oath',

'user': {

'id': 1,

'username': u'demo',

'email': u'demo@demo.com'

}

}

2. APIVIEWS

Subclass of Django’s View class

Simple - has .get() .post(), etc methods

Some Differences:

• Requests not normal HTTPRequest (more later)

• Responses are not normal HTTPResponse (more later)

• Auth, permissions, throttling done in advance

2.1 APIVIEWS

3. VIEWSETS

Similar to Django’s Generic Views.

“A type of Class-Based View that provides actions like

.list() and .create() instead of .get() and .post()”

Combine the logic for a set of related views into one class,

for all the actions you’ll need to take.

3.1 VIEWSETS

3.2 MODELVIEWSETS

4. URL ROUTERS

Automatic URL routing

Simple, quick, consistent way of wiring your view logic to a

set of URLs

4. URL ROUTERS

Automatic URL routing

Simple, quick, consistent way of wiring your view logic to a

set of URLs

5. REQUESTS

• In an APIView or ViewSet, ‘request’ is a DRF Request.

• Incoming JSON data in request is processed just like

Form data

• Makes request data available as

• request.DATA (vs .POST)

• request.FILES

• request.QUERY_PARAMS (vs .GET)

6. RESPONSES

Uses content-negotiation to render final content

(Hence why built-in API Console shows rich interface to us

but would deliver plain JSON to an AJAX request)

IN TRADITIONAL

DJANGO:

1. Models/Querysets

2. Class-Based Views/Mixins

3. Generic Views

4. URLs

5. HTTPRequest

6. HTTPResponse

IN DRF:

1. Serializers

2. APIViews/Mixins

3. ViewSets

4. URL Routers

5. DRF ‘Request’

6. DRF ‘Response’

REVIEW:

THE DEMO

DJANGO-REST-FRAMEWORK

INSTALLATION (REPO)

git clone https://github.com/marcelchastain/drf-demo.git

API RUNNING!

CUSTOMIZING

DJANGO-REST-FRAMEWORK

CUSTOMIZING VIEWS

• queryset

• serializer_class

• filter_class

• authentication_classes (rest_framework.authentication)

• permission_classes (rest_framework.permissions)

• parser_classes (rest_framework.parsers)

• renderer_classes (rest_framework.renderers)

• throttle_classes (rest_framework.throttling)

• paginate_by, max_paginate_by

(Defaults for most can be set in settings.py)

RESOURCES

DJANGO-REST-FRAMEWORK

RESOURCES

Docs: http://www.django-rest-framework.org

Tutorial: http://www.django-rest-framework.org/#tutorial

IRC: #restframework on irc.freenode.net

StackOverflow: ‘django-rest-framework’ tag

Author: Tom Christie (@_tomchristie)

Commercial Support: “DAB Apps” http://dabapps.com

REST EASY

WITH

DJANGO-REST-

FRAMEWORK

MARCEL CHASTAIN (@MARCELCHASTAIN)

LA DJANGO - 2014-10-28

top related