Как правильно возвращать ошибки в своем API, Laravel?
могу вручную делать return в каждом методе своего API, но это не выглядит правильным
Почему? Это нормальная практика. Каждый метод - это часть контроллера, а контроллер должен возвращать ответ. Ответ в Laravel должен быть инстансом Response (массив автоматически конвертируется в него).если структура изменится, мне придется менять весь свой код
Для таких случаев Лара предоставляет возможность создать свой собственный тип ответа, например, ApiResponse. Соответственно, после создания будете вызывать в коде как-то так:return response()->api($code, $data);
Все форматирование будете делать в классе ApiResponse.
Собственно, чтобы создать, регистрируете в сервис-провайдере новый тип response.Response::macro('api', function ($code, $data) {
    return new ApiResponse($code, $data);
});
Единого формата ответа с ошибками от http api не существует. Есть некие претенденты, но это такое. Возвращать - не надо, надо кидать эксепшены и обрабатывать в хендлере. Лучше - если будет какой-то один базовый class AppException, с помощью которого вы сможете контроллировать соответствие ваших же кастомных ошибок на наличие нужных полей (кода, http кода, сообщения, мета инфа). Как делаю я (пока что прокатывает):
1) с сервера отдаю к каждой уникальной ошибке (например той, что выходит за рамки валидатора) свой код ошибки, как с error_code. У тривиальных ошибок (типа not found или validation) - их нет, так как на нее указывает http код (типа 404 и 422).
2) так же к каждому эксепшену в коде пишу месседж, который так же отдаю в ответе во время разработки. На продакшене вырубаю дебаг и меседж пропадает из ответа от сервера, остается http код и "свой код".
Если говорить только об validation error, то делаю как с error_details, а потом фронтер разбирается с этим так, как оно вписывается в дизайн.