繁体   English   中英

symfony2:从命令访问REST api

[英]symfony2: accessing REST api from command

我有一个基于symfony2的应用程序,该应用程序基本上公开了REST API。 该应用程序没有任何UI。

在同一应用程序中,创建了一些操作资源的命令。 类似于创建用户,重置用户密码,删除用户,将用户分配到特定组等。

现在,我希望命令类使用REST API(除了控制器操作,它们什么都没有)执行实际操作,因为这些REST API已经配备了验证逻辑或所需的其他业务逻辑等。

问题:使用Command类中的REST API(即控制器动作)的最佳选择是什么? 我可以想到以下两种方法。

  1. 在命令类中创建Request对象。 设置适当的请求内容,标头等。包括控制器类,并使用创建的请求对象静态调用控制器操作。

  2. 使用curl使带有适当内容和标题的http调用。

在上述两种方法中,第一种对我来说似乎比较聪明,但是感觉应该有更优雅的方法来实现。 有什么建议吗?

curl方法允许您完全将api应用程序与命令断开连接。 您甚至可以让开发服务器上的命令命中您的生产应用程序。 这实际上是一种非常干净的方法,可以间接地帮助测试您的api。 顺便说一句,如果您最终使用了curl方法,那么诸如guzzle之类的3rd party库可以使生活更加轻松。

直接调用控制器操作可能很麻烦。 如您所指出的,您将需要伪造一个请求对象,从命令行参数填充(假定)它,实例化一个控制器,调用该动作并获得一个响应,然后解压缩响应以查看发生了什么。 要做很多“事情”。 当然,它可以将您的命令代码与控制器框架代码“牢固地”结合在一起。

我想做的是将实际的“业务”代码移至其自己的服务,然后将服务注入控制器。 控制器的动作将变得非常稀薄。 该操作从请求中解压缩参数,调用服务,然后将结果打包到响应中。

同样,服务也注入到命令对象中。 然后,该命令解压缩其参数,调用服务,然后对结果进行任何处理。

对我而言,至少这可以使设计更简洁。 这些服务更易于测试,当然也很容易在控制器和命令之间共享功能。

当然,您的控制器动作中可能已经有很多代码,而大规模重构是不切实际的。 在这种情况下,请使用伪造的请求路由。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM