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

Architecture en Webservice avec Django

Architecture en Webservice avec Django

Avatar for Ordoquy Xavier - Linovia

Ordoquy Xavier - Linovia

October 26, 2013
Tweet

More Decks by Ordoquy Xavier - Linovia

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'