Объединение данных из нескольких API

У меня есть 2 API, API компании и API новостей. Я хочу извлечь Новости, связанные с Компанией, так что было бы наилучшей практикой для достижения этой цели?

Идея 1

  • Клиент — запросы / компания / [slug]
  • Company API — возвращает данные о компании (включая идентификатор компании)
  • Клиент — запросы / новости / компания / [id]
  • Company API — возвращает новостные данные для компании

В этом случае клиент должен сделать запрос к обоим API, чтобы получить список новостей для компании.

Идея 2

  • Клиент — запросы / компания / [slug] / новости
  • Company API — обрабатывает идентификатор компании и перенаправляет запрос на API новостей, добавляя в фильтр идентификаторов компании
  • News API — возвращает новостные данные для нужной компании
  • Фирменный API — передает клиенту форму ответа нового API.

В этом случае только 1 запрос сделан от клиента, и все желаемое возвращается в 1 ответе

0

Решение

Хорошо, если вы хотите сделать это с базой данных и используете Doctrine: что бы вы сделали?

Именно так! Создайте сущность для этой проблемы:

class Company {
/*
* @ORM\OneToMany(...)
*/
private $news;
}

Теперь, если вы хотите получить компанию с идентификатором 1 и ее новостями, вы должны сделать что-то вроде этого:

$company = $entityManager->find('Company', 1);
$news    = $company->getNews();

Проблема в том, что Doctrine нельзя использовать с REST API. Но есть драйвер для Doctrine, который работает с REST API. Это должно сделать трюк:

https://github.com/CircleOfNice/DoctrineRestDriver

/*
* @DataSource\Select("http://yourapi.com/company/{id}")
*/
class Company {}

/*
* @DataSource\Select("http://yourapi2.com/news/{id}")
*/
class News {}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]