Laravel HATEOAS 包
发布时间 作者: Paul Redmond
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。