通过REST API处理收集关系的最佳实践是什么?

这是我的第一个问题,所以在这里:)

我正在用Android开发消息应用程序,并使用由MongoDB数据库支持的Node.js Express后端。 我目前有两个集合模型: 用户消息的消息架构如下所示:

var messageSchema = mongoose.Schema({ source: {type: Schema.Types.ObjectId, ref: 'User', required: true}, destination: {type: Schema.Types.ObjectId, ref: 'User', required: true}, text: {type: String, required: true} }); 

我的问题是我是否应该通过API返回一个消息对象:

{source: <objectId>, destination: <ObjectId>, text: 'Hello World'}

或者如:

{source: {username:'David', password:'abcd'}, destination: {username:'Jeff', password: 'aaaa'}, text: 'Hello World'}

换句话说: 应该在服务器端填充/parsing引用的字段,还是应该由客户端决定?

谢谢,欢呼!

我的两分钱:

ObjectId是数据库的人工制品,而不是应用程序。 揭示这些给用户有时(并不总是)一种气味。 无论它是否对您和您的领域的知识。

至于什么是最好的,这取决于你的用例。 有没有用户只想知道ID的用例? 我想他们至less会想要一个或另一个。 如果是这样的话,我会实现两个资源,一个用于获取源代码和一个用于获取目的地。

如果用户总是希望同时拥有这两者,或者希望同时拥有大部分时间,则可以返回两者,或者再次添加提供此function的其他资源。

如果你们两个都回来了,你们会过滤一下吗? 某种types的标识符,分页还是只能返回数据库中的所有内容?