树结构的API

时间:2012-06-18 21:54:32

标签: api rest mongodb

我有一个网络服务,允许我的用户管理音乐节。每个节日都有一个位置,几个阶段,每个舞台上有几位艺术家。

所以我有4个实体:节日,地点,舞台和艺术家,可以表示为树形结构。我需要一个简单的CRUD。

在REST API术语中,显而易见的实现是使用POST,PUT,GET或DELETE请求4个URI(/节日,/位置,/阶段和/艺术家,可能后跟/ id)。

但是,根据我的需要,地点,舞台和艺术家如果没有与节日联系,就没有兴趣。那么为什么我需要为这些实体实现CRUD方法呢?只有节日实体的CRUD应该不够?

缺点:

  • 我的API的客户(网站,原生移动应用程序,其他服务......)无法读取我的节日的子实体。但是,正如我之前所说,如果没有他们所属的节日,我的服务的子实体就没兴趣了。因此,每个客户都必须参加节日,整个节日,以及每个子实体。

  • 即使他们只修改了艺术家的名字,这些客户也需要更新整个节日。这似乎是最糟糕的缺点,但毕竟,发送我的节日的完整json(最大几kb)而不是那个会更短的部分json是不是很糟糕?

优点:

  • 我需要编码,测试和维护4种方法而不是16种(如果有更多的实体要管理,则需要更多,假设它们保持这种简单的树结构)。

从技术上讲,我将使用可爱的组合node.js + mongodb这样做(除了它是mongodb的超级树友好方面让我考虑之外,它与情况没什么关系)。

您如何看待这种方法?你有没有看到这个想法的其他缺点?

1 个答案:

答案 0 :(得分:3)

使用较小的API的理由看起来很合理。但是,请确保您还在考虑并发数据访问的复杂性。

您打包到一个单元中的数据量越大,您发生更改冲突的可能性就越大。例如,如果您有两个用户修改相同的festival,一个更改阶段名称而另一个更改艺术家名称,则可能会出现竞争条件,其中一个更新会覆盖另一个更改。显然,即使你有一个更细粒度的API,你也可以拥有竞争条件,但是将所有内容合并到一个单元中会放大这个问题。