Understanding REST: Verbs, error codes, and authentication

Я ищу способ обернуть API-интерфейсы вокруг функций по умолчанию в моих веб-приложениях на базе PHP, базах данных и CMS.

Я посмотрел вокруг и нашел несколькоскелет» рамки. В дополнение к ответам на мой вопрос, естьтонизирующий, REST Framework мне нравится, потому что он очень легкий.

Мне нравится REST лучше всего за его простоту, и я хотел бы создать архитектуру API на его основе. Я'Я пытаюсь разобраться в основных принципах и еще не полностью понял это. Поэтому ряд вопросов.

1. Я правильно понимаю?

Скажи, у меня есть ресурс "пользователей», Я мог бы установить несколько URI, например, так:

/api/users     when called with GET, lists users
/api/users     when called with POST, creates user record
/api/users/1   when called with GET, shows user record
               when called with PUT, updates user record
               when called with DELETE, deletes user record

это правильное представление архитектуры RESTful до сих пор?

2. Мне нужно больше глаголов

Создать, обновить и удалить может быть достаточно в теории, но на практике мне понадобится гораздо больше глаголов. Я понимаю, что это то, чтомог быть встроенным в запрос на обновление, но это конкретные действия, которые могут иметь конкретные коды возврата, и я бы не сталНе хочу бросать их всех в одно действие.

Вот некоторые примеры, которые приходят на ум в пользовательском примере:

activate_login
deactivate_login
change_password
add_credit

Как бы я выразил действия, такие как в архитектуре RESTful URL?

Мой инстинкт должен был бы сделать вызов GET к URL, как

/api/users/1/activate_login 

и ожидать код состояния обратно.

Это отличается от идеи использования HTTP-глаголов. Как вы думаете?

3. Как вернуть сообщения об ошибках и коды

Большая часть REST 'Красота s основана на использовании стандартных методов HTTP. При ошибке я выдаю заголовок с кодом ошибки 3xx, 4xx или 5xx. Для подробного описания ошибки я могу использовать тело (правильно?). Все идет нормально. Но какой будет способ передачисобственный код ошибки это более подробно в описании того, что пошло не так (например, "не удалось подключиться к базе данных, или же "неверный логин базы данных)? Если я добавлю его в тело вместе с сообщением, мне придется потом разобрать его. Есть ли стандартный заголовок для такого рода вещей?

4. Как сделать аутентификацию

Как будет выглядеть аутентификация на основе ключа API в соответствии с принципами REST?Есть ли сильные стороны против использования сессий при аутентификации клиента REST, кроме того, чтоЯвляется ли вопиющее нарушение принципа REST? :) (шутка здесь только наполовину, аутентификация на основе сеанса хорошо подойдет для моей существующей инфраструктуры.)

Ответы на вопрос(10)

Ваш ответ на вопрос