对于同一个端点,通常返回不同的REST API响应对象



以下场景不遵循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或没有声明时,您可以将adminNotes设置为null。为了不返回该属性,您还可以使用@JsonInclude(Include.NON_NULL)(它适用于java,类似的东西可能在asp.net中可用(。因此,您不需要创建两个独立的实体或DTO。

最新更新