rest - 有条件地为同一端点返回不同的 REST API 响应对象

标签 rest asp.net-core-webapi api-design

以下场景不遵循 RESTful 标准,并且很想知道如何最好地构建我的 API 以实现相同的目标。
对于针对资源的给定 GET 请求,例如GET /api/person/1 ,如果原则包含声明,我想返回其他属性。
例如。

GET /api/person/1 (Without IsAdmin claim)
{
  name: "Buck Rogers",
  dateOfBirth: 2000-01-01T00:00:00.000
}
GET /api/person/1 (With IsAdmin claim)
{
  name: "Buck Rogers",
  dateOfBirth: 2000-01-01T00:00:00.000,
  adminNote: "Something private"
}
所以我有条件地为同一个资源请求返回两个不同的 DTO,这是不允许的。
我怎样才能以 RESTful 方式实现这一目标?
更新:
有人建议我可以定义 adminNote属性并根据条件将其设为 NULL。我将如何处理可能有多个条件来确定包含哪些属性的情况?例如。
GET /api/person/1 (With IsModerator claim)
{
  name: "Buck Rogers",
  dateOfBirth: 2000-01-01T00:00:00.000,
  moderatorNote: "Something else private"
}
我很想避免添加在特定情况下永远不会为空的额外属性。

最佳答案

您可以使用所有三个字段创建一个 Person 资源,当 IsAdmin 为 false 或没有 claim 时,您可以将 adminNotes 设置为 null。并且要不返回该属性,您可以使用 @JsonInclude(Include.NON_NULL) (它对于java,类似这样的东西可能在asp.net中可用)。所以你不需要创建两个单独的实体或DTO。

关于rest - 有条件地为同一端点返回不同的 REST API 响应对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63157464/

相关文章:

c# - 同一实体的多个 Dto

rest - 什么是使用逻辑操作进行查询的 RESTful 方式?

java - 在 post 请求中作为 JSON 字符串传递的 FormDataParam 对象未正确反序列化

java - 如何从 JAVA 将 JSON 文件发送到 Splunk Enterprise?

php - Laravel API 与谷歌分析

Javascript 提取处理 json 和 blob

java - 如何从 RESTful 服务器获取 JSON 内容到 Android 客户端?

http - Postman 400 Web Api 错误请求

c# - 无法将类型 'Microsoft.Azure.Documents.Document' 隐式转换为 'System.Web.Http.IHttpActionResult' 。

java - 我应该在接口(interface)中为开发人员方便声明方法吗?