RESTful的操作方式

时间:2011-09-06 07:24:32

标签: rest

我想拥有RESTful接口,它不会破坏REST原则。这是更多的讨论问题,你将如何做到这一点,你认为什么是最好的解决方案。想象一下这个应用场景。

应用程序具有典型的用户和他们聚集的房间进行交互。每个HTTP请求都包含HTTP基本认证头,它带来用户与资源交互的信息。让我们想一下/ rooms URL下的房间资源。我希望有RESTful方法+ URI来处理用户创建空间时的操作(并且不加入他,只提供可以加入这个房间的数据),加入房间和左侧房间。我想到的是:

创建空间

POST /rooms --data {room data}

加入并离开房间,看起来像下面的代码,

PUT/DELETE /rooms/{roomId}/{userId}

正如您所看到的,我需要传递userId,它应该是来自HTTP标头的上下文信息,因此我不应该在URL中传递它。这里的问题是,在创建房间期间我让用户进入房间,但他们有“未加入”状态。所以在创建之后(到目前为止没有执行任何连接),实际上有IS / rooms / {roomId} / {userId}资源。知道怎么做得好吗?: - )

1 个答案:

答案 0 :(得分:2)

您的资源是 A 房间,所以首先您必须考虑:

POST /room

没有's'。响应将返回 Content-Location:/ room / {roomId} 标头,表明您有房间URI。

GET /rooms

列出所有房间。

然后,您可以考虑加入操作的资源URI:

/room/{roomId}/join/{joinId}

让用户加入特定房间:

POST /room/{roomId}/join --data <join userId="{userId}" />
Response header : **Content-Location : /room/{roomId}/join/{joinId}** 

让用户离开特定的房间:

DELETE /room/{roomId}/join/{joinId}

获取特定房间的“连接”列表:

GET /room/{roomId}/joins
Response content : 
<joins>
 <join id="888" userId="100" />
 <join id="889" userId="101" />
 <join id="890" userId="102" />
</joins>

对于特定用户:

GET /user/{userId} 
Response content : 
<user id="100" name="john" />

对于允许的用户:

POST /room/{roomId}/allowed 
--data 
<allowed>
 <user id="100">
 <user id="101">
 <user id="102">
 <user id="103">
</allowed>