当前位置:首页>WordPress资讯>如何使用Laravel的内置客户端与外部API交互

如何使用Laravel的内置客户端与外部API交互

如何使用Laravel的内置客户端与外部API交互

使API交互对新的和有经验的人员来说都是轻而易举的。Larvel的客户端是建立在PHP的Guzzle 之上,让在进行时有更顺畅的体验。它的主要功能包括认证, 路由, 和有效的对象关系映射(ORM).

本文将探讨如何使用Laravel的HTTP客户端来进行请求, 调试响应, 创建中间件和宏, 以及更多。

  1. Laravel HTTP客户端为你的API工作
  2. 前提条件
  3. 如何发出请求
  4. 并发请求
  5. 请求宏
  6. 如何解码响应
  7. 如何测试 APIs
  8. 如何处理事件

Laravel HTTP客户端为你的API工作

Guzzle是一个简单的PHP的HTTP客户端。它为不同的表单请求提供了功能,包括 GETPOSTPUT, 和 DELETE ,以及流媒体功能和多部分请求。使用Guzzle HTTP客户端,可以向服务器发送同步和异步的请求。此外,它还配备了体面的中间件来定制客户端的行为。

Laravel的HTTP客户端是一个建立在Guzzle基础上的封装器,但具有额外的功能。它包括支持重试失败的请求和一些JSON数据的辅助功能。Laravel HTTP客户端的大部分功能都与Guzzle类似。

前提条件

在下面的章节中, 你会了解到更多关于Laravel的HTTP客户端。要继续学习, 你需要:

  • 有关Laravel, PHP, 和API的基本知识
  • 安装了PHP和
  • Postman

如何发出请求

要了解如何使用HTTP客户端来发出请求, 你可以利用大量的托管API, 如ReqRes.

首先,导入创建应用程序时包含的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,你会看到下面的响应:

如何使用Laravel的内置客户端与外部API交互

使用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']);

在访问该路由时,会给出如下响应:

如何使用Laravel的内置客户端与外部API交互

并发请求

请求宏

请求宏在与常见的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']);

如何使用Laravel的内置客户端与外部API交互

宏请求

如何对响应进行解码

要解码一个响应并确保一个API请求是成功的,你可以使用客户端中的status方法。这个方法获得从服务器发送的并显示出来。

为了测试这一点,在App/Http/Controllers/UserController.php文件中用下面的代码替换之前的宏代码:

function macro()
{
$response = Http::reqres()->get('/users?page=2');
return $response->status();
}

这里,状态代码200意味着请求成功。

如何使用Laravel的内置客户端与外部API交互

成功解码响应

如何测试JSON APIs

Laravel有几个辅助函数来测试JSON APIs和它们的响应。这些辅助函数包括json, getJson, postJson, putJson, patchJson, deleteJson, 等等。

为了更好地理解测试,为 GET 用户的路由创建一个测试场景。当你启动Laravel应用程序时, Example Test已经被创建。在test/Feature/ExampleTest.php文件中, 用以下内容替换现有代码:


添加的代码在用户的路线上获取JSON数据,并检查状态代码是否为200。

一旦你添加了测试代码,在你的终端运行以下命令来运行测试:

./vendor/bin/phpunit

一旦测试完成,你会看到它运行了两个测试,都是成功的。

如何使用Laravel的内置客户端与外部API交互

测试JSON APIs

同样地,你可以检查不同类型的请求,并利用其他辅助方法进行更复杂的测试。

如何处理事件

Laravel在处理HTTP请求时提供了三个事件。

  • RequestSending, 这是在请求被发送之前。
  • ResponseReceived, 这是当收到一个响应。
  • ConnectionFailed, 这是在没有收到响应的时候。

所有这三个事件都包括$ 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监听器。用下面的代码替换该文件的代码:


状态代码的信息日志被输出到终端。

如何使用Laravel的内置客户端与外部API交互

显示状态代码的终端日志

小结

无论一个网站或网络应用是由一个组织或独立开发者制作的,API都是其成功的关键。然而,使用它们可能是困难的。

许多框架和库都承诺简化这一过程, 但Laravel因其专注于简单性和易用性而脱颖而出. 他们内置的客户端支持简单的API调用, 并发的API调用, API Macros, 基于JSON的API的辅助方法, 以及更多。

原文地址:https://www.wbolt.com/laravel-http.html

WordPress资讯

生成式人工智能之文案写作完整指南

2024-1-22 1:09:05

WordPress资讯

如何在网页浏览器中使用微软必应AI聊天机器人

2024-1-22 1:09:07

个人中心
今日签到
有新私信 私信列表
搜索