Middle
158
questionbank
Какие правила наименования ресурсов (URL) в RESTful API ты знаешь?
Ответ от нейросети
sobes.tech AI
Наименования ресурсов в RESTful API должны быть понятными, предсказуемыми и последовательными. Основные правила включают:
- Использование существительных во множественном числе: Ресурсы обычно представляют собой коллекции объектов. Например,
/usersвместо/user. - Использование строчных букв: URL чувствительны к регистру, использование строчных букв помогает избежать ошибок.
- Использование дефисов для разделения слов: Дефисы читаются лучше, чем нижнее подчеркивание (
_). Например,/product-ordersвместо/product_orders. - Отсутствие глаголов: Методы HTTP (GET, POST, PUT, DELETE) указывают на действие, поэтому они не должны повторяться в самом URL. Например,
/users/createили/get-users– плохие практики./usersс методом POST для создания или GET для получения – правильный подход. - Использование иерархических отношений: Вложенные ресурсы должны отражать их связь. Например,
/users/{userId}/ordersуказывает на заказы конкретного пользователя. - Минимизация глубины вложенности: Чрезмерно глубокая вложенность может сделать URL трудными для понимания.
- Использование параметров запроса для фильтрации, сортировки и пагинации: Эти операции над коллекцией ресурсов должны указываться в параметрах, а не в пути URL. Например,
/users?status=active&sortBy=lastName.
// Примеры хороших URL:
// GET /users - Получить список пользователей
// GET /users/123 - Получить пользователя с ID 123
// POST /users - Создать нового пользователя
// PUT /users/123 - Обновить пользователя с ID 123
// DELETE /users/123 - Удалить пользователя с ID 123
// GET /users/123/orders - Получить список заказов пользователя с ID 123
// GET /products?category=electronics&sortBy=price - Получить продукты по категории с сортировкой
// Примеры плохих URL:
// GET /getUsers
// POST /createUser
// GET /user/123
// GET /users_list
// GET /users/getOrdersForUser/123
Таблица сравнения хороших и плохих практик:
| Хорошая практика | Плохая практика |
|---|---|
/users (GET) |
/getUsers (GET) |
/users/{id} (GET, PUT, DELETE) |
/user/{id} (GET, PUT, DELETE) |
/users (POST) |
/createUser (POST) |
/users/{id}/orders |
/getOrdersForUser/{id} |
/products?category=... |
/productsByCategory/... |