sh
composer create-project laravel/laravel myapi
cd myapi
sh
composer require laravel/sanctum
Veritabanını ayarla (.env
dosyasında DB_DATABASE=myapi
gibi güncelle).
sh
php artisan migrate
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
routes/api.php
dosyasını aç ve aşağıdaki gibi düzenle:
api.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);
});
app/Http/Controllers/AuthController.php
dosyasını oluştur ve içine şu kodları ekleAuthController.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ı']);
}
}
sh
php artisan make:model Product -m
php artisan make:controller ProductController --api
app/Models/Product.php
)Product.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'];
}
database/migrations/xxxx_xx_xx_create_products_table.php
)database/migrations/xxxx_xx_xx_create_products_table.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();
});
}
sh
php artisan migrate
app/Http/Controllers/ProductController.php
)ProductController.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']);
}
}
Şimdi Postman veya başka bir API istemcisi kullanarak API’yi test edebilirsin.
✅ Kayıt Ol → POST http://127.0.0.1:8000/api/register
✅ Giriş Yap → POST http://127.0.0.1:8000/api/login
✅ Token ile Korunan Rotalara Eriş
✅ Ürün CRUD İşlemleri
/api/products
(Tüm Ürünler)/api/products
(Yeni Ürün)/api/products/{id}
(Belirli Ürün)/api/products/{id}
(Ürün Güncelle)/api/products/{id}
(Ürün Sil)