
Laravel使API交互对新的和有经验的Web开发人员来说都是轻而易举的。Larvel的HTTP客户端是建立在PHP的Guzzle HTTP客户端之上,让开发者在进行HTTP请求时有更顺畅的体验。它的主要功能包括认证, 路由, 和有效的对象关系映射(ORM).
本文将探讨如何使用Laravel的HTTP客户端来进行请求, 调试响应, 创建中间件和宏, 以及更多。
是一个简单的PHP的HTTP客户端。它为不同的表单请求提供了功能,包括 GET, POst, PUT, 和 DELETE ,以及流媒体功能和多部分请求。使用Guzzle HTTP客户端,可以向服务器发送同步和异步的请求。此外,它还配备了体面的中间件来定制客户端的行为。
Laravel的HTTP客户端是一个建立在Guzzle基础上的封装器,但具有额外的功能。它包括支持重试失败的请求和一些json数据的辅助功能。Laravel HTTP客户端的大部分功能都与Guzzle类似。
在下面的章节中, 你会了解到更多关于Laravel的HTTP客户端。要继续学习, 你需要:
要了解如何使用HTTP客户端来发出请求, 你可以利用大量的托管API, 如.
首先,导入创建应用程序时包含的HTTP包。在app/Http/Controllers/UserController.php文件中,添加以下代码,从文件开头的use语句开始,其余代码在index函数中。
use Illuminate\Support\Facades\Http;
return Http::get("https://reqres.in/api/users?page=2");
Note: 对于复杂的用例,你也可以通过使用 withHeaders *** 发送带头文件的请求。
在同一个文件中,使用下面的代码创建一个新的 *** 帖子:
function post()
{
$response = Http::withHeaders([
'Content-Type' => 'application/json',
])->post('https://reqres.in/api/users', [
'name' => 'morpheus',
'job' => 'leader',
]);
return $response;
}
然后在routes/web.php文件中为其添加一个路由:
Route::get('post',[UserController::class,'post']);
现在,可以用Postman来测试这个路由。打开Postman,添加http://127.0.0.1:8000/post 作为URL,请求类型为 GET 。一旦你点击send,你会看到下面的响应:

使用Postman发出请求
并发请求可以显著提高性能,因为你可以在同一时间段内获取更多的数据。Laravel的HTTP客户端使得使用pool *** 进行并发请求成为可能。
在App/Http/Controllers/UserController.php里面, 添加以下代码:
use Illuminate\Http\Client\Pool;
function concurrent()
{
$responses = Http::pool(fn (Pool $pool) => [
$pool->get('https://reqres.in/api/users?page=2'),
$pool->get('https://reqres.in/api/users/2'),
$pool->get('https://reqres.in/api/users?page=2'),
]);
return $responses[0]->ok() &&
$responses[1]->ok() &&
$responses[2]->ok();
}
然后,在routes/web.php文件中添加支持性路由。
Route::get('concurrent',[UserController::class,'concurrent']);
浏览器在访问该路由时,会给出如下响应:

并发请求
请求宏在与常见的API路径进行交互时非常有用。
要创建宏,你需要使用下面的代码在App/Http/Controllers/UserController.php文件的启动 *** 内定义宏:
use Illuminate\Support\Facades\Http;
Http::macro('reqres', function () {
return Http::baseUrl('https://reqres.in/api');
});
Note:请确保在文件的开头添加使用语句。
然后,在 UserController 里面使用这个宏,添加以下代码:
function macro()
{
$response = Http::reqres()->get('/users?page=2');
return $response;
}
正如你所看到的,因为宏已经被创建了,你不必再添加完整的URL。
最后,使用下面的代码在routes/web.php文件中添加一个路由:
Route::get('macro',[UserController::class,'macro']);

宏请求
要解码一个响应并确保一个API请求是成功的,你可以使用客户端中的status *** 。这个 *** 获得从服务器发送的状态代码并显示出来。
为了测试这一点,在App/Http/Controllers/UserController.php文件中用下面的代码替换之前的宏代码:
function macro()
{
$response = Http::reqres()->get('/users?page=2');
return $response->status();
}
这里,状态代码200意味着请求成功。

