Laravel Api nasıl oluşturulur?
Laravel api oluşturma
Api kısaca uygulamanızı dışarı açan bir kapı olarak yorumluyorum ben. örneğin bir mobil uygulama ile iletişim kurmasını api ile sağlıyoruz. Herhangi bir arayüze ihtiyaç duymadan veri alışverişi diye özetleyebilirim. Laravel ile api kullanımının farklı yolları var. Ben token based api olarak adlandırılan halini anlatacağım. Diğer api çeşitleri için makalenin altındaki linkleri ziyaret edebilirsiniz. Unutmamak gerekir ki Api kullanımın da en önemli şeylerden biriside ssl sertifakasıdır. Ssl sertifikası olmayan bir sistem üzerinden api hizmeti sağlarsanız, trafik spoof edilebilir ve bu bir güvenlik zafiyetidir. Bu konu ile ilgili daha detaylı bilgi için size netsparker ekibinin hazırladığı videoyu önerebilirim. Video linkine makalenin altından ulaşabilirsiniz.
İlk olarak yeni bir proje oluşturuyorum. Siz varolan projeniz üzerinden de devam edebilirsiniz.
laravel new api
Yeni laravel uygulamamızı oluşturduk. Kullandığımız bir editör veya ide ile projeyi açıyor, gerekli env ayarları ve database oluşturma işlemlerini gerçekleştiriyoruz ve user migrationlarını düzenlemeye başlıyoruz. User create migrationına
$table->string('api_token', 60)->unique()->nullable();
Satırını ekliyorum. Yani users tablosunda api_token isimli bir kolon oluşturduk. Burada kullanıcının api tokenını tutarak auth işlemlerini sağlayacağız.
Daha sonra database migrate işlemini gerçekleştiriyoruz.
php artisan migrate
İkinci adım olarak User modelimizi açıyoruz. Fillable ve hidden alanlarına api_token ekliyoruz.
Auth modülünü aktif ediyoruz.
php artisan make:auth
Bu işlem sonrasında db yi migrate ediyoruz.
php artisan migrate
Genel anlamda api için oluşturmamız gerekenler bu kadardı. Şimdi nasıl kullanacağımıza bakalım.
Api işlemleri için Api routing ini kullanacağız. Kullanıcı girişi zorunlu olan routingler için ise:
middleware('auth:api')
middleware’ını kullancağız. Bu middleware bizim için gelen parametreler arasında api_token paremetresi var mı? Var ise bir kullanıcıya ait mi diye kontrol edecek. Aynı şekilde parametre olarak göndermek zorunda da değiliz api tokenı header içinde
Authorization:Bearer api_token
şeklinde de kullanabiliriz.
Api ile login işleminin yapılışı
Bunun için Controller dosyamızın içinde Api adında bir klasör oluşturacağım. Daha sonra bu klasör içinde bir userController oluşturacağım. Bu controller içinde örnek olması için bir login fonksiyonu ekliyorum. Api’a gelecek login isteklerini burada alıp email ve password eşleşiyor ise kullanıcıya bir api token döndüreceğiz.
public function login(Request $request)
{
#Todo: Use Validation
$user = User::where('email', $request->email)->first();
if (Hash::check($request->password, $user->password)) {
$user->api_token = str_random(60);
$user->save();
return response()->json([
'status' => 200,
'api_token' => $user->api_token,
'username' => $user->name,
'email' => $user->email,
'id' => $user->id
]);
}
return response()->json([
'status' => 401,
'message' => 'Unauthenticated.'
]);
}
Bu işlem sırasında gerek duyduğunuz validationları ekleyerek burayı geliştirebilirsiniz.
Browser üzerinden register’ı kullanarak bir kullanıcı oluşturuyorum. Login testini yapabilmek için.
Api testleri için Postman isimli aracı kullancağım. Postman chrome store linki‘ni kullanarak sizde uygulamayı edinebilirsiniz. Oldukça kullanışlıdır.
Unutmadan birde routeing oluşturmamız gerekiyor. Bunun için Api.php dosyamızı açıyor ve bir tane routing ekliyoruz.
Route::post('/login', 'Api\UserController@login');
Ben yukardaki gibi bir routing oluşturdum. api.dev/api/login urline post isteği ile email ve password gönderilecek.
Postmanı açıyor ve aşağıda resimde görüldüğü gibi bir istek gönderiyorum.
Görüldüğü gibi başarılı bir şekilde login işlemi gerçekleştirildi. Ve sonuç olarak kullanıcı bilgileri ve api_token döndü. Kullanıcı girişinin zorunlu olduğu her alanda artık bu api tokenıda göndereceğiz. Ayrıca middleware olarak auth:api kullancağız.
Örneğin giriş yapan bir kullanıcın kendi bilgilerini listelemesini istiyoruz. Örnek kullanım aşağıdaki gibi olacaktır.
Route::group(['middleware' => 'auth:api', 'prefix' => 'user'], function () {
Route::get('/', 'Api\UserController@user');
});
user fonksiyonumuz ise aşağıdaki gibi:
public function user()
{
$user = Auth::guard('api')->user();
if (!$user) {
return response()->json([
'status' => 401,
'message' => 'Unauthenticated.'
]);
}
return $user;
}
Postman de isteği yaparken headera ayrıca
Accept: application/json
Eklersek istediğimiz gibi yanıt alabileceğiz.
Örneğin geçersiz bir api token ile istek yapacak olursak yanıt aşağıdaki gibi olucaktır.
Kısaca ve en basit hali ile Laravel’de api kullanımını anlatmaya çalıştım. Sorularınız olursa bilgim dahilinde yanıtlamaktan mutluluk duyarım.
Diğer kullanılabilecek api türleri
Json web token Github json web token
Laravel Passport Laravel passport