比方说,我们有一个包含服务器上用户列表的实体,我们希望将其公开为休息。什么是正确的方法来做到这一点?在REST中处理添加/删除多对多关系的正确方法是什么?
我的第一个猜测是这样的:
/entity/1/user/5
我们可以用PUT更新和删除删除?
这是正确的吗?我去了维基百科,在那里谈论休息,他们的观点是,一切都只有1层深。所以也许他们希望你使用PUT/POST并给出整个JSON图并且一次更新整个事物?
比方说,我们有一个包含服务器上用户列表的实体,我们希望将其公开为休息。什么是正确的方法来做到这一点?在REST中处理添加/删除多对多关系的正确方法是什么?
我的第一个猜测是这样的:
/entity/1/user/5
我们可以用PUT更新和删除删除?
这是正确的吗?我去了维基百科,在那里谈论休息,他们的观点是,一切都只有1层深。所以也许他们希望你使用PUT/POST并给出整个JSON图并且一次更新整个事物?
你的例子是一个完全有效的方法。 然而,在许多情况下,User
可能仅存在于entity
的上下文之外。我倾向于认定孤立的资源,如:
/entity/1
/user/5
要查看有关一个实体的用户,我会用:
/entity/1/users
添加用户可以通过发布用户完成,
POST /entity/1/users
<User>
...
</User>
删除用户将
DELETE /User/5
更新或创建用户可以用PUT
删除用户之间的关联来实现和实体需要一点点创造力。你可以做
DELETE /Entity/1/User/5
如你所说,或者类似的东西
DELETE /Entity/1/UserLink?UserId=5
或只是
DELETE /Entity/1/Users?UserId=5
这现实是不是你的API的用户你的URI看起来很重要。为自己的理智保持一致是件好事,选择容易派发到服务器框架的方案是很好的选择,但这不是你的URI的样子,而是你对他们做的事情,这很重要。
我使用你的方法为父/子实体,但对于多对多我在我的JSON对象中使用一个数组表示该实体。
因此,使用你的例子:
GET /entity/1
将返回一个实体对象是这样的:
{"entityID":1,"name":"whatever","users":[1,2,3,4,5]}
PUT将通过在此同一个对象,并同时更新实体和用户。然后获取特定用户信息:
GET /users/3
在用户/ 3上使用PUT会更新用户。 PUT on/entity/1会将用户连接到实体。不幸的是,关于如何对这类事物建模的信息并不多。
你是什么意思由entitiy,这是其余api >> https://graph.facebook.com/19292868552 – XMen 2010-12-23 18:43:38
@Rahul Mehta:实体像在一个商业对象,如“酒店”,“俱乐部”, “问题”等 – egervari 2010-12-23 18:44:25
你可以尝试类似OData http://www.odata.org/developers/protocols/json-format#RepresentingCollectionsOfEntries – jfs 2010-12-23 20:43:48