API 调用驻留在存储库模式 laravel 应用程序中的啥位置?
Posted
技术标签:
【中文标题】API 调用驻留在存储库模式 laravel 应用程序中的啥位置?【英文标题】:Where does an API call resides in a repository pattern laravel application?API 调用驻留在存储库模式 laravel 应用程序中的什么位置? 【发布时间】:2016-03-15 14:25:31 【问题描述】:我正在构建一个具有 3 rd 方 api 集成的 Web 应用程序,其中包括
-
支付网关
短信供应商
像 mandrill 这样的电子邮件提供商
现在我可以拥有与我的数据库对话的函数所在的具体存储库类。据我所知,存储库是用于与数据库对话的标准做法。现在我在哪里构建调用 3rd 方 API 的逻辑?这就是服务提供商的意思吗?如果那么有人可以向我展示整个流程如何运作的非常基本的示例吗?例如,通过调用服务提供商从控制器发送短信。这个问题可能看起来很垃圾,但我无法获得任何示例或在线搜索它。没有现实世界的例子可以看到。
如果有人做过同样的事情,请提供一些参考或示例。
TIA!
【问题讨论】:
有几个关于laravel repository pattern的教程。他们中的大多数建议在某些命名空间中使用 自定义 php 代码 和接口类。需要注意的是,laravel 有 mandrill support。附言。 laravel sms 上的第一个谷歌结果,我也在 packagist 上找到。如果你坚持要问别人,那就再深入一点。 嗨@Tezla,教程仅限于访问网络应用程序本身内部的数据库和数据。没有提到如何构建外部 API。 Codeigniter 有库,我们可以在其中进行所有外部 api 集成。但是在 larave 中,这是标准的做法吗?教程中没有这些 因为 我将存储库模式视为一组命名空间,其中包含可以做任何事情的协定(接口类) - 是的,任何事情,示例可能是一些数据库访问,但没有什么能阻止你因为做别的事情。编程毕竟是关于创造力的。此外,尝试使用 packagegist url,您可能会找到所需的包。我希望没有人开始 CI-Laravel 圣战。 @Tezla 是的,但最好坚持标准做法。如果您对此有任何示例方法,可以将其写下来作为答案吗? laravel.io/forum/… 解释了如何在控制器中暴露 guzzle,并提供了一些建议以了解 Laravel 如何在内部为 Mandril 和 Mailgun 使用 guzzle。将每个代码放在一个服务类中,或者通过存储库模式更容易地分离外部 api 逻辑和邮件/支付网关 【参考方案1】:在严格意义上,存储库用于封装对一组数据进行高级访问的方法。
话虽如此,没有什么说这是使用它们的唯一方法。该模式本身允许您将不同的进程分组到不同的位置,从而改进代码的组织。
在这一点上,人们可能会争辩说它们不再是存储库,但最重要的因素不仅仅是在最严格的意义上坚持设计模式。它使用适合您的应用程序需求的模式,有时这也可能会扭曲该模式所暗示的含义。
并非每个标准或模式都能完美地融入您的应用程序,也不应该如此。您应该在需要的地方进行更改,并在适当的时候打破惯例。这是一个判断问题。如果您认为使用存储库作为高级访问方法的有效集合(在另一层中的应用程序逻辑,如服务)或应用程序逻辑的集合更简单。甚至两者兼而有之。
【讨论】:
以上是关于API 调用驻留在存储库模式 laravel 应用程序中的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章
无法从另一个 docker 容器中的烧瓶应用程序对驻留在 docker 容器中的 django 应用程序进行“获取”调用 [重复]