Livewire — это такая штука, которая должна спасать ленивых Laravel-разработчиков от написания фронтенда. Типа написал компонент, и всё «живое». Но кто-то где-то додумался использовать это диковинное чудо не только для рендеринга, а ещё и для API.

На первый взгляд — бред. Ты ведь не берёшь кухонный нож, чтобы ковырять в бетоне? Но в ИТ всегда найдётся чувак, который воткнёт нож в стену, и у него, мать его, получится. Так вот, Livewire как API — это именно такой кейс.

Как это выглядит на практике

Поставил Livewire:

composer require livewire/livewire

Сделал компонент:

php artisan make:livewire users 

Вылезли два файла: Users.php и users.blade.php.

Класс примерно такой:

namespace App\Http\Livewire;

use Livewire\Component;
use App\Models\User;

class Users extends Component
{
    public function getUsers()
    {
        return User::all();
    }

    public function render()
    {
        return view('livewire.users');
    }
}

Потом просто пробросил это в маршрут:

use App\Http\Livewire\Users;

Route::get('/api/users', [Users::class, 'getUsers']);

Вуаля. Ты вроде как сделал API через Livewire. На Postman всё шевелится, curl тоже отвечает.

Зачем вообще так делать?

Хороший вопрос. Честный ответ: почти никогда. Но иногда ситуация выглядит так:

  • у тебя уже живой проект на Livewire, и лень городить отдельные контроллеры;
  • данные нужны не фронту, а соседнему сервису;
  • сроки горят, а «архитектура» на проекте звучит как мем.

В этих случаях Livewire как API выглядит как костыль, который странно, но работает.

Где тут грабли

Безопасность.
Ты можешь отдать наружу всё, что угодно. И если не проверишь авторизацию — пиши потом объяснительные, почему твои пользователи лежат в паблике.

Архитектура.
Через месяц ты забудешь, что у тебя «API через Livewire». Придёт другой разработчик и будет плеваться: «Кто этот идиот?» Ответ будет неприятный: это был ты.

Ошибки и валидация.
Тут всё по-старому. Либо используешь механизмы Laravel (валидацию, middleware), либо получаешь не API, а проходной двор.

Итог

Livewire для API — костыль, но иногда костыли реально держат конструкцию. Только не строй на них дом. Если нужен нормальный API — используй контроллеры, Laravel Resources, Sanctum, Passport и прочее добро. А Livewire оставь для кнопочек. И помни: если ты сам через месяц открываешь свой код и материшься — значит, сделал что-то очень «гениальное».