Laravel Packages

Laravel HATEOAS Package

Published
Laravel HATEOAS Package image

Laravel HATEOAS is a package by Günther Debrauwer which exposes the authorization logic of your REST API using HATEOAS links.

HATEOAS allows you to expose the authorization logic of your REST API. This package makes it easy to add HATEOAS links to your Laravel API resources.

The package defines an artisan command for creating a new HATEOAS class, which contains methods that will generate links JSON responses:

class MessageHateoas
{
use CreatesLinks;
 
/**
* Get the HATEOAS link to view the message.
*
* @param \App\Message $message
*
* @return null|\GDebrauwer\Hateoas\Link
*/
public function self(Message $message)
{
if (! auth()->user()->can('view', $message)) {
return;
}
 
return $this->link('message.show', ['message' => $message]);
}
 
/**
* Get the HATEOAS link to delete the message.
*
* @param \App\Message $message
*
* @return null|\GDebrauwer\Hateoas\Link
*/
public function delete(Message $message)
{
if (! auth()->user()->can('delete', $message)) {
return $this->link('message.archive', ['message' => $message]);
}
 
return $this->link('message.destroy', ['message' => $message]);
}
}

Then in your Laravel resources class, you can include the links using this package’s HasLinks trait:

class MessageResource extends JsonResource
{
use HasLinks;
 
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
*
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'text' => $this->text,
'_links' => $this->links(),
];
}
}

Finally, the result of the above example might look like the following JSON response:

{
"data": [
{
"id": 1,
"text": "Hello world!",
"_links": [
{
"rel": "self",
"type": "GET",
"href": "http://localhost/message/1"
},
{
"rel": "delete",
"type": "DELETE",
"href": "http://localhost/message/1"
}
]
}
]
}

If you are not familiar with HATEOAS, it stands for Hypermedia As The Engine of Application State. You can get a pretty good overview of HATEOAS from the HATEOAS – Wikipedia page.

You can learn more about this package, get full installation instructions, and view the source code on GitHub at gdebrauwer/laravel-hateoas.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
WhenMounted and BigInt Props in Inertia.js v3.8 image

WhenMounted and BigInt Props in Inertia.js v3.8

Read article
Postcodes for Laravel: GB Postcode Lookup and Geography Data image

Postcodes for Laravel: GB Postcode Lookup and Geography Data

Read article
Laravel 14 Adds a defaults() Method to Eloquent Models image

Laravel 14 Adds a defaults() Method to Eloquent Models

Read article
Laravel AI SDK and Laravel MCP Security Fixes: Update Now image

Laravel AI SDK and Laravel MCP Security Fixes: Update Now

Read article
Mailbox for Laravel: Preview and Test Rendered Email image

Mailbox for Laravel: Preview and Test Rendered Email

Read article
Count Worker Crashes as Job Exceptions in Laravel 13.34 image

Count Worker Crashes as Job Exceptions in Laravel 13.34

Read article