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

这篇具有很好参考价值的文章主要介绍了如何使用Laravel的HTTP客户端与外部API交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

Laravel HTTP客户端为你的API工作

Guzzle是一个简单的PHP的HTTP客户端。它为不同

use Illuminate\Support\Facades\Http;

return Http::get("https://reqres.in/api/users?page=2");

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

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

前提条件

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

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

如何发出请求

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

首先,导入创建应用程序时包含的HTTP包。在App/Http/Controllers/UserController.php文件中,添加以下代码,从文件开头的use语句开始,其余代码在index函数中。

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的HTTP客户端与外部API交互,后端编程技巧&教程,laravel,http,交互,php

使用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的HTTP客户端与外部API交互,后端编程技巧&教程,laravel,http,交互,php

并发请求

请求宏

请求宏在与常见的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的HTTP客户端与外部API交互,后端编程技巧&教程,laravel,http,交互,php

宏请求

如何对响应进行解码

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

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

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

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

如何使用Laravel的HTTP客户端与外部API交互,后端编程技巧&教程,laravel,http,交互,php

成功解码响应

如何测试JSON APIs

Laravel有几个辅助函数来测试JSON 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);

}

}

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

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

./vendor/bin/phpunit

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

如何使用Laravel的HTTP客户端与外部API交互,后端编程技巧&amp;教程,laravel,http,交互,php

测试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监听器。用下面的代码替换该文件的代码:

<?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)

{

}

}

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

如何使用Laravel的HTTP客户端与外部API交互,后端编程技巧&amp;教程,laravel,http,交互,php

显示状态代码的终端日志

小结

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

许多框架和库都承诺简化这一过程, 但Laravel因其专注于简单性和易用性而脱颖而出. 他们内置的客户端支持简单的API调用, 并发的API调用, API Macros, 基于JSON的API的辅助方法, 以及更多。文章来源地址https://www.toymoban.com/news/detail-811317.html

到了这里,关于如何使用Laravel的HTTP客户端与外部API交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用HTTP/2实现服务端主动推送消息给客户端

    77. 使用HTTP/2实现服务端主动推送消息给客户端 HTTP/2 协议的服务器主动推送机制是通过服务器在接收到客户端请求后,主动向客户端推送相关资源的方式来实现的。下面将详细解释如何在服务器端和客户端实现 HTTP/2 的服务器主动推送,并给出相应的代码示例。 客户端实现:

    2024年02月11日
    浏览(45)
  • 使用Go语言的HTTP客户端和服务器

    使用Go语言进行HTTP客户端和服务器开发是一种高效且强大的方式。Go语言的标准库提供了对HTTP协议的全面支持,使得创建HTTP客户端和服务器变得简单。 首先,让我们来看一下如何创建一个简单的HTTP服务器。在Go中,可以使用 net/http 包来创建HTTP服务器。以下是一个简单的示例

    2024年01月16日
    浏览(37)
  • 使用Http Interface客户端解析text/html类型请求

    前言 Spring6和Spring Boot3的正式发布也有一段时间了,最低支持的java版本也是直接跳到了17。而且最近java21也出来了,作为一个javaer,你不会还在坚守java8吧? Http Interface是Spring6新推出的一个声明式http客户端,写法有点像Retrofit。最近也是在一个新的项目里引入了Http Interface,但

    2024年02月07日
    浏览(49)
  • HTTP Header定制,客户端使用Request,服务器端使用Response

     在服务器端通过request.getHeaders()是无效的,只能使用response.getHeaders()。  

    2024年02月16日
    浏览(41)
  • 阿里云AliYun物联网平台使用-客户端API获取设备传感数据

            上一篇文章中,已经实现了虚拟数据上云,本文我们将进行上位机客户端的开发,即通过调用阿里云IOT物联网云平台的SDK,开发能获取传感器的遥感数据。         调用API需要用户的AccessKey Secret,这意味着客户端将取得主体账号的所有权限。为了防止恶意用户通过

    2024年02月16日
    浏览(41)
  • 使用Kafka客户端(kafka-clients)的Java API操作Kafka的Topic

    记录 :460 场景 :在Spring Boot微服务集成Kafka客户端kafka-clients-3.0.0操作Kafka的Topic的创建和删除。 版本 :JDK 1.8,Spring Boot 2.6.3,kafka_2.12-2.8.0,kafka-clients-3.0.0。 Kafka安装 :https://blog.csdn.net/zhangbeizhen18/article/details/129071395 1.微服务中 配置Kafka信息 1.1在pom.xml添加依赖 pom.xml文件: 解析

    2024年02月09日
    浏览(49)
  • 使用Kafka客户端(spring-kafka)的Java API操作Kafka的Topic

    记录 :458 场景 :在Spring Boot微服务集成Kafka客户端spring-kafka-2.8.2操作Kafka的Topic的创建和删除。 版本 :JDK 1.8,Spring Boot 2.6.3,kafka_2.12-2.8.0,spring-kafka-2.8.2。 Kafka安装 :https://blog.csdn.net/zhangbeizhen18/article/details/129071395 1.微服务中 配置Kafka信息 1.1在pom.xml添加依赖 pom.xml文件: 解析

    2024年02月09日
    浏览(31)
  • 使用idea如何生成webservice客户端

    需求阐述 在和外围系统对接的时候,对方只给了wsdl地址,记得之前了解到的webservice,可以用idea生成客户端代码。先记录生成的步骤 我的idea再右键要生成文件目录里面没有webservice选项,只能通过查找功能找到 generate Java Code From WSDL功能。 打开功能,我们需要填充3项内容:

    2024年02月14日
    浏览(28)
  • 【Spring Cloud】如何把Feign默认的HTTP客户端URLConnection更换成支持连接池的Apache HttpClient或OKHttp

    本次示例代码的文件结构如下图所示。 Feign 发送 HTTP 请求时,底层会使用到别的客户端。下面列出常用的 3 种 HTTP 客户端。 HTTP客户端 特点 URLConnection Feign 的默认实现,不支持连接池 Apache HttpClient 支持连接池 OKHttp 支持连接池 其中, URLConnection 是 Feign 默认使用的 HTTP 客户端

    2024年02月14日
    浏览(36)
  • RustDesk自建中转服务器如何自己编译 RustDesk客户端,将企业固定IP/域名写进客户端,客户端安装无需配置直接使用(三)

    Ubuntu20.04.4 LTS Docker Version: 20.10.12 RustDesk1.20 Git-2.39.0-64-bit visual studio 2022 VSCodeUserSetup-x64-1.74.1 RustDesk自建中转服务器如何自己编译 RustDesk客户端,将企业固定IP/域名写进客户端,客户端安装无需配置直接使 最近有粉丝反映,编译最后会提示key不匹配等问题,拉取普通开源版,别

    2024年02月05日
    浏览(112)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包