我正在使用Laravel 4.2构建一个REST API,它处理(实际上是一些)多对多关系:Users
和Account
即一个用户可以管理多个帐户和一个帐户可由许多用户管理。
因此,为了创建用户(首先发生这种情况),您应该:
POST /users
要创建帐户并将其与之前创建的用户相关联,您应该:
POST /users/{user_id}/accounts
到目前为止一切顺利。现在,将先前创建的用户链接/取消链接到先前创建的帐户的最佳(标准?)方式是什么?从我的角度来看,这必须是PUT / PATCH请求。到目前为止,我能想到的最好的是PUT
一个数组,其中包含与实体URL相关联的ID:
PUT /users/{user_id}
{ accounts: [1,2,3] }
这将提供链接和取消链接的功能。但它需要客户端以前知道其他实体ID是什么,并且出于安全原因我不希望这样。我也提出了:
PUT /users/{user_id}/accounts/add
{ id: 4 }
和
PUT /users/{user_id}/accounts/remove
{ id: 3 }
这更强大,但我不喜欢它,因为路线看起来有点复杂。我错过了一个更好的方法吗?
答案 0 :(得分:3)
REST中最简单的方法是始终定义新资源。在这种情况下,您需要一种维护这种关系的资源。您需要使用DELETE方法删除某些内容,并且需要POST来创建内容。
DELETE /users-accounts/user:{user_id}/account:{account_id}/
POST /users-accounts/ {user_id: 1, account_id: 2}
如果您想对整个关系集合做一些事情,PATCH可能会很好:
PATCH /users-accounts {remove: {user_id: 1, account_id: 2}}
PATCH /users-accounts/ {add: {user_id: 1, account_id: 2}}
因此,您可以在单个请求中添加和删除多个关系。如果您不需要这种批量更新,那么第一个解决方案就足够了。