Eu fiz um projeto baseado no symfony que está usando uma API externa (JSON); o que fiz foi criar uma biblioteca cliente independente ("client library" - um software, pacote compositor), com seu próprio conjunto de entidades (POPOs); ele se integra à estrutura usando as interfaces fornecidas pelo Symfony (por exemplo, simplesmente criando um provedor de usuário personalizado ).
O cliente faz chamadas http "nos bastidores" - isso é importante para futuros recursos de teste. Você não deseja expor a maneira como se comunica com sua fonte de dados e também não deseja que seus testes confiem na API ao vivo.
Interface da biblioteca do cliente (exemplo como pode ser):
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);
}
A biblioteca cliente usa internamente o Guzzle para comunicação e o componente Doctrine Cache para armazenar em cache os resultados. O mapeamento entre objetos de entidade e json foi feito por mapeadores, que uma vez escritos - não mudavam com muita frequência (ou evento). Nesse caso, sugiro o uso do serializador JMS para uma transformação automatizada de e para JSON (presumo que você use JSON).
Você precisará de um bom mecanismo de armazenamento em cache e armazenamento local, como o Redis. Fazer chamadas de API em cada solicitação de aplicativo matará seu servidor e diminuirá drasticamente seu aplicativo. É muito importante entender como os caches http funcionam. Se a sua API não usar cabeçalhos de armazenamento em cache (ou usá-lo de maneira obscura), será muito difícil e consumirá recursos acompanhar as alterações.
Você também deve pensar em como o cliente deve se comportar se a conexão for interrompida - o cliente deve usar dados paralisados? Seria uma boa ideia usar um servidor proxy entre seu aplicativo e a API. Nesse caso, o proxy (como o Varnish) pode acelerar suas solicitações e também atualizar dados paralisados em segundo plano sem diminuir a velocidade do aplicativo. Ele também manterá seu site on-line em caso de falha na API. Enquanto isso, talvez você não consiga gravar dados, mas seus usuários ainda poderão procurar dados em cache.
E por falar em Doutrina, veja a " Lei do instrumento ".