扩展包推荐:为你的 Laravel Restful API 添加 HATEOAS
Laravel HATEOAS是GüntherDebrauwer的一个软件包,它使用HATEOAS链接公开REST API的授权逻辑。
HATEOAS允许您公开REST API的授权逻辑。该软件包可以轻松地将HATEOAS链接添加到Laravel API资源中。
这个包定义了一个 artisan 命令,用于创建一个新的 HATEOAS 类,其中包含了生成链接JSON响应的方法:
class MessageHateoas
{
use CreatesLinks;
/**
* 获取 HATEOAS 链接用来查看消息。
*
* @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]);
}
/**
* 获取 HATEOADS 链接用来删除消息。
*
* @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;
/**
* 将数据源转化为数组.
*
* @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,它是Hypermedia As The Engine of Application State的缩写。您可以从HATEOAS - 维基百科页面获得HATEOAS的非常好的概述。
了解有关此软件包的更多信息,获取完整的安装说明,并在GitHub上查看源代码 gdebrauwer/laravel-hateoas.
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: