是否允许为其表示计算对象的属性?

时间:2016-12-07 12:48:18

标签: rest many-to-many data-representation

我面临以下情况:

我有一个Post对象,它通过多对多关系链接到Comment对象。 Post最多可以标记为Comment,标记为“顶部”。

我需要公开一个API,提供列出帖子的功能(以及显示帖子的详细视图,但这个没问题)。问题是,Post可能会有大量的Comment s,我不会看到自己显示这种表示形式:

[{
   title: "Lorem ipsum",
   ....
   comments: [{
          "author": "...",
          "comment": ".....",
          "top": false
         }, ... // repeat a few thousand times
   ]
},...
]

但是,我知道此API的大多数消费者以后都希望直接显示最高评论,所以我想要公开这种表示:

[{
   title: "Lorem ipsum",
   ....
   topComments: [{
          "author": "...",
          "comment": ".....",
         }, .... // repeat once more if needed
   ]
},...
]

这里我选择不显示所有可以通过/ posts / ID_OF_POST / comments访问的注释,但是我在“运行时”计算topComments属性(它不在代码中的原始对象中) ),并显示标记为顶部

的注释

是否允许使用业务逻辑进行计算并公开在所表示的对象中不存在的属性?如果以后我想添加一个新的numberOfComments计算属性,它还可以吗?

提前感谢您的回答

2 个答案:

答案 0 :(得分:1)

  

是否允许使用业务逻辑进行计算

当然是。

  

并公开一个在表示的对象中不存在的属性?

我不会返回不同的表示,而是使用不同的资源来获取热门评论的收集资源。

GET /posts/{postId}/top-comments

将以完整列表中的相同形式返回注释数组,但只会包含最高注释。

您还可以在原始集合上使用过滤器:

GET /posts/{postId}/comments?top=true

答案 1 :(得分:1)

是的,它被允许,它被命名为“瞬态”或“虚拟”属性。

使用Symfony Framework,您可以像this那样执行此操作。

希望这会有所帮助!!