Laravel 从 REST API 检索数据

2022-08-30 13:17:33

好的,所以我有以下情况:

我正在构建的系统是从 REST API 检索数据并将该数据保存到数据库中。我想知道的是,这如何实现,以及像这样的行为在Laravels结构(控制器,模型等)的意义上会去哪里?Laravel是否有从外部来源检索数据的内置机制?


答案 1

编辑:Buzz已经一年多没有更新了,建议现在使用Guzzle,看看Mohammed Safeer的答案。


我使用Buzz软件包来发出API请求。

可以通过将此包添加到文件中的节来添加此包。requirecomposer.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 请求并将结果转换为应用程序可以使用的一组数组/对象(本质上,只是数据存储不同,这是首先使用存储库类的好处之一)。


答案 2

我们可以在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);

}

推荐