返回顶部
首页 > 资讯 > 精选 >Laravel HTTP Client技巧有哪些
  • 709
分享到

Laravel HTTP Client技巧有哪些

2023-07-05 15:07:58 709人浏览 泡泡鱼
摘要

本文小编为大家详细介绍“Laravel Http Client技巧有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel HTTP Client技巧有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧

本文小编为大家详细介绍“Laravel Http Client技巧有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel HTTP Client技巧有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

作为WEB开发人员,我们经常需要与来自Laravel应用程序的api进行交互。在Laravel HTTP客户端版本7中提供了一个方便而直观的Guzzle HTTP库包装器。在本文中,我们将探讨使用Laravel HTTP Client的五个有价值的技巧,这些技巧可以使你的开发体验更加高效和愉快。

这些技巧包括使用HTTP宏、为容器服务配置HTTP客户机、可移植的基本URL配置、防止测试中的杂发请求以及侦听HTTP事件。通过掌握这些技巧,你可以简化API交互并创建更健壮和可维护的Laravel应用程序。

HTTP 宏

Laravel 的许多服务都有一个特性,允许你为应用程序定义自定义方法。你可以将这些宏添加到服务提供者的boot()方法中,而不是从 Laravel 框架扩展核心类。

HTTP 文档中展示了一个宏的示例,你可以使用它来定义常见的设置:

public function boot(): void{    Http::Macro('GitHub', function () {        return Http::withHeaders([            'X-Example' => 'example',        ])->baseUrl('https://github.com');    });}// Usageresponse = Http::github()->get('/');

宏可以定义任何你想在应用程序中定义和重复使用的便捷方法。文档中的宏示例涉及到了另一个配置 HTTP 客户端用于在其他服务中使用的提示。

在下一节中,我们将重温将宏与传递客户端到其他容器服务相结合的方法。

配置容器服务的 HTTP 客户端

在 Laravel 应用程序中与 API 交互时,你可能希望为客户端配置各种可配置的设置。例如,如果 API 具有多个环境,则需要配置基本 URL、令牌、超时设置等。

我们可以利用宏来定义客户端,将客户端表示为自己的服务,然后将其注入到其他服务中,或者两者都有。

首先,让我们看看如何在服务提供者的 reGISter() 方法中定义客户端设置:

public function register(): void{    $this->app->singleton(ExampleService::class, function (Application $app) {        $client = Http::withOptions([            'base_uri' => config('services.example.base_url'),            'timeout' => config('services.example.timeout', 10),            'connect_timeout' => config('services.example.connect_timeout', 2),        ])->withToken(config('services.example.token'));        return new ExampleService($client);    });}

在单例服务定义中,我们链式调用了一些调用以配置客户端。结果是一个 PendingRequest 实例,我们可以将其传递给我们的服务构造函数,如下所示:

class ExampleService{    public function __construct(        private PendingRequest $client    ) {}    public function getWidget(string $uid)    {        $response = $this->client            ->withUrlParameters(['uid' => $uid])            ->get('widget/{uid}');        return new Widget($response->JSON());    }}

该服务使用 withOptions() 方法直接配置 Guzzle 选项,但我们也可以使用 HTTP 客户端提供的一些便捷方法:

$this->app->singleton(ExampleService::class, function (Application $app) {    $client = Http::baseUrl(config('services.example.base_url'))        ->timeout(config('services.example.timeout', 10))        ->connectTimeout(config('services.example.connect_timeout', 2))        ->withToken(config('services.example.token'));    return new ExampleService($client);});

或者,如果你想将宏与服务相结合,可以在你的 AppServiceProviderboot() 方法中使用你定义的宏:

$this->app->singleton(ExampleService::class, function (Application $app) {    return new ExampleService(Http::github());});

可移植的基础 URL 配置

你可能已经看到默认的基础 URL 包含一个尾随的 /,根据 RFC3986,这提供了最大的可移植性。

以下面的服务配置为例 (注意默认的 base_url):

