Ich habe ein symfony-basiertes Projekt erstellt, das eine externe API (JSON) verwendet. Ich habe eine unabhängige Client-Bibliothek ("Client-Bibliothek" - eine Software, ein Composer-Paket) mit eigenen Entitäten (POPOs) erstellt. Die Integration in das Framework erfolgt über von Symfony bereitgestellte Schnittstellen (z. B. durch einfaches Erstellen eines benutzerdefinierten Benutzeranbieters ).
Der Client führt http-Aufrufe "hinter den Kulissen" durch - dies ist wichtig für zukünftige Testfunktionen. Sie möchten nicht offenlegen, wie Sie mit Ihrer Datenquelle kommunizieren, und Sie möchten auch nicht, dass Ihre Tests auf Live-API basieren.
Client-Bibliotheksschnittstelle (Beispiel, wie es aussehen könnte):
class ApiClient {
/**
* @throws SomeApiException If credentials are invalid
* @return ApiUser
*/
public function authenticate($username, $password);
/**
* @return ApiUser
*/
public function findUserByEmail($email);
/**
* @throws SomeApiException If email is invalid
* @return void
*/
public function changeUserEmail(User $user, $newEmail);
}
Die Client-Bibliothek verwendet intern Guzzle für die Kommunikation und Doctrine Cache-Komponente zum Zwischenspeichern der Ergebnisse. Die Zuordnung zwischen Entitätsobjekten und json wurde von Zuordnern vorgenommen, die sich nach dem Schreiben nicht sehr oft (oder überhaupt nicht) geändert haben. In diesem Fall würde ich vorschlagen, den JMS Serializer für eine automatisierte Umwandlung von und nach JSON zu verwenden (ich gehe davon aus, dass Sie JSON verwenden).
Sie benötigen einen guten Caching-Mechanismus und lokalen Speicher wie Redis. Wenn Sie bei jeder App-Anfrage API-Aufrufe tätigen, wird Ihr Server zerstört und Ihre Anwendung drastisch verlangsamt. Es ist sehr wichtig zu verstehen, wie http-Caches funktionieren. Wenn Ihre API keine Caching-Header verwendet (oder diese auf unklare Weise verwendet), ist es sehr schwierig und ressourcenintensiv, die Änderungen im Auge zu behalten.
Sie sollten auch darüber nachdenken, wie sich der Client verhalten soll, wenn die Verbindung unterbrochen wird. Sollte der Client blockierte Daten verwenden? Es ist eine gute Idee, einen Proxyserver zwischen Ihrer App und der API zu verwenden. In diesem Fall kann der Proxy (wie Varnish) Ihre Anforderungen beschleunigen und blockierte Daten im Hintergrund aktualisieren, ohne Ihre App zu verlangsamen. Außerdem bleibt Ihre Website im Falle eines API-Fehlers online. In der Zwischenzeit können Sie möglicherweise keine Daten schreiben, aber Ihre Benutzer können weiterhin zwischengespeicherte Daten durchsuchen.
Wenn Sie von Lehre sprechen, lesen Sie das " Gesetz des Instruments ".