2013-02-15 91 views
0

我有两个资源,名为“project”和“tag”。添加新项目时,数据通过POST传输,并传递到project.create(req,res)。这将项目保存在mongodb数据库中,并成功返回res.send(200);在另一个休息功能中调用休息功能

我想项目和标签有许多一对多的关系,让我可以很容易地列出所有标签,列表项目标签,并列出标签项目。

存储这些标签的最简单方法是在project.create函数中找到+插入这些标签,然后将其数组的ID保存在数组project.tags中。但是,我觉得这是违反DRY ...我在tag.create(req,res)中有相同的标签find + upsert代码。

我怎样才能让这个当project.create被调用,调用tag.create?我也意识到,如果我创建了一些执行find + upsert的中间件,这会更好吗?

回答

1

免责声明:本答案涉及REST API的一般良好实践(不特别适用于MongoDB)。

了解实际REST API的一个重要事情是,某些资源可以是只读的(通常由读写资源中的MapReduce生成)。

让我们假设你有项目和关键字之间从概念上N-N关联。项目中修改此类链接的更自然的地方。所以你必须,例如:

  • GETPUTDELETE/project/stackOverflow(实物),
  • GET/keyword/QnA(虚拟对象又名查询)。
+0

这并不回答这个问题。我应该在处理POST到/ project的函数中创建关键字,还是应该在该函数内向/关键字发出POST请求? – 2013-02-17 23:11:32

+0

无论您是否使用幂等创建(使用PUT)或不使用(使用POST),这个想法都是一样的。我试图解释的想法是关键字将在*项目中创建。关键字URL将是只读的。 – 2013-02-18 08:15:01

+0

太棒了,这样做更有意义。非常感谢你! – 2013-02-18 21:15:37