RESTful способ работы - PullRequest
       7

RESTful способ работы

4 голосов
/ 06 сентября 2011

Я хочу иметь интерфейс RESTful, который не нарушает принципы REST.Это вопрос для обсуждения, как бы вы это сделали и что вы считаете лучшим решением.Представьте себе этот сценарий приложения.

В приложении есть типичные пользователи и комнаты, где они собираются для взаимодействия.Каждый HTTP-запрос включает заголовки базовой аутентификации HTTP, которые предоставляют информацию о том, какой пользователь взаимодействует с ресурсом.Давайте рассмотрим ресурс комнат под / комнаты URL.Я хочу, чтобы метод RESTful + URI позаботился о действиях, когда пользователь создает комнату (и НЕ присоединяется к нему, предоставляет только данные, которые могут присоединиться к этой комнате), присоединяется к комнате и покидает комнаты.Что пришло мне в голову:

Создать комнату

POST /rooms --data {room data}

Присоединиться и выйти из комнаты, может выглядеть как код ниже,

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

Как видите, мне нужнопередать userId, который должен быть контекстной информацией из заголовков HTTP, поэтому я не должен передавать его в URL, я думаю.Проблема в том, что при создании комнаты пользователи попадали в комнату, но у них было состояние "not_joined".Таким образом, после создания (пока соединение не выполнено), на самом деле существует ресурс IS / rooms / {roomId} / {userId}.Любая идея, как это сделать красиво?: -)

1 Ответ

2 голосов
/ 06 сентября 2011

Ваш ресурс - 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>
...