2

我正在使用 mongodb、node.js 和backbone.js 来构建一个应用程序,作为我的学习体验。我很想知道从 REST API 获取相关对象的最佳实践是什么。

假设我们有“post”对象和“user”对象,posts 具有将它们链接到用户的“userId”属性。

你应该:

  1. 在客户端获取一个 post 对象。检查帖子的“userId”属性,然后单独获取该用户。就服务器端代码而言,这似乎既好又简单,但如果事情变得更加复杂,最终可能会发出大量请求。
  2. 获取一个帖子对象,让服务器“加入”并在同一个请求中为您提供相关的用户对象。

有没有人有一些经验可以分享?

谢谢

4

2 回答 2

2

如果没有特定的 UI 故事,很难回答这个问题,但根据您提供的内容,我会说 #1 更接近我将采用的方法。但是,不要“检查”用户 ID 的帖子,而是向用户提供链接,rel=user然后只需点击该链接即可获取您的用户资源。我更喜欢 HATEOAS 范例,其中这些资源是通过由服务器而不是客户端构建的显式链接来导航的。

这显然会导致更多的 XHR,但如果这是一个问题,那么我建议您的视图需要一个视图模型,它可以在没有连接的情况下为其提供服务。这是通过公开一个专门为客户服务的模型来完成的,而无需让客户负责构建它需要的数据。h,

麦克风

于 2012-08-22T03:26:21.037 回答
1

MongoDB 没有在服务器上“进行连接”的功能,因此相关问题可能更多是数据建模问题,以及链接或嵌入相关用户数据是否更有意义。

Fetch a post object on the client side. Inspect the "userId" property
of the post and then separately fetch that user. This seems to be
nice and simple in terms of server-side code, but could end up making
lots of requests if things get complicated further down the line.

最接近此选项的是获取帖子,然后使用$inoperator查询帖子中提到的用户 ID 的相关信息。考虑到大量用户 ID,这可能会导致性能下降,因为服务器仍在执行查询以查找索引中的每个用户 ID。

另一种要考虑的常见方法是混合选项:

  • 在帖子中嵌入一些最小的用户数据,例如用户 ID(对另一个集合中的用户数据的数据库引用)和一些详细信息,例如用户名。

  • 根据需要在 AJAX 请求中查找其他详细信息(例如,将鼠标悬停在用户名上)。

更好的方法实际上取决于您的用例以及您希望在应用程序的页面上显示的信息。

于 2012-08-22T07:25:13.387 回答