【问题标题】:Symfony2 ReST Client StructureSymfony2 ReST 客户端结构
【发布时间】:2012-11-20 06:53:23
【问题描述】:

我正在尝试在 Symfony 2 中为 ReST 客户端建立一个最佳实践模式,因为这对我们公司来说是一项非常常见的工作,我们在前端有 Symfony 应用程序,通过 HTTP/ 与基于 Java 的后端通信休息。

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

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

有没有人发现这个问题或更好的方法?

【问题讨论】:

    标签: php oop rest symfony guzzle


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      Repository 绝对是正确的层,尽管在 Symfony 中您可能希望更上一层并将其视为实体管理器,因为它允许您抽象该级别上的操作,例如持久化、删除和刷新。

      【讨论】:

        【解决方案3】:

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

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

        然后,根据您的需要,您可以编写一个 Command/Controller 来根据您的需要公开服务中的方法。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • 问题是关于 REST 客户端代码结构,而不是 API
          猜你喜欢
          • 1970-01-01
          • 2021-07-25
          • 2019-03-25
          • 1970-01-01
          • 2015-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多