return [    'example' => [        'base_url' => env('EXAMPLE_BASE_URI', 'https://api.example.com/v1/'),        'token' => env('EXAMPLE_SERVICE_TOKEN'),        'timeout' => env('EXAMPLE_SERVICE_TIMEOUT', 10),        'connect_timeout' => env('EXAMPLE_SERVICE_TIMEOUT', 2),    ],];

如果我们的 API 在生产和测试环境中有一个路径前缀 /v1/ ,也许它只是 https://stg-api.example.com/; 使用尾部斜线可以使 URL 按预期工作,而不会更改代码。在配置尾部 / 的同时,请注意,我的代码中的所有 API 调用都使用相对路径:

$this->client    ->withUrlParameters(['uid' => $uid])    // 例子:    // 测试环境 - https://stg-api.example.com/widget/123    // 生产环境 - https://api.example.com/v1/widget/123    ->get('widget/{uid}');

请参阅 Guzzle 的创建客户端文档,了解不同的 base_uri 风格是如何影响 URI 的解析的。

防止测试中的杂散请求

Laravel 的 HTTP 客户端提供了优秀的测试工具,使编写测试变得轻而易举。当我写与 API 交互的代码时,我感到不安的是我的测试在某种程度上有实际的网络请求发生。进入防止杂散请求与 Laravel 的 HTTP 客户端:

Http::preventStrayRequests();Http::fake([    'github.com/*' => Http::response('ok'),]);// Run test code// If any other code triggers an HTTP call via Laravel's client// an exception is thrown.

在我看来,使用 preventStrayRequests() 的最好方法是在你期望与 API 交互的测试类中定义一个 setUp() 方法。也许你也可以把它添加到你的应用程序的基础 TestCase 类中。

namespace Tests;use Illuminate\Foundation\Testing\TestCase as BaseTestCase;use Illuminate\Support\Facades\Http;abstract class TestCase extends BaseTestCase{    use CreatesApplication;    public function setUp(): void    {        parent::setUp();        Http::preventStrayRequests();    }}

这样做将确保你的测试套件中触发的每个 HTTP 客户端调用都有一个假的请求支持。使用这种方法给了我很大的信心,我已经在我的测试中用一个等价的假请求覆盖了我所有的出站请求。

HTTP 事件的日志处理程序

Laravel 的 HTTP 客户端有很多有价值的事件,你可以用它们来快速挖掘请求/响应生命周期的重要阶段。在写这篇文章的时候,有三个事件被触发:

  • Illuminate\HttpClient\Events\RequestSending

  • IlluminateHttpClient\Events\ResponseReceived

  • IlluminateHttpClient\EventsConnectionFailed

比方说,你想把你的应用程序发出请求的每个 URL 都可视化。我们可以很容易地接入 RequestSending 事件,并记录出每个请求。

namespoace App/Listeners;use Illuminate\Contracts\Queue\ShouldQueue;use Illuminate\Queue\InteractsWithQueue;use Illuminate\Support\Facades\Log;class LogRequestSending{    public function handle(object $event): void    {        Log::debug('HTTP请求正在发送。', ['url' => $event->request->url()            'url' => $event->request->url(),        ]);    }}

为了使事件处理程序工作,在 EventServiceProvider 类中添加以下内容。

use App\Listeners\LogRequestSending;use Illuminate\Http\Client\Events\RequestSending;// ...protected $listen = [    Registered::class => [        SendEmailVerificationNotification::class,    ],    RequestSending::class => [        LogRequestSending::class,    ],];

一旦它被连接起来,你就会在你的日志中看到类似于 HTTP 客户端尝试的每个请求的内容。

[2023-03-17 04:06:03] local.DEBUG: HTTP请求正在被发送。{"url": "https://api.example.com/v1/widget/123"}

读到这里,这篇“Laravel HTTP Client技巧有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Laravel HTTP Client技巧有哪些

