Иногда для именования ресурсов применяют единственное число, но это реже:
Скопировать код
https://praktikum.ru/users/{user-id}/profile
https://praktikum.ru/users/me
Иногда можно выбрать глагол в качестве имени. Но такое имя бывает удачным крайне редко:
Скопировать код
https://praktikum.ru/users/{user-id}/cart/checkout # проверка корзины
https://praktikum.ru/login # для получения токена
https://praktikum.ru/refresh # для обновления токена
Слэш для иерархии
Слэш в URL используется для указания иерархии ресурсов по принципу «от общего к частному»:
Скопировать код
GET /users/{user-id}/posts
Все пользователи → Конкретный пользователь по ID → Все его посты
То есть запрос вернет посты конкретного пользователя. Если мы хотим получить конкретный пост — нужно указать его ID:
Скопировать код
GET /users/{user-id}/posts/{post-id}
«Висящий» слэш — не рекомендуется
Висящий слэш в конце URL не добавляет информации. Лучше избегать такого употребления.
Скопировать код
// не надо так
GET /users/{user-id}/posts/
// лучше вот так
GET /users/{user-id}/posts
Дефисы вместо пробелов
В URL не должно быть пробелов, их заменяют либо дефисами, либо нижними подчёркиваниями. Дефисы лучше, потому что:
- на некоторых устройствах нижнее подчёркивание может выйти за базовую линию строки, и его будет не видно вовсе;
- несколько нижних подчёркиваний сливаются в одно.
Скопировать код
// делайте так:
GET /users/{user-id}/user-devices
// а не так:
GET /users/{user-id}/user_devices
HTTP-методы
Любой API предназначен для получения доступа к ресурсам сервера. К ресурсу всегда можно обратиться по URL.
HTTP-метод запроса определяет, что следует сделать:
- GET получает ресурсы;
- POST создаёт ресурс;
- PUT заменяет существующий ресурс целиком;
- PATCH частично изменяет существующий ресурс;
- DELETE удаляет ресурс.
Реже применяют ещё два метода:
- HEAD, получить только заголовки ответа. HEAD похож на GET, но у его ответа нет тела;
- OPTIONS, узнать, какие HTTP-методы поддерживает сервер.
Сам по себе метод не определяет логику работы сервера.
Можно закодить API так, чтобы запрос POST удалял ресурс, а DELETE — добавлял. Поступайте именно так, когда вам поставят задачу «нарушить как можно больше стандартов и усложнить работу коллегам».
HTTP-методы — это глаголы
Используйте HTTP-методы для указания совершаемого над ресурсом действия:
Скопировать код
// получить список пользователей
GET /users
// создать пользователя
POST /users
// удалить пользователя с id = 2
DELETE /users/2
А включать в название имя HTTP-метода не стоит:
Скопировать код
# так не надо
GET /get-users
POST /create-user
Из названия HTTP-метода уже понятно, что делать с ресурсом, не нужно дублировать задание.
Идемпотентность и безопасность методов
У методов есть две характеристики — безопасность и идемпотентность.
Безопасность: если метод может изменить ресурс, то он считается небезопасным в терминах архитектуры REST. Такими методами могут быть PUT, PATCH, DELETE или POST.
Идемпотентность метода заключается в том, что его многократное повторение равно однократному. То есть выполняя один и тот же запрос много-много раз, мы всегда будем получать один и тот же результат.