Seb*_*Seb 10 rest api-design restful-architecture
我目前正在处理一些基于权限返回不同类型模型的端点:
例如,我们的业务对象正在转换为类型为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);
}
Run Code Online (Sandbox Code Playgroud)
最初,这是为了每个人都可以检索客户的基本详细信息(姓名...),但只有管理员才能访问“敏感”信息(首选付款信息、帐单联系人)。
这使得我们的 API 更难理解,因为我们需要根据权限级别确定返回哪些字段......这很有效,但我担心随着我们的扩展(新角色、端点)它会变得时髦。
我们已经考虑引入新的端点,但它会在我们已经打包的 API 中添加一堆端点。
/api/v1/admin/clients/1234
vs
/api/v1/clients/1234
Run Code Online (Sandbox Code Playgroud)
我只是想知道处理这种情况的最佳做法是什么?
谢谢
我发现 REST api 根据谁访问资源返回不同的内容可能会变得令人困惑。当您接受更改时,这会变得更加复杂PUT。
我不认为这是一个一般性建议,因为不同的情况可能需要不同的解决方案,但在您的具体情况下,我认为拥有不同的资源更有意义。
在 API 中用多个点表示“一段数据”是可以的,但是,您可以做的另一件事是考虑以下内容:
/clients/1234 <- could contain all the data
everyone may see.
/clients/1234/billing <- contains only the
billing information
admins can see.
Run Code Online (Sandbox Code Playgroud)
我认为这也很好地体现了避免继承并使用组合的好处这一想法。你不需要 aModel和 an AdvancedModel。你需要两者Model和一个Billing模型。
| 归档时间: |
|
| 查看次数: |
2763 次 |
| 最近记录: |