Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Architecture en Webservice avec Django

xordoquy
October 26, 2013

Architecture en Webservice avec Django

xordoquy

October 26, 2013
Tweet

More Decks by xordoquy

Other Decks in Technology

Transcript

  1. Freelance! (since 2004) Dev Python Dev Django! (Backend) Mainteneur Raven

    (Sentry) Ancien contributeur ! PyGTK Contributions! diverses irc: Linovia @linovia_net
  2. Problèmes d’une architecture classique • Base de code complexe à

    maintenir • Evolutions des librairies couteuses en ressources • Isolation • Dimensionnement
  3. Accès à une ressource Web app Indicateurs Export ERP CRM

    Sources de données tierces Multi-sites Database
  4. Avantages • Garantie du contrat d’interface • Stabilité dans le

    temps • Migration souple • Moins de maintenance • Plus de nouvelles fonctionnalités
  5. Django Rest Framework • Modulaire… • mais pas minimaliste •

    Découplé (pas besoin de models) • Idiomes Django (CBV, forms, noms des options…)
  6. Features • Generic views • Serializers • Permissions • Renderers

    / Parsers • Routers • Content negotiation • Filters • Pagination • Throttling • Tests
  7. class UserSerializer(serializers.ModelSerializer):! class Meta:! model = User! fields = ('email',

    'username', ‘last_login')! ! class UserViewSet(viewsets.ModelViewSet):! queryset = User.objects.all()! serializer_class = UserSerializer! permission_classes = (permissions.IsAuthenticatedOrReadOnly)! ! router = DefaultRouter()! router.register(r'user', UserViewSet)
  8. Temps em ms 0 10 20 30 40 50 60

    70 80 90 100 110 120 130 140 Full stack Serialisation Redis Content nego Middleware HttpResponse Database lookup Redis lookup Serialization Django request/response API view Response rendering
  9. Django-roa • Resource Oriented Architecture • Coté client • Simplifie

    la séparation • Integration avec rest framework
 (bientôt avec les serializers)
  10. Exemple class Tweet(roa.Model):! text = models.TextField()! source = models.CharField(max_length=50)! user

    = models.ForeignKey(User)! ! @staticmethod! def get_resource_url_list():! return u'http://twitter.com/statuses/public_timeline.json'