HTTP API:CRUD集合的许多关系

时间:2013-01-03 17:37:15

标签: api http rest many-to-many

我正在寻找一种将CRUD操作应用于关系集合的约定(每个关系都没有元数据)。

在下面的场景中,我已经对'alphas'和'beta'进行了基本的CRUD操作。每个PUT / GET / HEAD / DELETE对中的第一个包含特定“alphas”和“beta”之间关系的相当简单的CRUD。我想扩展这种模式,以最少的聊天来管理大量的关系。

  • PUT /alphas/{alpha_id}/betas/{beta_id}

    在alpha和beta之间创建关系

  • PUT /alphas/{alpha_id}/betas?attribute={value}

    使用任意属性值在alpha和所有 beta之间创建关系

  • GET /alphas/{alpha_id}/betas

    列出与alpha

  • 相关的beta对象集合
  • GET /alphas/{alpha_id}/betas?attribute={value}

    列出与alpha相关的beta对象集合,其中beta.attribute = value

  • HEAD /alphas/{alpha_id}/betas/{beta_id}

    检查alpha和beta之间的关系

  • HEAD /alphas/{alpha_id}/betas?attribute={value}

    检查具有任意属性 - 值对的alpha和beta之间的至少一个关系

  • DELETE /alphas/{alpha_id}/betas/{beta_id}

    删除alpha和beta之间的关系

  • DELETE /alphas/{alpha_id}/betas?attribute={value}

    使用任意attribute = value

  • 删除alpha和所有beta之间的所有关系

我的问题是关于第二个PUT操作的语义,这看起来有点奇怪。它实际上是在所有beta版本上运行,而不是与alpha存在现有关系的beta的子集,如GET / HEAD / DELETE中所示......有更好的方法来表达此PUT操作?我是不是错了?

1 个答案:

答案 0 :(得分:0)

我最终选择了两部分电话,首先检索所需的测试版集合:

GET /alphas/{alpha_id}/betas?attribute={value}

...然后将beta_id的列表发布到:

POST /alphas/{alpha_id}/betas