Создание защищённого API заметок
Стартовый проект API объединяет работающий интерфейс учётной записи с эндпоинтами bearer-токенов без состояния. Токены имеют явные области доступа, срок действия, возможность отзыва и владельца. Заметки всегда ограничиваются этим владельцем.
Создание проекта
elang new notes-api --starter=api
cd notes-api
php elang serve
Зарегистрируйте и подтвердите учётную запись через локальный почтовый ящик разработки. Откройте страницу учётной записи и создайте токен после подтверждения пароля. Скопируйте значение, показываемое один раз, и храните его в закрытом доступе.
Области доступа для чтения и записи
Эндпоинты GET для коллекции и элемента требуют notes:read. POST, PUT и DELETE требуют notes:write. Токен только для чтения не может создавать или удалять записи. Сервер игнорирует переданные ID владельца и определяет принадлежность из аутентифицированного токена.
curl http://127.0.0.1:8000/api/notes \
-H 'Authorization: Bearer YOUR_TOKEN'
Замените YOUR_TOKEN в своём терминале. Не публикуйте настоящие токены в примерах или журналах.
Ожидаемые ответы
Успешное создание возвращает 201 и Location. Успешное удаление возвращает 204. Недопустимый токен возвращает 401, недостаточная область доступа — 403, а запись другого пользователя — 404. Некорректный JSON возвращает 400; недопустимые поля — 422; неподдерживаемые типы содержимого — 415.
API не использует браузерные cookie для аутентификации. Браузерные формы учётной записи отдельно используют сессию и защиту CSRF.
Проверка границ доступа
Создайте токен только для чтения и убедитесь, что запись отклоняется. Создайте токен для второй учётной записи и убедитесь, что он не может получить заметку первой. Отзовите токен и убедитесь, что следующий запрос не авторизован. Измените пароль учётной записи и убедитесь, что ранее выпущенные токены перестали работать.
Перед развёртыванием настройте HTTPS, параметры рабочей среды, доставку почты, резервные копии и мониторинг. Даже работающий стартовый проект требует бизнес-правил и правил хранения данных вашего продукта.