什么';在RESTAPI上管理多对多关系的标准是什么?

什么';在RESTAPI上管理多对多关系的标准是什么?,rest,laravel-4,Rest,Laravel 4,我正在使用Laravel 4.2构建一个REST API,它处理(实际上有几个)多对多关系:Users和Accounts,即一个用户可以管理多个帐户,一个帐户可以由多个用户管理 因此,为了创建用户(首先发生这种情况),您应该: POST /users POST /users/{user_id}/accounts 要创建帐户并将其与以前创建的用户关联,您应该: POST /users POST /users/{user_id}/accounts 到目前为止还不错。现在,将以前创建的用户链接

我正在使用Laravel 4.2构建一个REST API,它处理(实际上有几个)多对多关系:
Users
Account
s,即一个用户可以管理多个帐户,一个帐户可以由多个用户管理

因此,为了创建用户(首先发生这种情况),您应该:

POST /users
POST /users/{user_id}/accounts
要创建帐户并将其与以前创建的用户关联,您应该:

POST /users
POST /users/{user_id}/accounts
到目前为止还不错。现在,将以前创建的用户链接/取消链接到以前创建的帐户的最佳(标准)方法是什么?在我看来,这必须是一个PUT/PATCH请求。到目前为止,我能想到的最好方法是
将一个带有关联ID的数组放入实体URL:

PUT /users/{user_id}
{ accounts: [1,2,3] }
这将提供链接和取消链接的功能。但这需要客户端事先知道其他实体ID是什么,出于安全原因,我不希望这样做。我还提出了:

PUT /users/{user_id}/accounts/add
{ id: 4 }
以及:


这是更强大的,但我真的不喜欢它,因为路线看起来有点过于复杂。我缺少更好的方法了吗?

REST中最简单的方法总是定义一个新资源。在这种情况下,您需要一个资源来维护这种关系。您需要DELETE方法来删除某些内容,还需要POST来创建某些内容

DELETE /users-accounts/user:{user_id}/account:{account_id}/
POST /users-accounts/ {user_id: 1, account_id: 2}
如果要对整个关系集合执行某些操作,则修补程序可能很有用:

PATCH /users-accounts {remove: {user_id: 1, account_id: 2}}
PATCH /users-accounts/ {add: {user_id: 1, account_id: 2}}
因此,您可以在一个请求中添加和删除多个关系。如果您不需要这种批量更新,那么第一种解决方案就足够了