Laravel 7 新功能 HTTP 客户端入门
Laravel 7 有一个新的 HTTP 客户端,它为流行的 Guzzle HTTP 客户端提供了最轻简的 API。 如果你错过了新闻,让我们来回顾一些基础知识。 你可以在 Laravel 7 HTTP 客户端文档 中找到所有需要知道的信息,但是让我们先粗略地看一下其中的一些特性。
Guzzle 是一个强大的 HTTP 客户端,但是当试图创建一个简单的 HTTP GET 或从 JSON API 获取数据时,80% 的用例看起来很复杂。
突出特点
浏览一下,这里是我最喜欢的 Laravel Http 客户端提供的功能:
- 可链式请求设置
- 易于访问 JSON 响应数据
- 不用模板设置就能发起一个简单的请求
- 重试失败的请求
- 围绕身份验证头 (basic, digest, bearer) 的方便方法
- 虚拟请求以及检查请求
对于更复杂的 HTTP 客户端工作,你可能得直接使用 Guzzle,但我认为 Laravel HTTP 拥有大多数项目所需的一切。
基本用法
使用 Laravel 的 HTTP 客户端,你可能会用到下面这些最基本的用法::
use Illuminate\Support\Facades\Http;
$response = Http::get('https://laravel.com');
// 获取响应体
$response->body();
$response = Http::get( 'https://api.github.com/users/paulredmond/gists' );
// 从 JSON 响应获取数组数据
$data = $response->json();
访问数据
有几种方法可以从 JSON 响应中访问数据: json()
和 ArrayAccess
方法:
// 通过 `json()` 访问响应数据
$data = $response->json();
$data['username'];
// 通过 Response 对象访问数据
Http::get( 'https://api.github.com/users/paulredmond/gists' )['username'];
// 返回响应对象然后直接访问
$response = Http::get('...');
$response['username'];
错误处理
有一件事情可能会使 Guzzle 变得令人迷惑和复杂,那就是不断地在 try/catch 块中包装调用,或者在每个项目上创建一个小型的抽象来处理这个问题。
Laravel 捕获了400
和500
响应,并提供了一些方法来确定在响应过程中是否发生了任何不好的事情:
$response = Http::get( 'https://api.github.com/users/paulredmond/gists' );
// 响应上的布尔值检验
$response->ok() : bool;
$response->clientError(): bool;
$response->successful() : bool;
$response->serverError() : bool;
$response->clientError() : bool;
超时
在阅读了 Laravel 处理客户端和服务器异常之后,我一开始并不清楚超时会导致异常。 默认的超时时间相当长; 但是,Laravel HTTP 允许你使用 timeout()
方法来定义超时时间(以秒为单位) :
$response = Http::timeout(5)
->get( 'https://ffdsafdsafdsafas.com' );
// Illuminate\Http\Client\ConnectionException:
// cURL error 28: Connection timed out after 5005 milliseconds
了解更多
你可以从 Laravel 7 HTTP 客户端文档 了解到大部分你所需要了解的。 我也建议你查看 Illuminate/Http 的类——它是一个相当简单、优雅的 API,使用起来很直观。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。