本文链接: https://lsjlt.com/news/353000.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Laravel HTTP Client技巧有哪些
    本文小编为大家详细介绍“Laravel HTTP Client技巧有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel HTTP Client技巧有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • Laravel使用技巧有哪些
    今天小编给大家分享一下Laravel使用技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.胖模型,瘦控制器如果我们...
    99+
    2023-07-04
  • Laravel Eloquent使用技巧有哪些
    这篇“Laravel Eloquent使用技巧有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Laravel Eloqu...
    99+
    2023-07-04
  • Laravel中有哪些文件处理技巧?
    Laravel是一个非常流行的PHP框架,它提供了许多有用的功能,其中包括文件处理。在本文中,我们将讨论Laravel中一些有用的文件处理技巧。 文件上传 文件上传是Web应用程序中常见的任务之一。在Laravel中,我们可以使用内置的...
    99+
    2023-08-04
    编程算法 laravel 文件
  • PHP中Laravel容器的加载技巧有哪些?
    Laravel是一个流行的PHP框架,它提供了一个强大的容器来管理应用程序中的依赖关系。这个容器可以自动注入依赖项,并且可以通过绑定和解析来注册和解析类和接口。在本文中,我们将介绍一些Laravel容器的加载技巧,以便您可以更好地了解它的...
    99+
    2023-09-16
    load laravel 容器
  • Laravel 5框架性能优化技巧有哪些
    这篇文章主要讲解了“Laravel 5框架性能优化技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Laravel 5框架性能优化技巧有哪些”吧!配置缓存信息使用laravel自带的a...
    99+
    2023-06-04
  • Laravel模型时间戳使用小技巧有哪些
    这篇文章主要介绍Laravel模型时间戳使用小技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!默认情况下,Laravel Eloquent 模型默认数据表有 created_at 和 updated_at 两...
    99+
    2023-06-22
  • SQLServer技巧有哪些
    这篇文章主要介绍“SQLServer技巧有哪些”,在日常操作中,相信很多人在SQLServer技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQLServer技巧有...
    99+
    2024-04-02
  • 有哪些CSS技巧
    这篇文章主要讲解了“有哪些CSS技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些CSS技巧”吧!1. @font-face一种用其他服务器上的字体的...
    99+
    2024-04-02
  • CSS技巧有哪些
    今天就跟大家聊聊有关CSS技巧有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。各种浏览器之间的竞争的白热化意味着越来越多的人现在开始使用那些支持...
    99+
    2024-04-02
  • 有哪些JS技巧
    这篇文章主要讲解了“有哪些JS技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些JS技巧”吧! 1.三元运算符新手let hung...
    99+
    2024-04-02
  • JS技巧有哪些
    这篇文章将为大家详细讲解有关JS技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 确保数组值使用 grid ,需要重新创建原始数据,并且每行的列长度可能不匹配...
    99+
    2024-04-02
  • ADO.NET技巧有哪些
    本篇内容主要讲解“ADO.NET技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ADO.NET技巧有哪些”吧!指定目标表所允许的一个或多个表提示。需要有 WITH 关键字和圆括号。不允许...
    99+
    2023-06-17
  • Python技巧有哪些
    这篇文章主要讲解了“Python技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python技巧有哪些”吧!1. 列表理解列表理解可以代替丑陋的for循环来填充列表。列表理解的基本语...
    99+
    2023-06-15
  • Ubuntu技巧有哪些
    这篇文章主要讲解了“Ubuntu技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Ubuntu技巧有哪些”吧!查看当前网卡的物理地址 sudo arp -a | awk '{p...
    99+
    2023-06-16
  • mysql小技巧有哪些
    这篇文章主要介绍mysql小技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 1.  查看历史操作记录 1.1   linux操作系统查看历...
    99+
    2024-04-02
  • JavaScript的技巧有哪些
    本篇文章给大家分享的是有关JavaScript的技巧有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。不少人有五年的 JavaScript ...
    99+
    2024-04-02
  • CSS的技巧有哪些
    今天就跟大家聊聊有关CSS的技巧有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。各种浏览器之间的竞争的白热化意味着越来越多的人现在开始使用那些支...
    99+
    2024-04-02
  • ES6小技巧有哪些
    小编给大家分享一下ES6小技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 强制要求参数ES6提供了默认参数值机制,...
    99+
    2024-04-02
  • JavaScript有哪些小技巧
    这篇文章主要为大家展示了“JavaScript有哪些小技巧”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript有哪些...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作