Как следовать соглашению об именах действий контроллера Laravel, когда несколько методов подпадают под одно действие? - PullRequest
3 голосов
/ 10 июля 2020

Я разрабатываю приложение на Laravel впервые. Посмотрев несколько видео, я обнаружил, что пропустил правило «следуйте соглашению об именах действий». (Кстати, есть ли название для этого соглашения? REST, похоже, не совсем подходит, но, возможно, я просто не знаю REST достаточно хорошо)

В моей текущей настройке есть контроллер SupportTicketController, который включает методы open() и close(), чтобы открыть или закрыть заявку в службу поддержки. Если я правильно понял, это действия по обновлению. У меня также уже есть действие update() для изменения деталей в билете (которое требует другой роли пользователя для открытия / закрытия).

Каков подходящий способ конвертировать кратные одного и того же действия в Laravel соглашение об именах?

1 Ответ

1 голос
/ 10 июля 2020

REST, на мой взгляд, не о создании нескольких действий, а о создании отдельных действий, которые действуют в рамках спецификации. В вашем случае вызов PUT / PATCH изменит заявку в службу поддержки. Поэтому, когда новые люди изучают ваш API и знают REST, они могут изменить заявку в службу поддержки.

Вместо того, чтобы выполнять несколько действий. Правильный подход - выполнять все действия при обновлении и основывать его на модели. Представьте себе ваш билет в службу поддержки в JSON вот так.

{
    "id": 1,
    "status": "open",
    "message": "..."
}

Вместо того, чтобы думать, что я должен совершить открытое действие, примите статус как параметр при вызове обновления. Поэтому, если вы хотите обновить свой билет поддержки, чтобы он открывался и закрывался, сделайте это так. Тогда вам нужно будет выполнить только одно действие обновления, и ваш API извне станет более тонким и понятным.

url: api/tickets/1
action: PATCH
body:
{
    "status": "closed",
}

Иногда возникает необходимость выполнить отдельные действия, я часто делаю это, если вам нужно начать работу или отправить электронное письмо. Но если вы выбрали свой оригинальный дизайн, я думаю, что действия под названием open и closed подойдут. Laravel не имеет соглашения об именах вне ресурсов, и там это довольно бесплатно.

...