【发布时间】:2018-12-25 06:24:30
【问题描述】:
我目前正在处理几个根据权限返回不同类型模型的端点:
例如,我们的业务对象正在转换为Model 或AdvancedModel 类型的对象。
public class Model
{
public int Property1 {get; set;}
}
public class AdvancedModel : Model
{
public int Property2 {get; set;}
}
public IActionResult Get()
{
(...)
return User.IsAdmin
? Mapper.Map<AdvancedModel>(Client);
: Mapper.Map<Model>(Client);
}
最初,这是为了让每个人都可以检索客户的基本详细信息(姓名...),但只有管理员才能访问“敏感”信息(首选付款信息、帐单联系人)。
这使得我们的 API 更难理解,因为我们需要根据权限级别识别返回的字段...这很好用,但我担心随着我们的扩展(新角色、端点)它会变得很时髦.
我们考虑过引入新的端点,但它会在我们已经打包好的 API 中添加一些端点。
/api/v1/admin/clients/1234
vs
/api/v1/clients/1234
我只是想知道处理这种情况的最佳做法是什么?
谢谢
【问题讨论】:
-
没有什么可以阻止您在响应中返回用户特定的数据。如何在内部管理这些取决于您或您使用的框架。 IE。基于 Java/Spring(生态系统)的解决方案可能会提供某些资源和资源组装器类,这些类仅支持您公开用户实际也可以访问的属性。 IMO 不需要特定的 uri 设计。
标签: rest api-design restful-architecture