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

Symfony2 in SOA

Symfony2 in SOA

Symfony2 in einer Service-Orientierten Architektur am Beispiel eines devbliss Projekts.

Wolfgang Pfnür

September 05, 2012
Tweet

Other Decks in Programming

Transcript

  1. Symfony2 in SOA Kifah Abbad, devbliss GmbH Luis Quintela Garcia,

    devbliss GmbH Wolfgang Pfnür, devbliss GmbH
  2. TOC • Basics ◦ SOA ◦ Beispiele für Services ◦

    RESTlike • Architektur Projekt-X • Symfony
  3. SOA - Service-Oriented Architecture • Unterteilung in kleine Einheiten •

    Vorteile ◦ Wiederverwendbarkeit ◦ Wartbarkeit ◦ Skalierbarkeit in der Entwicklung
  4. Beispiele für Services • Chat • Commenting • Rating •

    Pernod (Persistent Notification Daemon) • Buschfunk • ...
  5. RESTlike • Zustandslos • URL => Resource • HTTP Method

    => CRUD • /users (POST, GET) • /users/{userId} (PUT, GET, DELETE) • /users/{userId}/albums/{albumId}
  6. TOC • Basics • Architektur Projekt-X ◦ Frontend ◦ Firewall

    ◦ Symfony Service Container ◦ Services ◦ Inter-Service Kommunikation • Symfony
  7. Frontend • Entkoppelung Server - Client • Validierung auf Client

    • Statisches nicht immer neu laden ◦ AJAX • Optisch ansprechend • GWT (Google Web Toolkit)
  8. Firewall • Janitor ◦ In der Blütezeit von VZ entwickelt

    ◦ Nginx ◦ Extrem viele Requests, zentrale Komponente ◦ Routen-Regex per Service-Config-Endpunkt ◦ AuthLevels • Juanitor ◦ Janitor mit Lua Konfiguration statt rewrites
  9. Symfony Service Container • Bundle => Service • Schnelle Entwicklung

    • Einfaches Deployment • Trotzdem: Service-Orientierte Architektur • Später Hochlast-Services extrahieren
  10. Inter-Service Kommunikation • Synchron ◦ HTTP ◦ Subrequest Symfony-Intern •

    Asynchron ◦ AMQP (RabbitMQ) • Sonst nichts! • Keine Bundle-Übergreifenden Imports! ◦ Automatische Überwachung
  11. Entscheidungsfindung • VZ-Redesign := PHP • Verschiedene Frameworks getestet ◦

    Schnelligkeit ◦ Dependency Injection (gut für Tests) ◦ Coding Standards ◦ Symfony2 => Bestes Framework für PHP • Projekt-X: ◦ Wissen vorhanden ◦ Gute Erfahrungen
  12. Routing • Warum kein FoSRestBundle? ◦ Befürchtung: zu unflexibel (Dezember

    2010) • Routen per Annotation • AuthLevel + Regex für J(u)anitor • RequestListener per URL-Annotation aktivieren (z.B. GUID-to-ID)
  13. DMS • Domain-Model-Schema in Yaml • Objektdefinition ◦ Properties (mit

    Typ) ◦ Validatoren ◦ Initialer Wert • Generierung von DTOs für alle Sprachen • Symfony-Entities erben von DTOs ◦ Doctrine Annotationen in Entities
  14. Testing • Unittests ◦ Mocking (einfach dank Dependency Injection) •

    Doctests (Python) ◦ Dokumentation der Routen ◦ Dokumentation der Benutzung ◦ Integrationstests
  15. Exception Listener • Nur JSON erlaubt - auch bei Exceptions

    ◦ Client muss ja wissen, dass etwas kaputt ist • Doctests erwarten also JSON ◦ Es werden auch Fehlerfälle getestet • Anzeige von Fehlern im Browser (bcat) • Symfony-Fehlerscreen-HTML im JSON Payload (nur im Debug Mode)