View
4.186
Download
1
Category
Preview:
Citation preview
REST APIs com Django
Mailson Liramailson.netmailson@gmail.comXIV Encontro do PUG-PE
Quem sou eu
Aluno do sexto perodo de Cincia da Computao da UFPE com interesse em desenvolvimento web.
Web Service
Voc precisa acessar informaes de um servidor de terceiros. Ao invs de acoesso direto ao banco de dados, ele pode liberar uma API para tornar seu trabalho mais simples e o dele mais seguro.
Web Service
Isso no novo. H muito tempo j se faz algo do tipo.O problema que para manter a fluidez da web, isso devia ser feito de forma mais simples.
Web Service
No tem problemas com firewall
Nvel baixo de complexidade
SOAP
Bastante usado na Web 1.0
Aproveita protocolos j existentes (HTTP, SMTP)
Mensagens no formato XML
Desenvolvido pela MicrosoftFormato XML mais simples do que mensagens binrias usadas no CORBA, por exemplo.
SOAP
Envia um XML dizendo o que quer, o servidor executa a ao solicitada e retorna outro XML com a resposta.
REST
Para alguns, SOAP passou a ser complicado demais
REST no um protocolo. No existe um padro definido
A requisio pode estar somente na URL
Pra que serve?
Desenvolvimento de APIs
Distribuio de contedo
Voc vai fazer uma API com REST
Quem usa?
Flickr
Yahoo!
Amazon
Youtube
REST vs. SOAP
REST no um protocolo
Conjunto de princpios
REST vs. SOAP
Requisitando os Trending Topics do Twitter no caso de uma API SOAP.A resposta seria obrigatoriamente outro XML.
REST
Requisitando os Trending Topics do jeito REST
http://api.twitter.com/1/trends.json
A resposta pode ser em vrios formatos.
import urllib2r=urllib2.urlopen('http://api.twitter.com/1/trends.json').read()import jsontt = json.loads(r)for t in tt['trends']: print %s -> %s % (t['name'], t['url'])
REST
Facilidade de usarPraticamente no necessrio o uso de bibliotecas
Aproveita os mtodos do HTTPGET, POST, PUT, DELETE
REST
Exemplos com Django REST Framework
GET /rest/polls/
views.pyurls.pyurls.pyclass PollsResource(View): # GET /rest/polls/ def get(self, request): # Pega todas as enquetes polls = Poll.objects.all()
# Retorna uma lista de enquetes (dicionario contendo id, pergunta e url da API para ver mais dados sobre a enquete) return [{'id': p.id, 'question': (p.question), 'pub_date': str(p.pub_date), 'url': reverse('poll-resource', args=(p.id,))} for p in polls]
GET /rest/polls/ID
urls.pyviews.py
PUT /rest/choices/ID
urls.pyviews.py
POST /rest/polls/
views.py
DELETE /rest/polls/ID
views.py
Veja mais
Django REST Frameworkhttp://django-rest-framework.org/
Introduo a Django em 4 parteshttps://docs.djangoproject.com/en/1.3/intro/tutorial01/
http://docs.djangobrasil.org/intro/tutorial01.html (em portugus)
Tutorial de RESThttp://rest.elkstein.org/
Entenda melhor sobre RESThttp://jacobian.org/writing/rest-worst-practices/
http://blog.steveklabnik.com/2011/07/03/nobody-understands-rest-or-http.html
Recommended