Как реализовать в yii2 веб-интерфейс + api для приложения?
Всем привет!
Подскажите, пожалуйста, правильное направление в реализации следующего функционала:
есть, в общем-то, обычное приложение учета товаров, у нее там свои контроллеры, модули, модели, все как должно быть. И тут же к ней нужно реализовать API для различных целей.
Я сначала легко себе это представлял, но теперь совсем запутался.
У меня есть несколько вариантов: отдельный апи контроллер + подтягивать нужные мне модули. Т.к. весь основной функционал уже готов, я буду его дублировать в апи контроллере, вызывая нужные методы. Минусы: дубль кода, Плюсы: независим от основной реализации.
Либо же писать свой модуль, который уже будет взаимодействовать внутри с другим модулями и контроллерами. Минус здесь в том, что при обновлении одной модели нужно будет вносить правки в двух местах. Плюсы те же, только все это обернуто аккуратно в модуль.
Может, чего-то не учел или не знаю. Подскажите, как все это правильно реализовать и не получить потом на выходе отборное спагетти:)
весь основной функционал уже готов, я буду его дублировать в апи контроллере, вызывая нужные методы
Именно поэтому все и говорят "тонкие контроллеры"
Тк у вас логика в контроллерах, то да -- дублировать
Если бы разнесли нормально по сервисам -- то контроллеры на беке и апи просто бы пользовали их и были по сути расходниками
так, с этого поподробнее ) приложение в обоих частях еще пишется, поэтому, по сути, ничего еще нет. Просто я сразу начал писать параллельно обе версии - веб-морду и апи для всех остальных. Какой подход говорите выработать?
На этом шаге часто возникает вопрос вроде «зачем создавать отдельный класс EmployeeService, если его код можно поместить прямо в контроллере«? На него есть несколько ответов.
Во-первых, помимо обычного веб-интерфейса у сайта может быть некое API. И оно будет содержать похожий контроллер:
берем advanсed шаблон, api - это отдельное app, свой конфиг, свой контроль доступа, response в виде json и т.д.
код при этом дублироваться не должен если все верно сделано. Как сказал Максим Федоров толстая должна быть модель, тогда Вы ее повторно без проблем используете в Ваших обычных web контролерах и rest контролерах