我正在寻找一种将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
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
我的问题是关于第二个PUT操作的语义,这看起来有点奇怪。它实际上是在所有beta版本上运行,而不是与alpha存在现有关系的beta的子集,如GET / HEAD / DELETE中所示......有更好的方法来表达此PUT操作?我是不是错了?
答案 0 :(得分:0)
我最终选择了两部分电话,首先检索所需的测试版集合:
GET /alphas/{alpha_id}/betas?attribute={value}
...然后将beta_id
的列表发布到:
POST /alphas/{alpha_id}/betas