Я створив проект на основі символів, який використовує зовнішній API (JSON); що я зробив, це створити незалежну бібліотеку клієнтів ("бібліотека клієнтів" - фрагмент програмного забезпечення, композиторський пакет) з власним набором сутностей (POPO); вона інтегрується в основу, використовуючи інтерфейси, надані Symfony (наприклад, шляхом простого створення користувацького провайдера ).
Клієнт здійснює http-дзвінки "поза кадром" - це важливо для майбутніх можливостей тестування. Ви не хочете виставляти спосіб спілкування зі своїм джерелом даних, а також не хочете, щоб ваші тести покладалися на живі програми.
Інтерфейс бібліотеки клієнтів (наприклад, як це може виглядати):
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 для зв'язку та компонента кеш-доктрини для кешування результатів. Відображення між об’єктними об'єктами та json було зроблено картографами, що колись написане - не змінювалося дуже часто (або подія взагалі). У цьому випадку я б запропонував використовувати JMS Serializer для автоматизованого перетворення в JSON і з нього (я припускаю, що ви використовуєте JSON).
Вам знадобиться хороший механізм кешування та локальне зберігання, як-от Redis. Здійснення api-дзвінків на кожен запит програми вбиває ваш сервер і різко уповільнить вашу програму. Дуже важливо зрозуміти, як працюють кеші http. Якщо ваш api не використовує заголовки кешування (або використовує його незрозуміло), слідкувати за змінами буде дуже важко і забирає ресурси.
Ви також захочете подумати про те, як повинен вести себе клієнт, якщо з'єднання розривається - чи повинен клієнт використовувати засторожені дані? Було б непогано використовувати проксі-сервер між вашим додатком та API. У цьому випадку проксі (наприклад, лак) може пришвидшити ваші запити, а також оновити застарілі дані у фоновому режимі, не сповільнюючи додаток. Він також буде підтримувати ваш веб-сайт в Інтернеті у разі відмови API. Ти можеш не зможеш записати дані тим часом, але ваші користувачі все одно зможуть переглядати кешовані дані.
А кажучи про Вчення, дивіться " Закон інструменту ".