Laravel API: Laravel'de API Oluşturma ve Test Etme

Yayınlanan: 2023-05-10

Laravel 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:

Laravel açılış sayfası
laravel

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'];
Bir sonraki viral uygulama fikrini bulduğuna inanıyor musun? API'nizi hızlı bir şekilde nasıl oluşturabileceğiniz ve test edebileceğiniz aşağıda açıklanmıştır ️ Tweetlemek için Tıklayın

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" }
Postman'da yeni bir ürün oluşturma
Postman'da yeni bir ürün oluşturma

Gönder düğmesine tıkladıktan sonra aşağıdakileri görmelisiniz:

Gönder'i tıkladıktan sonra postacı
Gönder'e tıkladıktan sonra

Şimdi, oluşturulan ürünleri GET isteğini kullanarak getirin. URL aynı. Sonuçlar aşağıdaki gibi görünecektir:

GET isteği tarafından getirilen ürünler.
GET isteği tarafından getirilen ürünler.

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.

Rota ekledikten sonra dahili sunucu hatası
Rota ekledikten sonra dahili sunucu hatası

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" }
Başarılı kimlik doğrulama ve Taşıyıcı simgesi
Başarılı kimlik doğrulama

Alınan belirteci Taşıyıcı belirteci olarak kullanın ve Yetkilendirme başlığı olarak ekleyin.

Taşıyıcı jetonunu Yetkilendirme başlığı olarak ekleme
Taşıyıcı jetonunu Yetkilendirme başlığı olarak ekleme

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); }
Veritabanının karmaşıklığı hakkında endişelenmeden API dev'in eğlenceli bölümlerine odaklanın. İşte Tweet için Tıklayın

Ö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.