我想拥有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}资源。知道怎么做得好吗?: - )
答案 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>