Laravel API: Laravel'de API Oluşturma ve Test Etme
Yayınlanan: 2023-05-10Laravel Eloquent, veritabanınızla etkileşime geçmenin kolay bir yoludur. Tablolarla etkileşim için bir model sağlayarak veritabanlarının karmaşıklığını basitleştiren bir nesne-ilişki eşleştiricisidir (ORM).
Bu nedenle, Laravel Eloquent, gelişiminizi desteklemek için API'ler oluşturmak ve test etmek için mükemmel araçlara sahiptir. Bu uygulamalı makalede, Laravel kullanarak API oluşturmanın ve test etmenin ne kadar kolay olduğunu göreceksiniz.
Bu gösteride, API ve veritabanı tablosunu oluşturmak için kullanabileceğiniz bir model oluşturarak başlayacaksınız. Ardından, iş mantığı katmanı olarak bir denetleyiciyi ve API'yi tamamlamak için bir rotayı nasıl ekleyeceğinizi göreceksiniz. Sonunda kimlik doğrulama ve hata işlemeye odaklanmadan önce Postman kullanarak API'leri test etmeyi öğreneceksiniz.
Önkoşullar
Başlamak için şunlara ihtiyacınız olacak:
- Laravel sürüm 8 veya 9
- Besteci
- postacı
- XAMPP
- API'ler ve PHP hakkında temel bilgi
API Temelleri
<code>composer</code> kullanarak yeni bir Laravel projesi oluşturarak başlayın:
composer create-project laravel/laravel laravel-api-create-test
Sunucuyu başlatmak için, uygulama sunucusunu 8000 numaralı bağlantı noktasında çalıştıran aşağıdaki komutu yürütün:
cd laravel-api-create-test php artisan serve
Aşağıdaki ekranı görmelisiniz:
Ardından, aşağıdaki kodu kullanarak geçiş için -m
işaretli bir model oluşturun:
php artisan make:model Product -m
Şimdi geçiş dosyasını gerekli alanı içerecek şekilde yükseltin. Database/migrations/{date_stamp}_create_products_table.php dosyası içine ürün modeli ve bu iki tablo alanı için başlık ve açıklama alanları ekleyin.
$table->string('title'); $table->longText('description');
Bir sonraki adım, bu alanları doldurulabilir hale getirmektir. app/Models/ Product.php içinde, title
ve description
alanlarını doldurulabilir yapın.
protected $fillable = ['title', 'description'];
Denetleyici Nasıl Oluşturulur
Şimdi, aşağıdaki komutu yürüterek ürün için bir denetleyici dosyası oluşturun. Bu , app/Http/Controllers/Api/ProductController.php dosyasını oluşturacaktır.
php artisan make:controller Api\\ProductController --model=Product
Şimdi, ürünleri oluşturma ve alma mantığını ekleyin. Tüm ürünleri almak için index
yönteminin içine aşağıdaki kodu ekleyin:
$products = Product::all(); return response()->json([ 'status' => true, 'products' => $products ]);
Ardından yeni ürünleri veri tabanında depolamak için StoreProductRequest
sınıfı eklemelisiniz. Aşağıdaki sınıfı aynı dosyanın en üstüne ekleyin.
public function store(StoreProductRequest $request) { $product = Product::create($request->all()); return response()->json([ 'status' => true, 'message' => "Product Created successfully!", 'product' => $product ], 200); }
Şimdi, aşağıdaki komutu yürüterek yapabileceğiniz isteği oluşturacaksınız:
php artisan make:request StoreProductRequest
Doğrulama eklemek istiyorsanız, app/Http/Requests/StoreProductRequest.php dosyasını kullanabilirsiniz. Bu gösteri için doğrulama yok.
Rota Nasıl Oluşturulur
API'yi test etmeden önceki son adım, bir rota eklemektir. Bunu yapmak için, route/api.php dosyasının içine aşağıdaki kodu ekleyin. use
deyimini dosyanın başına ve Route
deyimini gövdeye ekleyin:
use App\Http\Controllers\Api\ProductController; Route::apiResource('products', ProductController::class);
API'yi test etmeye başlamadan önce, ürünler tablosunun veritabanınızda olduğundan emin olun. Mevcut değilse, XAMPP gibi bir kontrol panelini kullanarak bir tane oluşturun. Alternatif olarak, veritabanını geçirmek için aşağıdaki komutu yürütebilirsiniz:
php artisan migrate
Bir API Nasıl Test Edilir?
API'yi test etmeden önce, app/Http/Requests/StoreProductRequest.php içindeki <code>yetkilendirme</code> yönteminin <code>true</code> döndürecek şekilde ayarlandığından emin olun.
Artık Postman'ı kullanarak yeni bir ürün oluşturabilirsiniz. Bu URL'ye bir POST
isteği göndererek başlayın: http://127.0.0.1:8000/api/products/. Yeni bir ürün oluşturmak için bir POST
isteği olduğundan, bir başlık ve açıklama içeren bir JSON nesnesi iletmeniz gerekir.
{ "title":"Apple", "description":"Best Apples of the world" }
Gönder düğmesine tıkladıktan sonra aşağıdakileri görmelisiniz:
Şimdi, oluşturulan ürünleri GET
isteğini kullanarak getirin. URL aynı. Sonuçlar aşağıdaki gibi görünecektir:
Sanctum Kullanarak Bir API Nasıl Doğrulanır?
Kimlik doğrulama, bir API'nin güvenliğini sağlarken çok önemlidir. Laravel, ara yazılım olarak kullanabileceğiniz Sanctum belirtecinin işlevselliğini sağlayarak bunu kolaylaştırır. Kullanıcı doğru kimlik bilgilerini kullanarak oturum açtığında oluşturulan belirteçleri kullanarak API'yi korur. Kullanıcıların güvenli API'ye belirteç olmadan erişemeyeceğini unutmayın.
Kimlik doğrulama eklemenin ilk adımı, aşağıdaki kodu kullanarak bir Sanctum paketi eklemektir:
composer require laravel/sanctum
Ardından, Sanctum yapılandırma dosyasını yayınlayın:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Bundan sonra, ara yazılım olarak Sanctum'un belirtecini ekleyin. app/Http/Kernel.php dosyasının içinde, aşağıdaki sınıfı kullanın ve middlewareGroups
korumalı ara yazılım gruplarının API'sinde aşağıdaki kodla değiştirin.
use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ];
Bir sonraki adım, bir UserController
oluşturmak ve belirteci doğrulamak için kodu eklemektir.
php artisan make:controller UserController
UserController
oluşturduktan sonra, app/Http/Controllers/UserController.php dosyasına gidin ve mevcut kodu aşağıdaki kodla değiştirin:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use Illuminate\Support\Facades\Hash; class UserController extends Controller { // function index(Request $request) { $user= User::where('email', $request->email)->first(); // print_r($data); if (!$user || !Hash::check($request->password, $user->password)) { return response([ 'message' => ['These credentials do not match our records.'] ], 404); } $token = $user->createToken('my-app-token')->plainTextToken; $response = [ 'user' => $user, 'token' => $token ]; return response($response, 201); } }
Kimlik doğrulamayı test etmeden önce, ekici kullanan bir kullanıcı oluşturun. Aşağıdaki komut bir UsersTableSeeder dosyası oluşturur.
php artisan make:seeder UsersTableSeeder
Database/seeders/UsersTableSeeder.php dosyasının içinde, kullanıcıyı tohumlamak için mevcut kodu aşağıdaki kodla değiştirin:
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { DB::table('users')->insert([ 'name' => 'John Doe', 'email' => '[email protected]', 'password' => Hash::make('password') ]); } }
Şimdi bu komutu kullanarak ekme makinesini çalıştırın:
php artisan db:seed --class=UsersTableSeeder
Kimlik doğrulama akışında kalan son adım, rotayı korumak için oluşturulan ara yazılımı kullanmaktır. Routes/api.php dosyasına gidin ve ürün rotasını ara yazılımın içine ekleyin.
use App\Http\Controllers\UserController; Route::group(['middleware' => 'auth:sanctum'], function () { Route::apiResource('products', ProductController::class); }); Route::post("login",[UserController::class,'index']);
Ara yazılıma bir rota ekledikten sonra, ürünleri getirmeye çalışırsanız dahili sunucu hatası alırsınız.
Ancak giriş yaptığınızda, bir jeton alın ve bunu başlıkta kullanın, kimliğinizi doğrulayacak ve çalışmaya başlayacaktır. Aşağıdaki gövde ile http://127.0.0.1:8000/api/login adresine bir POST isteği gönderebilirsiniz:
{ "email":"[email protected]", "password":"password" }
Alınan belirteci Taşıyıcı belirteci olarak kullanın ve Yetkilendirme başlığı olarak ekleyin.
API Hatalarıyla Nasıl Başa Çıkılır?
Sunucuya bir istek gönderdiğinizde, yanıt verir. Yanıt ile birlikte yanıtın niteliğine göre bir durum kodu da gönderir. Örneğin, 200 durum kodu, isteğin başarılı olduğunu gösterir ve 404, sunucunun istenen kaynağı bulamadığını gösterir.
Ancak, bir durum kodu yeterli değildir. İnsan tarafından okunabilen bir hata mesajı gereklidir. Laravel, hataları işlemek için birçok yolla birlikte gelir. Bir try-catch bloğu, geri dönüş yöntemi kullanabilir veya özel bir yanıt gönderebilirsiniz. UserController
eklediğiniz aşağıdaki kod bunu gösterir.
if (!$user || !Hash::check($request->password, $user->password)) { return response([ 'message' => ['These credentials do not match our records.'] ], 404); }
Özet
Laravel'in Eloquent Modeli, API'leri oluşturmayı, doğrulamayı ve test etmeyi zahmetsiz hale getirir. Nesne-ilişkisel eşlemesi, veritabanıyla etkileşime doğrudan bir yaklaşım sağlar.
Ayrıca, ara yazılım görevi gören Laravel'in Sanctum belirteci, API'lerinizi hızlı bir şekilde korumanıza yardımcı olabilir.
Daha fazla optimizasyona ihtiyacınız varsa, Kinsta'nın Veritabanı Barındırma çözümü, tüm web projeleriniz için veritabanlarının kurulumunu ve yönetimini basitleştirir.