成功解码响应
Laravel有几个辅助函数来测试 *** ON APIs和它们的响应。这些包括json, getJson, postJson, putJson, patchJson, deleteJson, 等等。
为了更好地理解测试,为 GET 用户的路由创建一个测试场景。当你启动Laravel应用程序时, Example Test已经被创建。在test/Feature/ExampleTest.php文件中, 用以下内容替换现有代码:
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function test_example()
{
$response = $this->getJson('/users');
$response->assertStatus(200);
}
}
添加的代码在用户的路线上获取 *** ON数据,并检查状态代码是否为200。
一旦你添加了测试代码,在你的终端运行以下命令来运行测试:
./vendor/bin/phpunit
一旦测试完成,你会看到它运行了两个测试,都是成功的。

测试 *** ON APIs
同样地,你可以检查不同类型的请求,并利用其他辅助 *** 进行更复杂的测试。
Laravel在处理HTTP请求时提供了三个事件。
所有这三个事件都包括$ request 属性,用来检查 Illuminate\Http\Client\Request 实例,而 ResponseReceived 有一个额外的 $response property。这些对于在事件后执行行动特别有用。例如,你可能想在得到一个成功的响应后发送电子邮件。
要创建一个事件和监听器,请浏览app/Providers/EventServiceProvider.php文件,用以下代码替换listen数组。
protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, ], 'Illuminate\Http\Client\Events\ResponseReceived' => [ 'App\Listeners\LogResponseReceived', ], ];
然后在你的终端运行以下命令:
php artisan event:generate
上述命令将创建app/Listeners/LogResponseReceived.php监听器。用下面的代码替换该文件的代码:
<?php
namespace App\Listeners;
use Illuminate\Http\Client\Events\ResponseReceived;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Log;
class LogResponseReceived
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct(Request $request, Response $response)
{
Log::channel('stderr')->info($response->status());
}
/**
* Handle the event.
*
* @param \Illuminate\Http\Client\Events\ResponseReceived $event
* @return void
*/
public function handle(ResponseReceived $event)
{
}
}
状态代码的信息日志被输出到终端。

显示状态代码的终端日志
无论一个网站或 *** 应用是由一个组织或独立开发者 *** 的,API都是其成功的关键。然而,使用它们可能是困难的。
许多和都承诺简化这一过程, 但Laravel因其专注于简单性和易用性而脱颖而出. 他们内置的客户端支持简单的API调用, 并发的API调用, API Macros, 基于 *** ON的API的辅助 *** , 以及更多。
扫描二维码推送至手机访问。
版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。
宝塔面板现在已经成为国内许多站长必备的服务器管理必备工具。相比直接使用SSH+FTP来管理服务器,宝塔面板可以提供可视化管理,包括文件管理、数据库管理、数据备份、SSL配置等等。 如果你希望更简单高效地管理您的网站及服务器,宝塔面板是不错的选择。下面是一些宝塔面板安装及常见问题:...
Linux面板环境安装,主要支持LNMP和LAMP、Tomcat、node.js。不过对于大部分站长来说,主要是LNMP和LAMP两个环境的安装。 LNMP和LAMP两个环境的最大区别是,前者采用Nginx作为Web服务器,后者则采用Apache作为Web服务器。(选择哪个作为您的Web服务器,可...
由于市场上有各种可用的数据库,用户经常会就MongoDB与MySQL进行辩论,以找出更好的选择。 使用MySQL等关系数据库的组织在根据不断变化的需求管理和存储数据时可能会面临一定的困难。同时,新公司想知道选择什么数据库,这样他们就不会在开发过程中遇到问题。 同时,构建金融应用程序的开发人员...
对于初学者和那些刚刚进入WordPress开发的人来说,PHP是您可以开始的最佳起点之一。这是一种超级简单直接的语言,使其成为之一,因此相当容易上手,它构成了在线开发的支柱。另外,如果你想在WordPress后端工作,你肯定需要学习它。 但是,如果您不想在昂贵的大学课程上花费数月或数年时间怎么...
随着越来越需要以更快的周转时间生产可扩展、安全和灵活的应用程序,Microservices和APIs在软件开发领域无处不在。 客户需求瞬息万变,他们希望软件解决方案能够减轻他们的任务并为他们提供便利。 采用单体架构的传统方法限制了开发人员进行大量创新。由于它们的成分很硬,因此在应用程序中进行...
Cloudflare已宣布弃用HOST API集成,这将影响Cloudflare的传统主机和经销商合作伙伴。 Cloudflare弃用HOST API Cloudflare Legacy Host API将于2022年11月1日正式被弃用。Cloudflare表示,由于支持和维护程序...