Symfony2 ReST客户端结构

时间:2012-12-02 18:51:18

标签: php oop rest symfony guzzle

我正在尝试为Symfony 2中的ReST客户端建立最佳实践模式,因为这对我们公司来说是一项非常常见的工作,我们在前端边缘使用Symfony应用程序通过HTTP /基于Java的后端进行交谈其余部分。

我的想法是,这些服务填充了DDD中针对特定域的“存储库”角色。根据Doctrine指定的约定,这些约定将返回返回Entity对象的Repository类。

我认为同样的约定也可以在这里工作,ReST客户端使用像Guzzle这样的库实现一个Repository类,或者只是直接使用Curl,无论如何,然后代码从那里执行XML或JSON的基本转换。返回Entity对象供上游开发人员操作。这与其他Symfony 2用例中的模式一致,从DDD的角度来看也是有意义的。

有没有人看到这个或更好的方法有问题?

4 个答案:

答案 0 :(得分:2)

以下是处理symfony2中REST API开发的最佳文章:
http://welcometothebundle.com/symfony2-rest-api-the-best-2013-way/

FOSRestBundle NelmioApiDocBundle 是快速休息api开发的不错选择。您可以访问官方文档以了解如何安装,配置和使用它。

答案 1 :(得分:1)

我喜欢你概述的方法。您可以将您的存储库视为anti-corruption layer,它将您的ReST客户端代码与您的域模型隔离开来。

答案 2 :(得分:1)

如果您正确考虑所涉及的所有缓存层,这也有效,以确保您的存储库不会缓存超出您检索的REST对象的TTL(由etags或expire头或REST服务器使用的任何设置)

绝对存储库是正确的层,但是在Symfony中你可能想要提高一级并将其视为实体管理器,因为它允许你抽象该级别的操作,例如persist,remove和flush。 / p>

答案 3 :(得分:1)

如果您打算像这样使用它们,我认为您在滥用Symfony中的存储库。 最好在存储库中安装setter和getter,并在服务中使用guzzle / curl进行处理。

控制器/命令 - >服务方法 - >存储库

然后,根据您的需要,您可以编写一个命令/控制器,根据您的需要公开服务中的方法。