结合来自多个API的数据

时间:2016-08-11 11:37:11

标签: php api-design

我有2个API,一个公司API和一个新闻API。我想提取与公司相关的新闻,那么实现这一目标的最佳做法是什么?

想法1

  • 客户 - 请求/公司/ [slug]
  • 公司API - 返回公司数据(包括公司ID)
  • 客户 - 请求/新闻/公司/ [id]
  • 公司API - 返回公司的新闻数据

在这种情况下,客户必须向两个API发出请求以获取公司的新闻列表。

创意2

  • 客户 - 请求/公司/ [slug] / news
  • 公司API - 计算公司ID并将请求转发到公司ID过滤器中添加的新闻API
  • 新闻API - 返回所需公司的新闻数据
  • 公司API - 将新API的响应传递给客户端。

在这种情况下,只有1个请求来自客户端,并且在1响应中返回所需的所有内容

1 个答案:

答案 0 :(得分:0)

好吧,如果你想用数据库做这件事而你正在使用Doctrine:你会做什么?

完全!为该问题构建实体:

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

现在,如果你想让公司获得id 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 {}