Хорошая структура RESTful URI для проверки ответа

Я создаю игру, в которой пользователи могут отправлять ответы на вопросы. Я не хочу просто ПОЛУЧАТЬ ответы по понятным причинам.

Каким будет хороший RESTful URI для проверки правильности ответа пользователя?

До сих пор я успешно ПОЛУЧАЮ данные ресурсов из таких URI, как /games, /games/123/levels и /games/123/levels/easy/345.

Будет ли по-прежнему считаться RESTful наличие службы checkAnswer, расположенной по адресу /games/123/levels/east/345/checkAnswer, даже если это глагол, а не существительное?

Я знаю, что REST - это просто концепция, но я хотел бы знать мнение людей.

Спасибо


person Alex B    schedule 08.05.2014    source источник
comment
Мне это не кажется RESTful. Я бы использовал для этого запрос PUT к /games/123/levels/east/345/answer и не принимал запрос GET к тому же URL-адресу.   -  person Chen Pang    schedule 08.05.2014
comment
Но использование PUT должно быть зарезервировано для обновления ресурса, в данном случае ответа. Я просто хочу получить его значение и сравнить его с представленным значением. Для меня это серая зона.   -  person Alex B    schedule 08.05.2014
comment
Если сам ответ представляет собой простую строку, то наверняка запрос GET к /games/123/levels/easy/345/<the answer> вернет ответ 200 (или что-то в диапазоне 2xx), если <the answer> правильный, и 404, если это неправильный ответ? Или вы не считаете это уместным?   -  person Damien_The_Unbeliever    schedule 08.05.2014
comment
Я медленно изучаю REST, и я хотел бы убедиться, что я использую его правильно, или убедиться, что я не иду против принципов. Я готов доверять вашему решению, но поскольку оно не возвращает ресурс, я не подумал об этом автоматически.   -  person Alex B    schedule 08.05.2014
comment
@AlexB, если вы изучаете REST, я настоятельно рекомендую эту электронную книгу за 5 долларов: amazon.com/The-REST-API-Design-Handbook-ebook/dp/B00890OBFI. Помогает изложить кучу основ, которые вы пытаетесь понять.   -  person Eric Caron    schedule 08.05.2014
comment
Успешный GET всегда должен возвращать ресурс. Я знаю, что вы не связаны никакими правилами, но успешный возврат GET ничего не имеет смысла   -  person Tim    schedule 08.05.2014
comment
Спасибо, Эрик. Тим, это вернет логическое значение true или false, но не вернет ресурс. Возможно, добавление действия ?action=checkAnswer — хорошее решение?   -  person Alex B    schedule 08.05.2014


Ответы (1)


Если у вас есть маршрут к вопросам, я бы POST ответил на URL-адрес /questions/<question_id>/answers и, если ответ хороший, вернул бы код состояния 201 - Accepted и если это неверно, я бы вернул 422 - Unprocessable Entity или, возможно, код статуса 403 - Forbidden в зависимости от того, что вы считаете наиболее подходящим описание кода статуса.

Таким образом, в этом примере ID вопроса будет 213, а тело запроса POST может быть чем-то вроде {"answer": "B"}.

person arjabbar    schedule 17.10.2014