Restful 网络服务,部分读取权限
Restful web service, partial Read permission
我正在设计一个 restful 网络服务来创建和阅读应用程序生成的报告。创建报告时,可以添加一些隐私敏感信息,例如姓名、phone 号码、邮件等。创建报告后,它会通过相同的网络服务公开显示。
POST /report
{
"name":"test",
"email":"test@example.com",
"report_contents":....
}
returns 200 可以:
{
"id":1,
"report_contents":....
}
以及获取上述报告的方法:
获取/报告/{report_id}
我有另一个应用程序,管理员可以使用它来管理通过以前的网络服务创建的报告。在此应用程序中,我想显示隐私敏感信息。它使用以下 URL 来获取特定报告。
GET /report/{report_id}
哪个 returns 200 OK:
{
"id":1,
"name":"test",
"email":"test@example.com",
"report_contents":....
}
问题来了。这是完全相同的url。 possible/conventional 对两个调用使用相同的 Web 服务是不是 possible/conventional 甚至是一个好主意,但是有某种 CRUD 管理,根据用户的角色,部分信息不是 displayed/blocked?或者做一个单独的有限制的网络服务会更好吗?
如果您选择的语言支持它,您可以return一个动态对象。
这是一些伪代码。
if (loggedInUser != isAdmin(user))
return new { id: 1, contents: "..." }
else
return new { id: 1, name: "test", email: "test@test.com", contents: "..." }
就个人而言,我会有不同的领域来做不同的事情。为大家检索模型的一个区域。在另一个它就像一个管理区域。
在一个区域,你有
是的,对于同一资源的不同 表示 可以针对不同的请求在相同的 URL 中进行 return 编辑。这就是内容协商的工作原理。
如果你担心这个,我可以想到两个选择:
一个选项是包含一个查询参数以明确选择视图,并且可以控制每个视图的访问权限。例如。
/report/{report_id}?view=full
/report/{report_id}?view=restricted
或者你也可以考虑两个 sub-resources,一个叫 /report/{report_id}/full
,一个叫 /report/{report_id}/restricted
,然后你可以 return 一个 40x 代码,当用户不没有正确的许可,带有 Location
header 作为他们可以查看的位置的提示。
我正在设计一个 restful 网络服务来创建和阅读应用程序生成的报告。创建报告时,可以添加一些隐私敏感信息,例如姓名、phone 号码、邮件等。创建报告后,它会通过相同的网络服务公开显示。
POST /report
{
"name":"test",
"email":"test@example.com",
"report_contents":....
}
returns 200 可以:
{
"id":1,
"report_contents":....
}
以及获取上述报告的方法: 获取/报告/{report_id}
我有另一个应用程序,管理员可以使用它来管理通过以前的网络服务创建的报告。在此应用程序中,我想显示隐私敏感信息。它使用以下 URL 来获取特定报告。
GET /report/{report_id}
哪个 returns 200 OK:
{
"id":1,
"name":"test",
"email":"test@example.com",
"report_contents":....
}
问题来了。这是完全相同的url。 possible/conventional 对两个调用使用相同的 Web 服务是不是 possible/conventional 甚至是一个好主意,但是有某种 CRUD 管理,根据用户的角色,部分信息不是 displayed/blocked?或者做一个单独的有限制的网络服务会更好吗?
如果您选择的语言支持它,您可以return一个动态对象。
这是一些伪代码。
if (loggedInUser != isAdmin(user))
return new { id: 1, contents: "..." }
else
return new { id: 1, name: "test", email: "test@test.com", contents: "..." }
就个人而言,我会有不同的领域来做不同的事情。为大家检索模型的一个区域。在另一个它就像一个管理区域。
在一个区域,你有
是的,对于同一资源的不同 表示 可以针对不同的请求在相同的 URL 中进行 return 编辑。这就是内容协商的工作原理。
如果你担心这个,我可以想到两个选择:
一个选项是包含一个查询参数以明确选择视图,并且可以控制每个视图的访问权限。例如。
/report/{report_id}?view=full
/report/{report_id}?view=restricted
或者你也可以考虑两个 sub-resources,一个叫 /report/{report_id}/full
,一个叫 /report/{report_id}/restricted
,然后你可以 return 一个 40x 代码,当用户不没有正确的许可,带有 Location
header 作为他们可以查看的位置的提示。