Symfony:访问另一个symfony REST API项目

时间:2017-01-30 13:04:02

标签: php rest api symfony

这是我的背景:

我有两个symfony REST API项目,我想在两个项目之间建立关系。每个项目都使用自己的数据库,实体和控制器。

从项目1(client-api),我需要访问项目2的实体(product-api)。 我曾尝试使用DoctrineRestDriver

首先,我配置了client-api项目的 config.yml 文件:

doctrine:
dbal:
    default_connection: default
    connections:
        default:
            driver:   "%database_driver%"
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            memory: "%database_memory%"
            path: "%database_path%"
            charset:  UTF8
        product_api:
            driver_class: "Circle\\DoctrineRestDriver\\Driver"
            host: "http://localhost"
            port: 8000
            user:
            password:
            options:
                authentication_class:  "HttpAuthentication"


orm:
    default_entity_manager: default
    entity_managers:
        default:
            connection: default
            mappings:
                AppBundle:
        product_api:
            connection: product_api
            mappings:
                AppBundle:

我想从product-api项目中读取一个国家/地区(id = 1),所以我在client-api项目上创建了这个控制器函数:

 /**
 * @Route("/countries", name="countries_other_api")
 */
public function getTheCountriesFromOtherApi()
{
    $em = $this->getDoctrine()->getManager('product_api');
    $country = $em->find("AppBundle\Entity\Country", 1);
}

但是我得到了恐怖:

  

Class'AppBundle \ Entity \ Pais'不存在

我的问题在哪里?如何从symfony项目1访问symfony项目2?

感谢。

1 个答案:

答案 0 :(得分:0)

因此,您有2个服务。每个服务都对自己的实体负责。并且您希望service1可以直接访问service2的数据库...

我的意见是您尝试以错误的方式解决问题。如果要从service2获取实体,则应使用service2的REST API,因为您需要在service1中重新实现service2逻辑。

如何以更好的方式做到这一点?为service2创建RestApi Client库,并将其添加到service1 composer.json文件。不要忘记使用身份验证(硬编码的API密钥或JWT ...)。

因此,回答您的问题“哪里有问题?”我可以说问题出在您要实施的解决方案中。