json - JSON API 资源是否可以具有作为关系简写的属性?
问题描述
我有一个用于检索用户的 JSON API 端点。该资源还将用于获取用户的权限,用于在我们的前端应用程序中显示或隐藏特定元素。
资源如下所示:
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json
{
"jsonapi": {
"version": "1.0"
},
"meta": {
"content-type": "application/vnd.api+json"
},
"links": {
"self": "/users/some-uuid"
},
"data": {
"type": "users",
"id": "some-uuid",
"attributes": {
"email": "some-email@example.com",
"permissions": [
"view-all-users",
"view-all-shifts"
]
},
"relationships": {
"roles": {
"data": [
{
"type": "role",
"id": "some-role-uuid"
}
]
}
}
}
}
权限属性保存用户拥有的权限的 slug。
如果此属性不存在,则前端应用程序必须包含资源roles
并roles.permissions
能够获得用户的权限。该响应如下所示:
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json
{
"jsonapi": {
"version": "1.0"
},
"meta": {
"content-type": "application/vnd.api+json"
},
"links": {
"self": "/users/some-uuid"
},
"data": {
"type": "users",
"id": "some-uuid",
"attributes": {
"email": "some-email@example.com",
"permissions": [
"view-all-posts",
"edit-all-posts"
]
},
"relationships": {
"roles": {
"data": [
{
"type": "role",
"id": "some-role-uuid"
}
]
}
},
"included": [
{
"type": "roles",
"id": "some-role-uuid",
"attributes": {
"name": "Editor"
},
"relationships": {
"permissions": {
"data": [
{
"type": "permission",
"id": "some-permission-uuid"
},
{
"type": "permission",
"id": "some-permission-uuid-2"
}
]
}
}
},
{
"type": "permissions",
"id": "some-permission-uuid",
"attributes": {
"slug": "view-all-posts"
}
},
{
"type": "permissions",
"id": "some-permission-uuid",
"attributes": {
"slug": "edit-all-posts"
}
}
]
}
}
在这种情况下,前端必须进行大量处理才能获得权限 slug。我的问题是:像上面的例子那样在用户资源上有一个速记属性是不是很糟糕permissions
,或者前端应该总是通过关系来获取信息?
注意:将来我们将有一个管理界面,用户可以在其中管理用户、角色和权限。这就是角色和权限可作为单独实体使用的原因。
解决方案
客户端应用程序可以轻松地将角色的所有权限合并到一个键/数组中,然后从那里开始工作。通过这种方式,您将保持 JSON API 的原则,并让客户端应用程序可以自由地使用他们喜欢的权限。
推荐阅读
- node.js - 响应 Express 服务器的 Axios POST 请求返回 404
- c# - 为什么相机不能在 Xamarin WebView 上工作?
- python - 安全有效地替换文件的最佳方法?
- swift - 使用“clip_distance”的 SceneKit 金属着色器
- laravel - Laravel:构建控制器时合同文件不可实例化
- java - 我可以减少代码中的 pdfbox 内存使用还是应该扩展 Java 堆空间
- flutter - 使列在颤动中可滚动
- python - 如何在python的嵌套循环中运行字符串数组
- javascript - 在 Rails 6 中的 DB 中保存模型后如何执行 JS?
- excel - 需要压缩的扩展 SUMPRODUCT 公式