Using Fluent to Work With HTTP Client Responses in Laravel
Published on by Paul Redmond
In Laravel 11.2.0, we got a fluent()
helper to conveniently convert array data into a Fluent instance. Now, starting in Laravel 11.35, we have a convenient method for transforming an HTTP client response into a fluent instance:
use Illuminate\Support\Facades\Http; $response = Http::get('https://jsonplaceholder.typicode.com/posts')->fluent(); $response->get('0.title'); // sunt aut facere...$response->collect()->pluck('title'); // ["sunt aut facere...", "qui est esse", ...]
Another neat feature is converting JSON data into specific types. Take this example where we can convert a string date into a Carbon
instance:
use Illuminate\Support\Facades\Http; $response = Http::get('https://api.chucknorris.io/jokes/random')->fluent(); $response->date('created_at');$response->date('updated_at'); /*Illuminate\Support\Carbon @1578231741 {#261 ▼ // routes/web.php:9 date: 2020-01-05 13:42:21.455187 UTC (+00:00)}*/
Fluent also supports other helpful types like boolean
, enum
, array of enum
, and more. One of my favorites is using familiar methods like only
and except
to retrieve specific data:
use Illuminate\Support\Facades\Http; $response = Http::get('https://api.chucknorris.io/jokes/random')->fluent(); $response->except('categories'),/*array:6 [▼ // routes/web.php:9 "created_at" => "2020-01-05 13:42:19.897976" "icon_url" => "https://api.chucknorris.io/img/avatar/chuck-norris.png" "id" => "KqoQdIJdSE2ezokPmHSvdw" "updated_at" => "2020-01-05 13:42:19.897976" "url" => "https://api.chucknorris.io/jokes/KqoQdIJdSE2ezokPmHSvdw" "value" => "One night Chuck Norris had Chili for dinner. The very next day the Big Bang happened."]*/ $response->only('id', 'url', 'value');
Learn More
I would recommend getting familiar with the Fluent class in the Laravel API docs. Fluent uses the InteractsWithData trait, which gives us a bunch of convenient methods for working with Fluent data.