design

Adım Adım Laravel API Geliştirme

March 15, 2025

1. Laravel Projesini Hazırla


Terminal

sh

sh
composer create-project laravel/laravel myapi
cd myapi 

Ve sanctum kur:

Terminal

sh

sh
composer require laravel/sanctum 

Veritabanını ayarla (.env dosyasında DB_DATABASE=myapi gibi güncelle).

Sanctum yapılandırmasını migrate et:


Terminal

sh

sh
php artisan migrate
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" 

2. API Route’larını Tanımla

routes/api.php dosyasını aç ve aşağıdaki gibi düzenle:


api.php

api.php

php
use App\Http\Controllers\AuthController;
use App\Http\Controllers\ProductController;
use Illuminate\Support\Facades\Route;

Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);

// Korunan Rotalar (Sadece giriş yapmış kullanıcılar erişebilir)
Route::middleware('auth:sanctum')->group(function () {
    Route::get('/user', [AuthController::class, 'user']);
    Route::post('/logout', [AuthController::class, 'logout']);
    
    Route::apiResource('/products', ProductController::class);
}); 

3. AuthController (Giriş & Kayıt)

app/Http/Controllers/AuthController.php dosyasını oluştur ve içine şu kodları ekle



PHP Dosyası

AuthController.php

php
namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;

class AuthController extends Controller
{
    // Kullanıcı Kayıt
    public function register(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6',
        ]);

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);

        return response()->json(['message' => 'Kayıt başarılı', 'user' => $user], 201);
    }

    // Kullanıcı Girişi
    public function login(Request $request)
    {
        $request->validate([
            'email' => 'required|email',
            'password' => 'required'
        ]);

        $user = User::where('email', $request->email)->first();

        if (!$user || !Hash::check($request->password, $user->password)) {
            throw ValidationException::withMessages(['email' => 'Geçersiz giriş bilgileri']);
        }

        $token = $user->createToken('api-token')->plainTextToken;

        return response()->json(['token' => $token, 'user' => $user]);
    }

    // Kullanıcı Bilgileri
    public function user(Request $request)
    {
        return response()->json($request->user());
    }

    // Kullanıcı Çıkış
    public function logout(Request $request)
    {
        $request->user()->tokens()->delete();
        return response()->json(['message' => 'Çıkış yapıldı']);
    }
} 

4. ProductController (CRUD İşlemleri)

Şimdi bir ürün API’si ekleyelim

sh

sh
php artisan make:model Product -m
php artisan make:controller ProductController --api 

Ürün Modeli (app/Models/Product.php)

Product.php

Product.php

php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory;

    protected $fillable = ['name', 'description', 'price'];
} 

Migration Güncelle (database/migrations/xxxx_xx_xx_create_products_table.php)

Migration Dosyası

database/migrations/xxxx_xx_xx_create_products_table.php

php
public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->text('description')->nullable();
        $table->decimal('price', 10, 2);
        $table->timestamps();
    });
} 

Migration’ı çalıştır:



Terminal

sh

sh
php artisan migrate 

ProductController (app/Http/Controllers/ProductController.php)

ProductController

ProductController.php

php
namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    public function index()
    {
        return Product::all();
    }

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
            'price' => 'required|numeric'
        ]);

        $product = Product::create($request->all());
        return response()->json($product, 201);
    }

    public function show(Product $product)
    {
        return response()->json($product);
    }

    public function update(Request $request, Product $product)
    {
        $product->update($request->all());
        return response()->json($product);
    }

    public function destroy(Product $product)
    {
        $product->delete();
        return response()->json(['message' => 'Ürün silindi']);
    }
} 

5. Postman ile API Testi

Şimdi Postman veya başka bir API istemcisi kullanarak API’yi test edebilirsin.

Kayıt OlPOST http://127.0.0.1:8000/api/register

✅ Giriş YapPOST http://127.0.0.1:8000/api/login

✅ Token ile Korunan Rotalara Eriş

Başlık (Header) ekleyerek giriş yapmış kullanıcıya özel işlemler yapabilirsin


Authorization: Bearer YOUR_TOKEN_HERE


Ürün CRUD İşlemleri

  • GET /api/products (Tüm Ürünler)
  • POST /api/products (Yeni Ürün)
  • GET /api/products/{id} (Belirli Ürün)
  • PUT /api/products/{id} (Ürün Güncelle)
  • DELETE /api/products/{id} (Ürün Sil)


0 + 7 =