Laravel 从 REST API 检索数据
好的,所以我有以下情况:
我正在构建的系统是从 REST API 检索数据并将该数据保存到数据库中。我想知道的是,这如何实现,以及像这样的行为在Laravels结构(控制器,模型等)的意义上会去哪里?Laravel是否有从外部来源检索数据的内置机制?
好的,所以我有以下情况:
我正在构建的系统是从 REST API 检索数据并将该数据保存到数据库中。我想知道的是,这如何实现,以及像这样的行为在Laravels结构(控制器,模型等)的意义上会去哪里?Laravel是否有从外部来源检索数据的内置机制?
编辑:Buzz已经一年多没有更新了,建议现在使用Guzzle,看看Mohammed Safeer的答案。
我使用Buzz软件包来发出API请求。
可以通过将此包添加到文件中的节来添加此包。require
composer.json
{
require: {
"kriswallsmith/buzz": "dev-master"
}
}
然后运行以安装它。composer update
然后在 Laravel 中,你可以将其包装在一个类(可能是类似存储库的类)中,该类处理发出 API 请求并返回数据供应用使用。
<?php namespace My\App\Service;
class SomeApi {
public function __construct($buzz)
{
$this->client = $buzz;
}
public function getAllWidgets()
{
$data = $this->client->get('http://api.example.com/all.json');
// Do things with data, etc etc
}
}
注意:这是伪代码。您需要创建一个适合您需求的类,并执行任何您想要/需要的花哨的依赖关系注入或代码体系结构。
正如@Netbulae所指出的,存储库可能会对您有所帮助。他链接的文章是一个很好的起点。本文与代码将要执行的操作之间的唯一区别是,您不是使用 Eloquent 模型从数据库中获取数据,而是发出 API 请求并将结果转换为应用程序可以使用的一组数组/对象(本质上,只是数据存储不同,这是首先使用存储库类的好处之一)。
我们可以在Laravel中使用pack Guzzle,它是一个PHP HTTP客户端来发送HTTP请求。
您可以通过作曲家安装Guzzle
composer require guzzlehttp/guzzle:~6.0
或者,您可以将 Guzzle 指定为项目现有 composer.json 中的依赖项
{
"require": {
"guzzlehttp/guzzle": "~6.0"
}
}
使用 Guzzle 的 laravel 5 中的示例代码如下所示,
use GuzzleHttp\Client;
class yourController extends Controller {
public function saveApiData()
{
$client = new Client();
$res = $client->request('POST', 'https://url_to_the_api', [
'form_params' => [
'client_id' => 'test_id',
'secret' => 'test_secret',
]
]);
$result= $res->getBody();
dd($result);
}