Jenseits von REST Maturitäts-Leveln:

Erkenntnisse aus einem REST API Projekt




IPC München, 25. Oktober 2016

© David Buchmann

Wir haben eine "Herausforderung"

Daten Ausliefern

API: Symfony Anwendung

API: Versionierung

Nur ab Version 2

/**
 * The description as HTML
 *
 * @Serializer\Since("2")
 * @Serializer\Type("string")
 */
public $description;
Api-Version: 2
        

Für alte Versionen

/**
 * Plain text version of description.
 *
 * @Serializer\Until("1")
 * @Serializer\Type("string")
 * @Serializer\VirtualProperty
 * @Serializer\SerializedName("description")
 */
public function getDescriptionPlaintext() {
    return strip_tags($this->description);
}

Varnish Cache

Varnish Cache: Zugriffskontrolle

Varnish Cache: Routing

Varnish Cache: Cache Hits Verbessern

Bringt die Entwickler dazu, eure API zu Benutzen

Dokumentation

NelmioApiDocBundle

class LabelController {
   /**
    * @ApiDoc(
    *   description="Get a single label",
    *   output={
    *       "class"="App\Model\Label",
    *       "groups"={"api"}
    *   },
    *   section="Products")
    */
   public function getAction($id)

Swagger 2?

Indexierung der Daten

Workflow

Architektur

Symfony Commands

RabbitMQ

RabbitMQ & PHP

php-amqplib amqp extension
Installation:Alles in PHP PHP Extension
Verbindung:Jeder Request neu 1 pro php-fpm Prozess
Heartbeat:Invalid Frame 65 Blockierendes warten - kill funktioniert nicht

Datenqualität

Monitoring und Diagnose

Elasticsearch

Elasticsearch: Indexes

Elasticsearch: Schema-Änderungen

Elasticsearch: Clustering

Ausblick

Über REST hinaus


Alternativen: Stateless, aber...



Danke!


@dbu

David Buchmann, Liip AG