扩展包推荐:为你的 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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
本帖已被设为精华帖!
高认可度评论:
什么是
HATEOAS
?或者说:
HATEOAS
?HATEOAS
有什么好处或作用?找个例子来比喻,就容易理解了:
举例解释
HATEOAS
比如有个
用户
的对象,或者说资源,定义是:而普通的
REST
,GET
后返回的信息是:而简单点的
HATEOAS
则返回是:好处是:
客户端,不需要再去问提供了接口的服务器端,就可以通过此
HATEOAS
返回的信息中知道一些额外的信息:rel
: 表示relationship
关系。此处的self
指的是就是对象Customer
自己本身。"rel":"customer"
href
:当前对象的完整的url
地址。由此可以看出:
如果后台接口支持,或者说实现了
HATEOAS
这套标准(规范),那么:调用接口的前端(移动端等),就可以像:
用户通过点击页面的
href
的链接地址,而跳转到其他网页,实现浏览网页的过程了。-> 让调用
REST
的api就可以实现,类似于用户浏览网页的从一个页面跳转到另外一个页面的过程了-> 而这种超链接方式的api用于告诉用户:该资源的只允许哪些操作(比如
GET
,POST
),以及不允许哪些操作(比如DELETE
)-> 从而达到方便用户更加清楚使用你的接口的目的
另外,再贴出来一个复杂点的
HATEOAS
的例子,仅供了解:转自:https://github.com/crifan/http_restful_api...
什么是
HATEOAS
?或者说:
HATEOAS
?HATEOAS
有什么好处或作用?找个例子来比喻,就容易理解了:
举例解释
HATEOAS
比如有个
用户
的对象,或者说资源,定义是:而普通的
REST
,GET
后返回的信息是:而简单点的
HATEOAS
则返回是:好处是:
客户端,不需要再去问提供了接口的服务器端,就可以通过此
HATEOAS
返回的信息中知道一些额外的信息:rel
: 表示relationship
关系。此处的self
指的是就是对象Customer
自己本身。"rel":"customer"
href
:当前对象的完整的url
地址。由此可以看出:
如果后台接口支持,或者说实现了
HATEOAS
这套标准(规范),那么:调用接口的前端(移动端等),就可以像:
用户通过点击页面的
href
的链接地址,而跳转到其他网页,实现浏览网页的过程了。-> 让调用
REST
的api就可以实现,类似于用户浏览网页的从一个页面跳转到另外一个页面的过程了-> 而这种超链接方式的api用于告诉用户:该资源的只允许哪些操作(比如
GET
,POST
),以及不允许哪些操作(比如DELETE
)-> 从而达到方便用户更加清楚使用你的接口的目的
另外,再贴出来一个复杂点的
HATEOAS
的例子,仅供了解:转自:https://github.com/crifan/http_restful_api...