0

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

在以下场景中,我已经对“alphas”和“betas”进行了基本的 CRUD 操作。每个 PUT/GET/HEAD/DELETE 对中的第一个包含相当简单的 CRUD,用于特定“alpha”和“beta”之间的关系。我想扩展这种模式来管理大量的关系集,并尽量减少喋喋不休。

  • 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}

    删除具有任意属性=值的 alpha 和所有 beta 之间的所有关系

我的问题是关于第二个 PUT 操作的语义,这对我来说有点奇怪。它实际上是在所有 beta 集上运行的,而不是与alpha存在关系的 beta 子集,如 GET/HEAD/DELETE 中所见......有没有更好的方法来表达这个 PUT 操作?我对这一切都错了吗?

4

1 回答 1

0

我最终确定了一个由两部分组成的电话,从检索一组所需的 beta 开始:

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

...然后将beta_ids 列表发布到:

POST /alphas/{alpha_id}/betas
于 2013-01-09T21:08:29.227 回答