2012-12-02 137 views
17

我正在尝试为Symfony 2中的ReST客户端建立一个最佳实践模式,因为这对我们公司来说是一项非常普遍的工作,我们在前端边缘与Symfony应用程序交互,通过HTTP/ReST后端。Symfony2 ReST客户端结构

我的想法是,这些服务填充DDD中的“存储库”角色。基于Doctrine指定的约定,这些将在返回Entity对象的Repository类中进行。

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

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

回答

1

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

1

如果您正确地考虑所有缓存层,以确保您的存储库不会缓存超出您检索的REST对象的TTL(如通过etags或过期标头或任何REST服务器使用的设置)。

绝对Repository是正确的层,虽然也许在Symfony中你想要更高一级并考虑它是一个实体管理器,因为它可以让你抽象在该级别上的操作,如持久性,删除和刷新。

1

我想你是滥用Symfony中的存储库,如果你打算像那样使用它们。 在你的仓库中放置setter和getter并且在服务中使用guzzle/curl进行处理会更好。

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

然后,根据你的需要,你可以写一个命令/控制暴露在根据您的需求的服务的方法。

2

以下是应对REST API开发Symfony2中最好的文章:
http://welcometothebundle.com/symfony2-rest-api-the-best-2013-way/

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

+0

问题是关于REST客户端代码结构,而不是API –