外部API(JSON)を使用するsymfonyベースのプロジェクトを作成しました。私がやったことは、独自のエンティティ(POPO)のセットを使用して、独立したクライアントライブラリ(「クライアントライブラリ」-ソフトウェア、作曲家パッケージ)を作成することでした。Symfonyが提供するインターフェースを使用してフレームワークと統合します(たとえば、単にカスタムユーザープロバイダーを作成するなど)。
クライアントが「舞台裏」でhttp呼び出しを行う-これは、将来のテスト機能にとって重要です。データソースとの通信方法を公開したくないし、テストでライブAPIに依存したくない。
クライアントライブラリインターフェース(例はどのように見えるか):
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);
}
クライアントライブラリは、通信に内部的にGuzzleを使用し、結果をキャッシュするためにDoctrine Cacheコンポーネントを使用します。エンティティオブジェクトとjsonの間のマッピングは、一度作成されたマッパーによって行われました-それほど頻繁には変更されませんでした(またはイベントではまったく変更されません)この場合、JSONとの自動変換にJMSシリアライザーを使用することをお勧めします(JSONを使用すると想定しています)。
Redisのような優れたキャッシュメカニズムとローカルストレージが必要です。各アプリリクエストでAPI呼び出しを行うと、サーバーが強制終了され、アプリケーションの速度が大幅に低下します。httpキャッシュのしくみを理解することは非常に重要です。APIがキャッシングヘッダーを使用しない場合(またはあいまいな方法で使用する場合)、変更を追跡することは非常に難しく、リソースを消費します。
また、接続が切断された場合のクライアントの動作を検討する必要があります。クライアントは停止したデータを使用する必要がありますか?アプリとAPIの間でプロキシサーバーを使用することをお勧めします。この場合、プロキシ(Varnishなど)はリクエストを高速化し、停止したデータをアプリを遅くすることなくバックグラウンドで更新できます。また、APIに障害が発生した場合にウェブサイトをオンラインに保ちます。その間、データを書き込むことができない場合がありますが、ユーザーは引き続きキャッシュされたデータを参照できます。
Doctrineについては、「楽器の法則」を参照してください。