如何使用Express.js为restful API构建代码?

时间:2014-01-17 08:44:13

标签: node.js architecture express go sails.js

最近我一直在使用Sails.js构建REST API我确定了我的应用程序所需的资源,我观察到的(IMO)是大多数框架(构建在Express之上)是在操作单个资源方面非常有效。

另外,我发现在大多数请求中,我需要操作的不仅仅是资源。例如,假设我们有以下结构和资源之间的链接:

Users -- user's metadata
      `- Books -- book metadata
               `- author

      `- Gallery -- Images -- image metadata
                 `- Videos -- video metadata

以上资源包括:UsersBooksGalleryImagesVideos。每个资源只存储它的子资源的id。 几乎在所有情况下我遇到的问题是当我插入一个新的子资源时。插入一本书后,我会找到它的所有者并添加对本书的参考。

上传图片时情况变得更糟。在这种情况下,在创建图像之后,通过了解上传图像的用户,我创建了一个图库,在图库中推送图像参考并将图库的ID分配给该用户。

这里的问题是我需要从用户控制器,或图像控制器或任何控制器,并操纵所有资源。像这样,代码重复变得更高,事情变得混杂和丑陋(例如从Images控制器或Gallery控制器调用Users模型)。

当然,最简单的方法是摆脱Gallery subResource并将视频和照片添加到用户手中。但这只是一个例子。

所以我想构建我的应用程序,通过这4个独立的模块(用户,图库......)来提供他们的API(即使它是基本的,即CRUD)。然后将路由请求分派给适当的控制器/处理程序,它将与我的模块交互并操纵它们。此外,当请求意味着单个资源时,我想自动调度到模块的处理程序(快捷方式控制器/处理程序)。

这是扩展REST API的一个好模式(虽然这与REST无关,但是有数据操作)?

如果是这样,是否有可用于创建模块的库甚至Express?我使用mongoDb和mongoosejs作为模型。

你能推荐我一个应用程序的文件结构吗?

我还在golang标记了这个问题,因为我有兴趣发现是否有适合我需求的框架(可能是beego,martini或goweb)。

我不打算提出一个意见问题,但我更希望有人已经有了这方面的经验而且我已经厌倦了谷歌搜索解决方案,我得到的所有结果都是如何建立一个基本的rest api with我不知道什么框架,并没有真正解决获得繁重的应用程序生产准备的架构/可扩展性。

感谢。

1 个答案:

答案 0 :(得分:1)

我自己是sails.js的新手,据我所知,你似乎在寻找联想模型。

它们尚未完全实施,但您仍然可以将它们与风帆 v0.10.0

一起使用

我认为,当你的项目准备好生产时,协会就会完全实现。

您可以在此处查看:https://github.com/balderdashy/sails/issues/124

这意味着你说的是这样的东西

  • 视频所属图库1

  • 图片所属视频9

  • 图库有很多视频,有很多图片

你实际上并没有写那个:)这就是你想到它的方式。

好运();