Можно ли так спроектировать API?

Делаю на Spring Boot простенький сервис чтения книг.
Накидал такую структуру API: api/users/{id}/shelves/{id}/books/{id}/pages
Получается такой порядок получения данных:
  1. Сначала получаем список пользователей: api/users
  2. Затем получаем список полок пользователя: api/users/{id}/shelves
  3. Далее получаем список книг на полке: api/users/{id}/shelves/{id}/books
  4. После чего получаем список страниц книги: api/users/{id}/shelves/{id}/books/{id}/pages
  5. Дальше работаем со страницами книги.


Не будет ли ошибкой упростить структуру до:
  1. Получаем список пользователей: api/users
  2. Получаем список полок конкретного пользователя: api/users/{id}/shelves
  3. Получаем список книг на конкретной полке: api/shelves/{id}/books
  4. Получаем список страниц книги: api/books/{id}/pages
  5. Дальше работаем со страницами книги.


Или такое упрощение не по фен-шую?

И ещё нюанс: с добавлением/просмотром/обновлением/удалением информации о книгах и полках особых сложностей нет.
Как быть, если книгу надо переместить с одной полки на другую?
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если id книги уникальный по всей базе, то достаточно api/books/{id}/pages.
Как быть, если книгу надо переместить с одной полки на другую?
Изменить запись в таблице связи shelves_books. Запрос PATCH /api/books/{id} с телом { "shelf": shelfId }.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы