将 Laravel 模型与外部 API 数据源同步的正确方法是啥?
Posted
技术标签:
【中文标题】将 Laravel 模型与外部 API 数据源同步的正确方法是啥?【英文标题】:What is the right way to synchronize Laravel model with an external API data sources?将 Laravel 模型与外部 API 数据源同步的正确方法是什么? 【发布时间】:2017-05-07 00:29:34 【问题描述】:我想听听您对此问题的提示或解决方案。更有帮助的是一些工作的链接!实现其中一些机制的开源项目。
例如,我想将所有 github 的要点与 Laravel 模型同步。我考虑了两种形式。
选项 1
编写单独的类,例如 Importer,并从控制器和命令调用它的方法并与 Model 交互。
选项 2
将数据提取逻辑(api 调用)放入 Laravel 的模型层次结构(特征、接口等)和工匠的命令中,让我们说 synchronize:all 循环遍历所有模型并检查任何更改并更新每一行。
示例
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Sample\Http\Client;
class Gist extends Model
/**
* Example of fetching new gists
*/
public static function getNew($gistId = '6cad326836d38bd3a7ae')
$resposne = Client::request('GET', 'https://api.github.com/gists/'.$gistId)
->response()
->json();
$Gist = new static($response);
$Gist->save();
return $Gist;
/**
* Get list of all gist from external source and ... who knows
*/
public function listAllGistFromApi()
$resposne = Client::request('GET', 'https://api.github.com/gists/')
->response()
->json();
return $response;
/**
* Example of updating existing gist
*/
public function updateFromApi()
$gistId = $this->id; // primary key also api uid
$resposne = Client::request('GET', 'https://api.github.com/gists/'.$gistId)
->response()
->json();
return $this->setAttributes($response)->save(); // simplified logic
您的解决方案...
【问题讨论】:
我不需要***的代码。我想要的是你对这个问题的想法。 【参考方案1】:你可以使用observers
,它有什么作用?它会密切关注模型的变化,在那里你可以将你的 API 执行到 out 数据源,看看here 如何在Laravel
中应用observes
【讨论】:
可以,但是问题不大。我不知道如何强制 github 订阅我的观察者并在他们更改其要点时通知我。 (在此示例的上下文中)。唯一的方法是定期调用 api 端点与我的模型进行比较。怎么做?把这个逻辑放在哪里? 我认为你可以使用webhooks
,github 有。当发生更改时,它会对您的后端进行 api 调用,因此您可以处理更改以上是关于将 Laravel 模型与外部 API 数据源同步的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel API resourceCollection 使用数组而不是模型
AFIncrementalStore 将核心数据与 REST API 同步