Restful web服务,部分读取权限

Restful web服务,部分读取权限,rest,crud,Rest,Crud,我正在设计一个restful web服务来创建和读取应用程序生成的报告。创建报告时,可以添加一些隐私敏感信息,如姓名、电话号码、邮件等。创建报告后,可以通过相同的web服务公开其内容 POST /report { "name":"test", "email":"test@example.com", "report_contents":.... } 返回200 OK,带有: { "id":1, "report_contents":.... } 以及获取所述报告的方法: GET/repor

我正在设计一个restful web服务来创建和读取应用程序生成的报告。创建报告时,可以添加一些隐私敏感信息,如姓名、电话号码、邮件等。创建报告后,可以通过相同的web服务公开其内容

POST /report
{
"name":"test",
"email":"test@example.com",
"report_contents":....
}
返回200 OK,带有:

{
 "id":1,
 "report_contents":....
} 
以及获取所述报告的方法: GET/report/{report\u id}

我有另一个应用程序,管理员可以使用它管理通过以前的web服务创建的报告。在此应用程序中,我希望显示隐私敏感信息。它使用以下URL获取特定报告

GET /report/{report_id}
返回200 OK:

 {
 "id":1,
 "name":"test",
 "email":"test@example.com",
 "report_contents":....
 } 

现在问题来了。这是完全相同的url。对于两个呼叫使用相同的web服务是否可能/常规或甚至是一个好主意,但是否具有某种CRUD管理,其中根据用户的角色,部分信息不会显示/阻止?或者创建一个带有限制的单独web服务更好吗?

如果您选择的语言支持它,您可以返回一个动态对象

这里有一些伪代码

if (loggedInUser != isAdmin(user))
   return new { id: 1, contents: "..." }
else 
   return new { id: 1, name: "test", email: "test@test.com", contents: "..." }
就我个人而言,我会在不同的领域做不同的事情。为每个人检索模型的一个区域。另一方面,它就像一个管理区


在一个区域中,您有

如果您选择的语言支持它,您可以返回一个动态对象

这里有一些伪代码

if (loggedInUser != isAdmin(user))
   return new { id: 1, contents: "..." }
else 
   return new { id: 1, name: "test", email: "test@test.com", contents: "..." }
就我个人而言,我会在不同的领域做不同的事情。为每个人检索模型的一个区域。另一方面,它就像一个管理区


在一个区域中,您有

是的,对于不同的请求,相同资源的不同表示可以在相同的URL上返回。这就是内容协商的工作原理

如果你对此感到担忧,我可以想出两个选择:

一个选项是包含一个查询参数,以明确选择视图,并且可以控制每个视图的访问。例如

  • /report/{report\u id}?view=full
  • /report/{report\u id}?view=restricted

或您也可以考虑两个子资源,一个称为“代码>/Realth/{RePosixId}/Pult”,一个名为>/Realth/{RePosixId}/Limult,然后当用户没有正确的权限时,可以返回40X代码,用<代码>位置< /Cult>头来提示他们可以查看的地方。

< P>对于不同的请求,相同资源的不同表示可以在相同的URL上返回。这就是内容协商的工作原理

如果你对此感到担忧,我可以想出两个选择:

一个选项是包含一个查询参数,以明确选择视图,并且可以控制每个视图的访问。例如

  • /report/{report\u id}?view=full
  • /report/{report\u id}?view=restricted

或您也可以考虑两个子资源,一个称为“代码>/Realth/{RePosixId}/Pult”,一个名为<>代码> /{RePosixId}/Limult,然后当用户没有正确的权限时,可以返回一个40X代码,用<代码>位置头来提示他们可以查看的地方。我忘记提到的是,我将使用API密钥或Oauth2保护API。基于角色,我将返回任何允许他们看到的内容。在定义要返回的模型时,含糊不清不是一个问题吗?含糊不清在哪里?REST客户机必须能够处理接收不同的表示。您所说的非常有意义。我忘记提到的是,我将使用API密钥或Oauth2保护API。基于角色,我将返回任何允许他们看到的内容。在定义要返回的模型时,含糊不清不是一个问题吗?含糊不清在哪里?REST客户端必须能够处理接收不同的表示。