Slide 1

Slide 1 text

Symfony2 in SOA Kifah Abbad, devbliss GmbH Luis Quintela Garcia, devbliss GmbH Wolfgang Pfnür, devbliss GmbH

Slide 2

Slide 2 text

Vorab ● Grober Überblick über komplexe Themen ● Am Beispiel von Projekt-X ● Fragen bitte am Ende

Slide 3

Slide 3 text

TOC ● Basics ○ SOA ○ Beispiele für Services ○ RESTlike ● Architektur Projekt-X ● Symfony

Slide 4

Slide 4 text

SOA - Service-Oriented Architecture ● Unterteilung in kleine Einheiten ● Vorteile ○ Wiederverwendbarkeit ○ Wartbarkeit ○ Skalierbarkeit in der Entwicklung

Slide 5

Slide 5 text

Beispiele für Services ● Chat ● Commenting ● Rating ● Pernod (Persistent Notification Daemon) ● Buschfunk ● ...

Slide 6

Slide 6 text

RESTlike ● Zustandslos ● URL => Resource ● HTTP Method => CRUD ● /users (POST, GET) ● /users/{userId} (PUT, GET, DELETE) ● /users/{userId}/albums/{albumId}

Slide 7

Slide 7 text

TOC ● Basics ● Architektur Projekt-X ○ Frontend ○ Firewall ○ Symfony Service Container ○ Services ○ Inter-Service Kommunikation ● Symfony

Slide 8

Slide 8 text

Frontend ● Entkoppelung Server - Client ● Validierung auf Client ● Statisches nicht immer neu laden ○ AJAX ● Optisch ansprechend ● GWT (Google Web Toolkit)

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Symfony Service Container ● Bundle => Service ● Schnelle Entwicklung ● Einfaches Deployment ● Trotzdem: Service-Orientierte Architektur ● Später Hochlast-Services extrahieren

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

Services ● Problemspezifische Sprache ● Problemspezifische Architektur ● Existierende Services ● Vorhandene Sprach-Kenntnisse nutzen ● Abwechslung ;-)

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

Inter-Service Kommunikation ● Synchron ○ HTTP ○ Subrequest Symfony-Intern ● Asynchron ○ AMQP (RabbitMQ) ● Sonst nichts! ● Keine Bundle-Übergreifenden Imports! ○ Automatische Überwachung

Slide 17

Slide 17 text

TOC ● Basics ● Architektur Projekt-X ● Symfony ○ Entscheidungsfindung ○ Routing ○ ORM ○ DMS ○ Testing

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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)

Slide 20

Slide 20 text

ORM ● Doctrine ● Quasi Standard für Symfony ● Mischen von Mysql und MongoDB möglich

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

Testing ● Unittests ○ Mocking (einfach dank Dependency Injection) ● Doctests (Python) ○ Dokumentation der Routen ○ Dokumentation der Benutzung ○ Integrationstests

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

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)

Slide 28

Slide 28 text

Danke für die Aufmerksamkeit Fragen?