Creating a REST API in Laravel can be streamlined using a boilerplate or starter kit that sets up the basic structure and conventions.
1. Install Laravel
Start by creating a new Laravel project:
1 2 |
composer create-project --prefer-dist laravel/laravel laravel-rest-api cd laravel-rest-api |
2. Set Up Database
Configure your database settings in the .env
file:
1 2 3 4 5 6 |
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_database_name DB_USERNAME=your_username DB_PASSWORD=your_password |
3. Create Authentication (Optional)
For many APIs, you’ll want authentication. You can use Laravel Sanctum or Passport for API authentication. Here’s how to set up Sanctum:
1 2 3 |
composer require laravel/sanctum php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" php artisan migrate |
Add the middleware to your api
middleware group in app/Http/Kernel.php
:
1 2 3 4 5 |
'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], |
4. Create Models and Migrations
Generate a model and migration for your resource, for example, User
:
1 |
php artisan make:model User -m |
Edit the migration file in database/migrations
to add your fields:
1 2 3 4 5 6 7 8 9 10 |
public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->timestamps(); }); } |
1 |
php artisan migrate |
5. Create Controllers
Generate a controller for your resource:
1 |
php artisan make:controller Api/UserController --resource |
In your UserController
, implement the standard REST methods:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
use App\Models\User; use Illuminate\Http\Request; class UserController extends Controller { public function index() { return User::all(); } public function store(Request $request) { $validated = $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:8', ]); $validated['password'] = bcrypt($validated['password']); return User::create($validated); } public function show($id) { return User::findOrFail($id); } public function update(Request $request, $id) { $validated = $request->validate([ 'name' => 'sometimes|required|string|max:255', 'email' => 'sometimes|required|string|email|max:255|unique:users,email,'.$id, ]); $user = User::findOrFail($id); $user->update($validated); return $user; } public function destroy($id) { User::destroy($id); return response()->noContent(); } } |
6. Define Routes
In routes/api.php
, define your API routes using the resource controller:
1 2 3 |
use App\Http\Controllers\Api\UserController; Route::apiResource('users', UserController::class); |
7. Testing the API
Use tools like Postman or cURL to test your API endpoints:
- GET
/api/users
– List all users - POST
/api/users
– Create a new user - GET
/api/users/{id}
– Get a user by ID - PUT
/api/users/{id}
– Update a user - DELETE
/api/users/{id}
– Delete a user
8. Error Handling and Validation
Leverage Laravel’s built-in validation and error handling for a better user experience. Customize responses as needed.
Conclusion
This boilerplate sets up a basic structure for a REST API in Laravel. You can expand upon this by adding features like pagination, search filters, or using resources for structured responses. Additionally, consider integrating tools for API documentation, like Swagger or Postman collections, to enhance usability.