Laravel HATEOAS 是由 Günther Debrauwer 开发的包,它使用 HATEOAS 链接公开 REST API 的授权逻辑。
HATEOAS 允许您公开 REST API 的授权逻辑。这个包可以让您轻松地将 HATEOAS 链接添加到 Laravel API 资源中。
该包定义了一个 artisan 命令,用于创建新的 HATEOAS 类,其中包含用于生成链接 JSON 响应的方法
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]); }}
然后,在您的 Laravel 资源类中,可以使用这个包的 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(), ]; }}
最后,上述示例的结果可能类似于以下 JSON 响应
{ "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" } ] } ]}
如果您不熟悉 HATEOAS,它代表“超媒体即应用状态引擎”。您可以从 HATEOAS – 维基百科 页面上获得关于 HATEOAS 的良好概述。
您可以在 GitHub 上了解更多关于这个包的信息,获取完整的安装说明,并查看源代码,地址是 gdebrauwer/laravel-hateoas。