• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Build Your Own Laravel API Boilerplate (with Sanctum, Traits & Automation)

  • Автор темы Автор темы Lomanu4
  • Дата начала Дата начала

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,481
Баллы
155
A step-by-step guide to creating a scalable, maintainable Laravel API starter—using real code, real repos, and real-world patterns.

Why This Guide?

  • Consistent API responses (no more frontend confusion)
  • Reusable traits (DRY, testable code)
  • Extendable base controllers (easy to scale)
  • Built-in authentication (Sanctum)
  • Automated scaffolding (Artisan commands)
  • Repo links for every step
1️⃣ Project Setup: Start Clean


a) Create a new Laravel project:


composer create-project laravel/laravel my-api
cd my-api


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



b) Add Sanctum for API auth:


composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



c) Set up your API routes:

Edit routes/api.php and use the auth:sanctum middleware for protected endpoints:


Route::middleware('auth:sanctum')->get('/user', fn(Request $request) => $request->user());
2️⃣ Traits: The Secret to DRY, Consistent APIs

a) HandlesApiResponse


Standardize every response—success or error.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.




// app/Concerns/HandlesApiResponse.php
trait HandlesApiResponse
{
public function respondSuccess($data = null, string $message = '', int $status = 200)
{
return response()->json([
'success' => true,
'data' => $data,
'message' => $message,
'errors' => null
], $status);
}

public function respondError(string $message, int $code = 422, $errors = null)
{
return response()->json([
'success' => false,
'data' => null,
'message' => $message,
'errors' => $errors
], $code);
}
}
b) HandlesValidation


Centralize validation logic.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.




// app/Concerns/HandlesValidation.php
trait HandlesValidation
{
public function validateRequest(Request $request, array $rules)
{
return $request->validate($rules);
}
}

Usage Example:


class UserController extends BaseApiController
{
public function store(Request $request)
{
$data = $this->validateRequest($request, [
'email' => 'required|email|unique:users'
]);
return $this->respondSuccess(User::create($data), 'User created', 201);
}
}
3️⃣ Base Controllers: Your API's Foundation

a) BaseApiController


Centralize traits and error handling.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.




class BaseApiController extends Controller
{
use HandlesApiResponse, HandlesValidation;

public function handleRequest(callable $action, string $successMessage)
{
try {
$result = $action();
return $this->respondSuccess($result, $successMessage);
} catch (Throwable $e) {
return $this->respondError($e->getMessage());
}
}
}
b) ProtectedApiController


Auto-protect endpoints with Sanctum.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.




class ProtectedApiController extends BaseApiController
{
public function __construct()
{
$this->middleware('auth:sanctum');
}
}

Usage Example:


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.




class ProfileController extends ProtectedApiController
{
public function index()
{
return $this->respondSuccess(auth()->user(), 'Profile loaded');
}
}
4️⃣ Automate with Artisan: No More Boilerplate


Create a custom command to scaffold controllers, requests, and resources:


php artisan make:api-resource Post


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



This generates:

  • PostController
  • PostResource
  • StorePostRequest / UpdatePostRequest
  • PostPolicy
5️⃣ Response Standards: Make Frontend Happy


Success:


{
"success": true,
"data": { "id": 1, "name": "John" },
"message": "User loaded",
"errors": null
}

Error:


{
"success": false,
"data": null,
"message": "Validation failed",
"errors": { "email": ["Invalid email"] }
}
6️⃣ Your Next Steps

  1. Clone the

    Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

    or

    Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

    .
  2. Run php artisan serve.
  3. Build your first endpoint in minutes.
  4. Try the challenge: Add a DELETE /posts/{id} endpoint with ownership checks (

    Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

    ).
Why This Works

  • No more spaghetti code: Traits and base controllers keep things DRY and testable.
  • Frontend-friendly: Predictable, consistent responses.
  • Easy to extend: Add features without rewriting core logic.
  • Battle-tested: Used in real projects (

    Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

    ).
References & Further Reading


Ready to build? Fork, clone, and make it yours!

Questions? Open an issue on the repo or reach out to the community.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

 
Вверх Снизу