SlideShare a Scribd company logo
1 of 30
RESTful APIs con
   Tastypie
¿Quién?
●
    Santiago Basulto
●
    @santiagobasulto
●
    Athlete.com
●
    https://github.com/santiagobasulto
Temario
●
    APIs
●
    REST
●
    HTTP
●
    Ejemplo
API
●
    Consumidas por máquinas
●
    Fácil de usar y aprender (poca documentación)
●
    Difícil de “mal usar”
●
    Apuntada a la audiencia adecuada
●
    ¿Quién es tu usuario?
REST - ¿Qué?
●
    REpresentational State Transfer
●
    “Estilo de Arquitectura”
●
    Cliente – Servidor
●
    Sin Estado (Stateless)
●
    Cacheable
●
    Interfaz Uniforme
●
    Capas
REST - ¿Por Qué?
●
    Escalable
●
    Generalidad
●
    Independiente
●
    Latencia
●
    Seguridad
●
    Encapsulación
REST - ¿Cómo?
REST - ¿Cómo?




    ?
RESTful
●
    HTTP
●
    ROA
●
    HATEOAS → WTF?
HTTP
●
    Métodos (GET, POST, PUT, DELETE, PATCH)
●
    Status codes (200, 201, 202, 301, 400, 401,

404)
●
    Headers (Content-Type, Accept, Authorization)
●
    Idempotencia
●
    NO USAR COOKIES!
ROA
●
    Resource Oriented Architecture
●
    Orientado a recursos, no a acciones (SOA)
●
    Recursos identificados por URIs
●
    Recursos → Representaciones
●
    “Cool URIs don't change”
HATEOAS
●
    Hypermedia As The Engine Of Application State
●
    “Todo es un recurso identificable”
●
    “Tu usuario no conoce nada”
●
    http://roy.gbiv.com/untangled/2008/rest-apis-

must-be-hypertext-driven
●
    http://en.wikipedia.org/wiki/HATEOAS
Tastypie
●
    Aplicación de Django.
●
    Permite crear recursos basados en modelos
●
    Extensible y customizable
●
    Múltiples modos de serialización
●
    Buen uso de HTTP
●
    HATEOAS por defecto
●
    Tests y docs
Ejemplo
Tastypie - Instalación
$ pip install django-tastypie

# INSTALLED_APPS += ['tastypie']

$ manage.py syncdb
Tastypie - Setup
$ mkdir api
$ touch api/__init__.py
$ touch api/resources.py
Al código!



         Tag: step1_setup
Tastypie - Pruebas
- /api/v1/
- /api/v1/user/
- /api/v1/user/schema/
- /api/v1/user/1/
- /api/v1/user/1/?format=xml
Tastypie - Customizando
- password? is_staff? @55f6589
- Crear otro recurso (t: step2_otro_recurso)
- Fields, recursos relacionados
              (t: step3_recursos_relacionados)
Tastypie - POSTing
>>> import json
>>> import requests

>>> url = "http://127.0.0.1:8000/api/v1/tweet/"

