Laravel Tutorials

Using withoutWrapping to flatten API responses

Published Updated
Using withoutWrapping to flatten API responses image

Laravel's API resources wrap responses in a 'data' key by default. While useful for many scenarios, sometimes a flatter response structure is needed and you can disable resource wrapping like this.

<?php
 
namespace App\Providers;
 
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\ServiceProvider;
 
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
JsonResource::withoutWrapping();
}
}

Here is an example of how this works when you have withoutWrapping:

<?php
 
namespace App\Http\Resources;
 
use Illuminate\Http\Resources\Json\JsonResource;
 
class ArticleResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'content' => $this->content,
'author' => new AuthorResource($this->whenLoaded('author')),
'metadata' => [
'views' => $this->views_count,
'likes' => $this->likes_count,
'published_at' => $this->published_at
]
];
}
}

Example response with wrapping disabled:

[
{
"id": 1,
"title": "Laravel Tips",
"content": "Article content here",
"author": {
"id": 1,
"name": "John Doe",
"email": "john@example.com"
},
"metadata": {
"views": 150,
"likes": 42,
"published_at": "2024-03-15T10:00:00Z"
}
}
]

This implementation provides a cleaner API structure while maintaining the flexibility to customize response formats based on your application's needs.

Resource wrapping can be disabled globally while still maintaining granular control over your API's response structure, resulting in more intuitive and easier-to-consume endpoints.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
Laravel Image Responses: Serve Resized Images From Routes image

Laravel Image Responses: Serve Resized Images From Routes

Read article
Pause All Laravel Queues During a Deploy image

Pause All Laravel Queues During a Deploy

Read article
Laravel Terminal UI for the artisan dev Command image

Laravel Terminal UI for the artisan dev Command

Read article
Pause All Queues and a New artisan dev UI in Laravel 13.25 image

Pause All Queues and a New artisan dev UI in Laravel 13.25

Read article
Laravel monitoring that doesn't bill you by your traffic image

Laravel monitoring that doesn't bill you by your traffic

Read article
Mock PHP Classes in Tests With the Double Library image

Mock PHP Classes in Tests With the Double Library

Read article