Я ищу способ обернуть API-интерфейсы вокруг функций по умолчанию в моих веб-приложениях, базах данных и CMS на основе PHP.
Я огляделся и нашел несколько каркасов "скелета". В дополнение к ответам в моем вопросе, Tonic, мне нравится структура REST, потому что она очень легкая.
Мне нравится, что 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
как я могу выразить такие действия, как в архитектуре URL RESTful?
Моим инстинктом было бы сделать GET-вызов для URL-адреса, например
/api/users/1/activate_login
и ожидайте возврата кода состояния.
Это отклоняется от идеи использования HTTP-глаголов. Как вы думаете?
3. Как вернуть сообщения об ошибках и коды
Большая часть красоты REST проистекает из использования стандартных HTTP-методов. При ошибке я выдаю заголовок с кодом состояния ошибки 3xx, 4xx или 5xx. Подробное описание ошибки, я могу использовать тело (правильно?). Все идет нормально. Но каким образом можно было бы передать собственный код ошибки, который более подробно описывает, что пошло не так (например, "не удалось подключиться к базе данных" или "неверный вход в базу данных" )? Если я поместил его в тело вместе с сообщением, я должен разобрать его потом. Есть стандартный заголовок для такого рода вещей?
4. Как сделать аутентификацию
- Как будет выглядеть аутентификация на основе API, основанная на принципах REST?
- Существуют ли сильные стороны против использования сеансов при аутентификации клиента REST, кроме того, что это вопиющее нарушение принципа REST?:) (только половина шуток здесь, аутентификация на основе сеанса будет хорошо работать с моей существующей инфраструктурой.)