>>> data = {'user': '/api/v1/user/1/', 'tweet': 'Hello
World!'}

>>> headers = {'content-type': 'application/json'}

>>> requests.post(url, data=json.dumps(data),
headers=headers)
Tastypie - 201
HTTP/1.0 201 CREATED
Date: Fri, 14 Sep 2012 13:32:24 GMT
Server: WSGIServer/0.1 Python/2.7
Content-Type: text/html; charset=utf-8
Location: http://127.0.0.1:8000/api/v1/tweet/2/
Tastypie - DELETE
$ curl --dump-header - -XDELETE 
> http://localhost:8000/api/v1/tweet/2/

HTTP/1.0 204 NO CONTENT
Date: Fri, 14 Sep 2012 13:53:33 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 0
Content-Type: text/html; charset=utf-8
Tastypie – PATCH
$ curl --dump-header - -H "Content-Type:
application/json" 
> -X PATCH --data '{"tweet": "PATCHed tweet"}' 
> http://127.0.0.1:8000/api/v1/tweet/3/

HTTP/1.0 202 ACCEPTED
Date: Fri, 14 Sep 2012 13:56:38 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Type: text/html; charset=utf-8
Tastypie – PUT
$ curl --dump-header - -H "Content-Type:
application/json" 
> -X PUT --data 
> '{"tweet": "PUT tweet", "user": "/api/v1/user/2/"}'
> http://127.0.0.1:8000/api/v1/tweet/3/

HTTP/1.0 204 NO CONTENT
Date: Fri, 14 Sep 2012 14:02:48 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 0
Content-Type: text/html; charset=utf-8
Tastypie - Filtros
class Meta:
   filtering = {
       'username': ALL,
       'date_joined': ['range', 'gt', 'gte', 'lt', 'lte'],
   }
                                       (t:
step6_basic_filtering)
●
    /api/v1/user/?username__startswith=a
●
    /api/v1/user/?username__exact=admin
●
    /api/v1/user/?username__iexact=Admin
●
 /api/v1/user/?date_joined__gte=2012-09-14
Tastypie - Datos complejos
●
    A veces los datos de los recursos no son

simples
●
    Dehydrate per-field (t: step6_basic_filtering)
●
    Dehydrate general(t: step8_general_dehydrate)
●
    Hydrate general (t: step9_general_hydrate)
●
    Hydrate Fields
●
    Validación de datos (t: step10_validation)
Tastypie - Autenticación
●
    Responde a la pregunta

       > ¿Quién sos?

class Meta:
   authentication = TwitterAuthentication()

class TwitterAuthentication(Authentication):

    def is_authenticated(self, request, **kwargs):
       return True
Tastypie - Autorización
●
    Responde a la pregunta

       > ¿Podés hacer eso?

class Meta:
   authorization = TwitterAuthorization()

class TwitterAuthorization(Authorization):

    def is_authorized(self, request, object=None):
       return True
Código usado
●
    https://github.com/santiagobasulto/tastypie-pyday-cba



(Está dividido por tags)
Recursos
●
    RFC 1626
●
    RFC 5789

http://www.ics.uci.edu/~fielding/pubs/dissertation/
●




top.htm
●
    RESTful Web Services – O'reilly(ROA)
●
    http://www.w3.org/Provider/Style/URI.html

http://roy.gbiv.com/untangled/2008/rest-apis-
●

More Related Content

Similar to RESTful APIs con Tastypie

APIs REST: Django y Go
APIs REST: Django y GoAPIs REST: Django y Go
APIs REST: Django y GoJM Robles
 
AwReporting tool introduction (Spanish)
AwReporting tool introduction (Spanish)AwReporting tool introduction (Spanish)
AwReporting tool introduction (Spanish)marcwan
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Airespeterpunk
 
Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCarlos Azaustre
 
Anatomía de implementación de un LCMS basado en moodle
Anatomía de implementación de un LCMS basado en moodleAnatomía de implementación de un LCMS basado en moodle
Anatomía de implementación de un LCMS basado en moodleJosé Luis Granda
 
Seguridad
SeguridadSeguridad
SeguridadVLASLOV
 
Coders cantabria - Junio (Offline First)
Coders cantabria - Junio (Offline First)Coders cantabria - Junio (Offline First)
Coders cantabria - Junio (Offline First)Rocío Muñoz
 
Servicios REST - PucelaTechDay
Servicios REST - PucelaTechDayServicios REST - PucelaTechDay
Servicios REST - PucelaTechDayAsier Marqués
 
Cómo crear un RESTful API con Go
Cómo crear un RESTful API con GoCómo crear un RESTful API con Go
Cómo crear un RESTful API con GoSoftware Guru
 
Google App Engine como backend de apps mobile
Google App Engine como backend de apps mobileGoogle App Engine como backend de apps mobile
Google App Engine como backend de apps mobileJM Robles
 
Web framework ligeros y micros en java barcamp 2014
Web framework ligeros y micros en java   barcamp 2014Web framework ligeros y micros en java   barcamp 2014
Web framework ligeros y micros en java barcamp 2014Carlos Camacho
 
Define y desarrolla tu primera api
Define y desarrolla tu primera apiDefine y desarrolla tu primera api
Define y desarrolla tu primera apiCloudAppi
 
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfPHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfRaaulroodriguez
 
Construcción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEARConstrucción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEARMarcos Martinez
 

Similar to RESTful APIs con Tastypie (20)

APIs REST: Django y Go
APIs REST: Django y GoAPIs REST: Django y Go
APIs REST: Django y Go
 
AwReporting tool introduction (Spanish)
AwReporting tool introduction (Spanish)AwReporting tool introduction (Spanish)
AwReporting tool introduction (Spanish)
 
Introducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLCIntroducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLC
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
 
Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de Platzi
 
Anatomía de implementación de un LCMS basado en moodle
Anatomía de implementación de un LCMS basado en moodleAnatomía de implementación de un LCMS basado en moodle
Anatomía de implementación de un LCMS basado en moodle
 
Seguridad
SeguridadSeguridad
Seguridad
 
Coders cantabria - Junio (Offline First)
Coders cantabria - Junio (Offline First)Coders cantabria - Junio (Offline First)
Coders cantabria - Junio (Offline First)
 
Servicios REST - PucelaTechDay
Servicios REST - PucelaTechDayServicios REST - PucelaTechDay
Servicios REST - PucelaTechDay
 
Cómo crear un RESTful API con Go
Cómo crear un RESTful API con GoCómo crear un RESTful API con Go
Cómo crear un RESTful API con Go
 
Google App Engine como backend de apps mobile
Google App Engine como backend de apps mobileGoogle App Engine como backend de apps mobile
Google App Engine como backend de apps mobile
 
Effective Network Layer: API lovers and Apps
Effective Network Layer: API lovers and AppsEffective Network Layer: API lovers and Apps
Effective Network Layer: API lovers and Apps
 
Web framework ligeros y micros en java barcamp 2014
Web framework ligeros y micros en java   barcamp 2014Web framework ligeros y micros en java   barcamp 2014
Web framework ligeros y micros en java barcamp 2014
 
Go 101: Primeros Pasos
Go 101: Primeros PasosGo 101: Primeros Pasos
Go 101: Primeros Pasos
 
Html5
Html5Html5
Html5
 
Django
DjangoDjango
Django
 
Define y desarrolla tu primera api
Define y desarrolla tu primera apiDefine y desarrolla tu primera api
Define y desarrolla tu primera api
 
RAML
RAMLRAML
RAML
 
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfPHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
 
Construcción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEARConstrucción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEAR
 

Recently uploaded

TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 

Recently uploaded (20)

TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 

RESTful APIs con Tastypie

  • 1. RESTful APIs con Tastypie
  • 2. ¿Quién? ● Santiago Basulto ● @santiagobasulto ● Athlete.com ● https://github.com/santiagobasulto
  • 3. Temario ● APIs ● REST ● HTTP ● Ejemplo
  • 4. API ● Consumidas por máquinas ● Fácil de usar y aprender (poca documentación) ● Difícil de “mal usar” ● Apuntada a la audiencia adecuada ● ¿Quién es tu usuario?
  • 5. REST - ¿Qué? ● REpresentational State Transfer ● “Estilo de Arquitectura” ● Cliente – Servidor ● Sin Estado (Stateless) ● Cacheable ● Interfaz Uniforme ● Capas
  • 6. REST - ¿Por Qué? ● Escalable ● Generalidad ● Independiente ● Latencia ● Seguridad ● Encapsulación
  • 9. RESTful ● HTTP ● ROA ● HATEOAS → WTF?
  • 10. HTTP ● Métodos (GET, POST, PUT, DELETE, PATCH) ● Status codes (200, 201, 202, 301, 400, 401, 404) ● Headers (Content-Type, Accept, Authorization) ● Idempotencia ● NO USAR COOKIES!
  • 11. ROA ● Resource Oriented Architecture ● Orientado a recursos, no a acciones (SOA) ● Recursos identificados por URIs ● Recursos → Representaciones ● “Cool URIs don't change”
  • 12. HATEOAS ● Hypermedia As The Engine Of Application State ● “Todo es un recurso identificable” ● “Tu usuario no conoce nada” ● http://roy.gbiv.com/untangled/2008/rest-apis- must-be-hypertext-driven ● http://en.wikipedia.org/wiki/HATEOAS
  • 13. Tastypie ● Aplicación de Django. ● Permite crear recursos basados en modelos ● Extensible y customizable ● Múltiples modos de serialización ● Buen uso de HTTP ● HATEOAS por defecto ● Tests y docs
  • 15. Tastypie - Instalación $ pip install django-tastypie # INSTALLED_APPS += ['tastypie'] $ manage.py syncdb
  • 16. Tastypie - Setup $ mkdir api $ touch api/__init__.py $ touch api/resources.py
  • 17. Al código! Tag: step1_setup
  • 18. Tastypie - Pruebas - /api/v1/ - /api/v1/user/ - /api/v1/user/schema/ - /api/v1/user/1/ - /api/v1/user/1/?format=xml
  • 19. Tastypie - Customizando - password? is_staff? @55f6589 - Crear otro recurso (t: step2_otro_recurso) - Fields, recursos relacionados (t: step3_recursos_relacionados)
  • 20. Tastypie - POSTing >>> import json >>> import requests >>> url = "http://127.0.0.1:8000/api/v1/tweet/" >>> data = {'user': '/api/v1/user/1/', 'tweet': 'Hello World!'} >>> headers = {'content-type': 'application/json'} >>> requests.post(url, data=json.dumps(data), headers=headers)
  • 21. Tastypie - 201 HTTP/1.0 201 CREATED Date: Fri, 14 Sep 2012 13:32:24 GMT Server: WSGIServer/0.1 Python/2.7 Content-Type: text/html; charset=utf-8 Location: http://127.0.0.1:8000/api/v1/tweet/2/
  • 22. Tastypie - DELETE $ curl --dump-header - -XDELETE > http://localhost:8000/api/v1/tweet/2/ HTTP/1.0 204 NO CONTENT Date: Fri, 14 Sep 2012 13:53:33 GMT Server: WSGIServer/0.1 Python/2.7.3 Content-Length: 0 Content-Type: text/html; charset=utf-8
  • 23. Tastypie – PATCH $ curl --dump-header - -H "Content-Type: application/json" > -X PATCH --data '{"tweet": "PATCHed tweet"}' > http://127.0.0.1:8000/api/v1/tweet/3/ HTTP/1.0 202 ACCEPTED Date: Fri, 14 Sep 2012 13:56:38 GMT Server: WSGIServer/0.1 Python/2.7.3 Content-Type: text/html; charset=utf-8
  • 24. Tastypie – PUT $ curl --dump-header - -H "Content-Type: application/json" > -X PUT --data > '{"tweet": "PUT tweet", "user": "/api/v1/user/2/"}' > http://127.0.0.1:8000/api/v1/tweet/3/ HTTP/1.0 204 NO CONTENT Date: Fri, 14 Sep 2012 14:02:48 GMT Server: WSGIServer/0.1 Python/2.7.3 Content-Length: 0 Content-Type: text/html; charset=utf-8
  • 25. Tastypie - Filtros class Meta: filtering = { 'username': ALL, 'date_joined': ['range', 'gt', 'gte', 'lt', 'lte'], } (t: step6_basic_filtering) ● /api/v1/user/?username__startswith=a ● /api/v1/user/?username__exact=admin ● /api/v1/user/?username__iexact=Admin ● /api/v1/user/?date_joined__gte=2012-09-14
  • 26. Tastypie - Datos complejos ● A veces los datos de los recursos no son simples ● Dehydrate per-field (t: step6_basic_filtering) ● Dehydrate general(t: step8_general_dehydrate) ● Hydrate general (t: step9_general_hydrate) ● Hydrate Fields ● Validación de datos (t: step10_validation)
  • 27. Tastypie - Autenticación ● Responde a la pregunta > ¿Quién sos? class Meta: authentication = TwitterAuthentication() class TwitterAuthentication(Authentication): def is_authenticated(self, request, **kwargs): return True
  • 28. Tastypie - Autorización ● Responde a la pregunta > ¿Podés hacer eso? class Meta: authorization = TwitterAuthorization() class TwitterAuthorization(Authorization): def is_authorized(self, request, object=None): return True
  • 29. Código usado ● https://github.com/santiagobasulto/tastypie-pyday-cba (Está dividido por tags)
  • 30. Recursos ● RFC 1626 ● RFC 5789 http://www.ics.uci.edu/~fielding/pubs/dissertation/ ● top.htm ● RESTful Web Services – O'reilly(ROA) ● http://www.w3.org/Provider/Style/URI.html http://roy.gbiv.com/untangled/2008/rest-apis- ●