@Drumsid

Как работают апи методы crud?

Хочу разобраться как работают апи методы, тк до этого все crud делал иначе, мне не понятно как должны работать например update? Допустим есть студенты и лекции.

Создаем мы студента, добавили ему лекцию через МтМ.
Далее нам надо обновить лекции у студента этого. Если допустим добавить хотим новую лекцию к студенту, мне придется посмотреть какие уже есть и добавить новую. Тк во время апдейта, мне же не приходят данные о том какие лекции есть уже. А если захотят удалить какую то лекцию? Это вообще как?

Допустим через веб интерфейс там есть edit. Прилетают все лекции, я удалю и\или добавлю нужные и отправлю на update.
Тут конечно я могу удалить лекцию через контроллер Лекции и все будет норм.

И получается метод update у студента работает только на добавление лекций и нужно постоянно проверять какие уже есть? Если прилетела не существующая лекция, добавить к тем что есть, если такая уже есть, не добавлять (через sync добавляю, и если прилетит существующая, то сработает удаление. а вдруг просто ошиблись?), а если лекций нет (сменили только тайтл или, что то еще) то не удалять все лекции а просто ничего не добавляем. Так, что ли?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
Предположу, что в вопросе CRUD должно читаться как REST. В REST с элементами коллекций принято работать по одиночке, а не скопом - ведь это ресурсы.
И тогда структура выглядит примерно так:
POST /students/{student_id}/classes - добавление лекции студенту.
PUT /students/{student_id}/classes/{class_id} - обновление полей конкретной лекции.
DELETE /students/{student_id}/classes/{class_id} - удаление лекции.

При этом запрос POST идемпотентный - его можно вызывать сколько угодно раз, если лекция уже существует в коллекции студента, она просто проигнорируется. Но вы можете и кидать в этом случае ошибку, если хотите, но так делают реже.

"Метод update у студента" изменяет только состояние ресурса "студент" - его имя и т.п., а для работы с лекциями используется отдельная коллекция ресурсов.

Если же вопрос всё же не про REST, то делайте как хотите и как сможете, лишь бы работало.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы