【发布时间】:2016-03-10 05:28:08
【问题描述】:
我正在开发一个 Web 应用程序,我将在其中使用第三方 API 集成(支付网关、SMS 供应商、mailchimp 等电子邮件服务、其他外部 API)。我的应用程序将具有存储库模式,该存储库模式将具有与我的每个模型关联的存储库,并且我的控制器将使用存储库功能。
现在我的所有 API 集成都来自哪里?我应该将所有 API 集成保存在一个存储库中吗?
例子:
如果我有一个 SMS 提供商 Valuefirst,我的 Laravel 存储库设计是什么样的?
我的短信界面
interface ISmsProvider {
public function sendSms($mobileNo,$msg);
}
我的 ValueFirst(SMS 提供者)存储库
class ValueFirstRepository implements ISmsProvider {
public function sendSMS($mobieNo,$msg)
{
//API Call to ValueFirst SMS provider
// Any database insertions/updates to SMS model
// Any file logs
}
}
假设我有一个服务提供者类,我已经完成了接口和存储库的绑定,我的控制器看起来像
短信控制器
class SmsController extends BaseController {
// ISmsProvider is the interface
public function __construct(ISmsProvider $sms)
{
$this->sms = $sms;
}
public function sendSMS()
{
$mobileNo = '9999999999';
$msg = 'Hello World!';
$users = $this->sms->sendSMS($mobileNo,$msg);
}
}
我的问题
- 这是使用存储库模式进行 API 集成的正确方法吗?
- ValueFirst 存储库中是否发生了与任何数据库活动相关的任何事情?例如:如果我想在 ValueFirst 的 API 响应后更新记录,我是否在存储库中进行?
- 如果正确的话,谁能告诉我模型交互是如何从存储库中发生的?
- 现在,如果我需要在 ValueFirst 或任何其他供应商之间进行选择,该怎么办?如何从控制器执行此操作?
我将使用这个项目作为我的应用程序的骨架
请帮助我完成这个设计,我对 Laravel / 存储库模式相当陌生。努力学习东西。 TIA :)
【问题讨论】:
标签: php api laravel laravel-5 repository-pattern