--

Laravel Framework ile Rest Api Kullanımı(Bölüm — 1)

Merhabalar,

Laravel Framework — REST API

Bu seride Laravel Framework ile Rest Api kullanımından bahsedip örnek bir proje ile yazı serimi bitireceğim.

Bu yazı dizisinde karşılaştığınız hataları bana iletmeniz beni sevindirecektir.

1.Neden Laravel?

Yazılım Teknolojisinin hızlı değişimine ayak uydurması ve yazılım prensiplerini ve manuel yaptığımız işlerin birçoğunu bizlere sunması (Authentication,Middleware,ORM,MVC) geliştirilecek projeleri hızlı ,güvenilir ve test edilebilir olması şahsen benim tercih sebebimdir.Kısa sürede proje alt yapısını oluşturup projenizin geliştirmesini yapabilirsiniz.

2.API (Application Programming Interface)?

Uygulama program arayüzüdür.Uygulamaların birbiriyle etkileşimde olması için kullanılan yazılım aracıdır. Örnek olarak, web projemizde Authentication işlemlerini Laravel Framework ile geliştirdik , Web ile asenkron çalışan Mobil projemiz için yeniden bir Auth yapısı kurmamıza gerek yoktur, Web için kullandığımız API servisi mobil içinde kullanabiliriz.

3.REST(Representation State) Mimarisi ?

Standart HTTP protokolleri üzerinde çalışan bir mimari yapıdır. HTTP metotları kullanılır. (GET,POST,PUT,DELETE).

Tercih edilmesinin sebebi;Basit, Kolay,Hızlı ,Tekrarlardan kaçınmak ve İş yükümüzü hafifletmesidir.

Örnek olarak bahsetmemiz gerekirse;

Güncel olarak COVID-19 salgını için,DSÖ bizlere hangi ülkeden, ne kadar hasta olduğunun güncel bilgilerini bize günlük olarak aktarılıyor.https://apify.com/covid-19 sitesini incelediğimiz zaman test sayıları, enfekte olan hasta sayısı,iyileşen hasta sayısı,ölüm sayısı ve güncelleme zamanlarını görmekteyiz.Client olarak Server’ dan isteğimizi yaptık ve (Yetkisiz Kullanıcı için) dışa dönük olarak hazırlanan yapıda bu değerleri görmekteyiz , peki arka tarafta bu işlem nasıl işlemektedir; belirlenen yapıları ülkeler DSÖ’nun verdiği formatta sisteme günlük veri girişi yapmaktadır burada ise ülkelerin bu veri girişine yetkisi vardır ve günlük veri girişini sisteme yapmaktadırlar(Yetkili Kullanıcı). bu yapıda geliştirilmiş olan farklı sistemler vardır Twitter Api, Instagram Api,Facebook Api vb. Rest servislerinin kullanımı günümüzde daha da artmıştır.

HTTP Mesajları,

200: Tamam. Standart başarı kodu.
201: Nesne oluşturuldu.
204: Başarılı ama içerik yok.
206: Sayfalama yapılmış bir kaynak listesi döndürmeniz gerektiğinde kullanılır
400: Hatalı istek. .
401: Yetkisiz. Kullanıcının kimliği doğrulanmalıdır.
403 Yasak. Kullanıcının kimliği doğrulanır, ancak bir eylem gerçekleştirme izni yoktur.
404 Bulunamadı. Kaynak bulunamadığında Laravel tarafından otomatik olarak iade edilecektir.
500: Dahili sunucu hatası.
503 Hizmet Kullanılamıyor.

Rest mimarisi verileri Server üzerinden Json ve XML olarak aktarır.

Bizde çoğunlukla uygulamalarımızı internal olarak yazsakta ileride ihtiyaç duyulduğunda dışarıya dönük bir uygulama(REST) yazmamız istendiğinde dikkat etmemiz gereken bazı kurallar vardır,

Semantic Naming

1-Anlaşılabilir İsimlendirme

2- Güvenlik Katmanı

3- Benzer Cevap Modeli

4-Önbellekleme(Cacheable)

5- Doğrulama(Validation)

6- İlişkili API Uçları

7- Versiyonlama(Versioning)

8- Basitlik ve Az Bağımlılık (Simplicity and Dependence)

RESTFUL , rest mimarisini kullananan web api’dir.

Rest mimarisinden kısaca bahsettikten sonra uygulamamızı oluşturmaya başlayabiliriz.

Laravel kurulumu yapmak için,

Ayrıca laravel-docker kurulumunu ayrı bir yazıda ele alacağım.

Windows işletim sistemi için,

Composer (https://getcomposer.org/) paketini bilgisayarımıza indirip kurduktan sonra,

composer global require laravel/installer

Laravel’i bilgisayarımıza kuruyoruz,

Yeni Proje oluşturmak için(C:\wamp64\www),

komut satırı ile

laravel new RestApiProject

yazıp projemizi oluşturuyoruz.

Composer Paketi ile Kurulum Yapmak İçin;

composer create-project --prefer-dist laravel/laravel blog

komutunu çalıştırıyoruz projemizi oluşturduğumuz dizine gelip ,

php artisan serve

komutu ile projemizi çalıştırıyoruz.

Ayrıca Laravel ile detaylı bilgiyi kendi sitesinden bulabilirsiniz.

Oluştuduğumuz laravel projesinin dizin yapısı ;

Public: Bu dizin herkese açık olan belirli düzenlemeler yapılmamışsa Laravel sunucusunun ilk kök dizinidir.Css,Resim,Javascript dosyalarımızı genelde burada tutarız.Laravel ilk girişte kullanıcıyı farklı bir dizine yönlendirir.

App: Çalıştığımız uygulamalarla ilgili dosyaların MCV çatısının controller yapısı ve requestler,middleware bulunur.

Config: Ayar dosyalarının,veritabanı,session ve mail dosya bilgilerinin tutulduğu yerdir.

Database: Veritabani işlemlerinin yapıldığı veritabanında ki bilgilerin yüklenmesi için bulunan dosya yapısıdır.

Resources: Mvc yapısının view dizini burada bulunmaktadır.Kullanıcıların karşısına çıkan görünüm dosyaları burada tutulur.welcome.blade.php.

Storage: App,Framework,Logs dosyalarının tutulduğu dizin yapısıdır.

Tests: Test dosyalarının tutulduğu dizindir.

Vendor: Laravel ve Composer ayar dosyalarının tutulduğu dizindir.Kütüphanelerimizin tutulacağı yerdir.

.env: Veritabani ayarlarini yaptığımız ana dizin altındadır.

Model View Controller=>

Model — — Veritabani işlemleri model kısmında,

View — — Kullanıcılara gösterilen web sayfaları,

Controller — — Kodlarımızı yazdığımız kısım.

Ben lokal’de Mysql kullanıyorum.

.env dosyasında veritabanı ayarlarımızı yapıyoruz.

.env

Veritabanı tanımlamalarımızı yaptıktan sonra,projemize User modelimizi eklemek için

php artisan make:model User -m

-mcr : ile Model ,Controller class’ı ile Veritabani tablo yapısını oluşturabilirsiniz.

Komutunu çalıştırıyoruz,Database klasörü altında oluşan database/migrations/xxxx_create_users_table.php

Tablomuza,

Name,Email ve Password kolonlarını ekliyoruz.

$table->string(‘name’);

$table->string(‘email’)->unique();

$table->string(‘password’);

php artisan migrate komutu ile veritabanımıza user tablomuzu eklemiş oluyoruz.

Laravel kurulumu ve Veritabanı ayarlarımızı yaptıktan sonra,

Authentication işlemi için kullanacağımız passport paketini indiriyoruz,

composer require laravel/passport

Paket içerisinde hazır gelen migration dosyalarının database-migration klasörü altında görebilirsiniz ve Veritabanı tabloları oluşturulması için migrate komutunu çalıştırıyoruz.

php artisan migrate

App\User modelimizin içerisinde aşağıda işaretlenmiş olan kısımları ekliyoruz.Passport paketinde tanımlı olan HasApiTokens — Her kullanıcı için oluşturulacak token için gereklidir.

User.php

Sonra AuthServiceProdier class’ında belirliten değişiklikleri yapıyoruz,

<?php

namespace App\Providers;

use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
‘App\Model’ => ‘App\Policies\ModelPolicy’,
];

/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();

// tanımlamasını yapıyoruz

Passport::routes();

}
}

son olarak,

config/auth.php dosyasında, api driver tanımlamasına passport kullandığımızı belirtiyoruz ve aşağıdaki değişiklikleri yapıyoruz.

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],

Laravel’de Authentication(Passport) kullanımı için oluşturulan bütün kısımları kendi sayfasında da bulabilirsiniz.Ben tekrar anlatmak istedim.Bundan sonra api oluşturmalarını yapmaya başlayacağız.

İlk olarak routes/api.php dosyamızda aşağıdaki tanımlamaları yapıyoruz,

Route::group([

‘prefix’ => ‘v1’

], function () {

Route::post(‘login’, ‘AuthController@login’);
Route::post(‘register’, ‘AuthController@register’);

});

Yukarıda Route tanımlamamızı,

…\api\v1\login — — kullanıcı girişi

…\api\v1\register — — kullanıcı kayıt

Şeklinde yapıyoruz , rest api mimarisinde belirtilen efektif uri mantığına uygun endpointlerimizi tanımlıyoruz.

php artisan make:controller AuthController

Komutu ile dosyamızı oluşturuyoruz . Dosyamızın içerisine login ve register methodlarını tanımlıyoruz,

Biz burada her kullanıcının mail adresinin unique olduğunu veritabanı oluştururken belirtmiştik kullanıcı kayıdı için gerekli olan Name,Email ve Password validation tanımlamalarımızı yaptıktan sonra kullanıcımızı save() komutu ile oluşturuyoruz.

Kullanıcı Giriş metodunda ise bize gerekli olan Email ve Password kısmını kullanıcıdan istiyoruz gerekli validationları sağladıktan sonra access_token’ i oluşturup kullanıcı girişini yapıyoruz.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use App\User;

class AuthController extends Controller
{
public $successStatus = 200;

/**
* Kullanıcı Oluşturma
*
* @param [string] name
* @param [string] email
* @param [string] password
* @return [string] message
*/
public function register(Request $request)
{
$request->validate([
‘name’ => ‘required|string’,
‘email’ => ‘required|string|email|unique:users’,
‘password’ => ‘required|string|confirmed’
]);

$user = new User([
‘name’ => $request->name,
‘email’ => $request->email,
‘password’ => bcrypt($request->password)
]);

$user->save();

$message[‘success’] = ‘Kullanıcı Başarıyla Oluşturuldu.’;

return response()->json([
‘message’ => $message
], 201);
}

/**
* Kullanıcı Girişi ve token oluşturma
*
* @param [string] email
* @param [string] password
* @return [string] token
* @return [string] token_type
* @return [string] expires_at
* @return [string] success
*/
public function login(Request $request){

$request->validate([
‘email’ => ‘required|string|email’,
‘password’ => ‘required|string’
]);

$credentials = request([‘email’, ‘password’]);

if(Auth::attempt($credentials)){
$user = Auth::user();
$message[‘token’] = $user->createToken(‘MyApp’)->accessToken;
$message[‘token_type’] = ‘Bearer’;
$message[‘experies_at’] = Carbon::parse(Carbon::now()->addWeeks(1))->toDateTimeString();
$message[‘success’] = ‘Kullanıcı Girişi Başarılı’;

return response()->json([‘message’ => $message], $this->successStatus);
}
else{
return response()->json([‘error’=>’Unauthorised’], 401);
}
}

}

Projemizi çalıştırıyoruz,

php artisan serve

Son olarak yazdıklarımızı test ediyoruz, ben test için postman kullanıyorum,

Kullanıcı Kayıt
Kullanıcı Giriş

Laravel ve Rest mimarisi hakkında kısa bilgiler verdikten sonra Laravel’in kendi mevcut yapısında bulunan Authentication(Passport) yapısını projemize tanımladık ve gerekli ayarları yaptıktan sonra, kullanıcı kayıt ve girişi için iki tane basit şekilde api oluşturduk ve Test işlemlerimizi bu bölümde yapmış olduk.

Tabi ki şu an rest mimarisi kuralları için uygun bir yapıda değiliz bir sonra ki yazımda Hesap Doğrulama(Email ve Phone) işlemleri birlikte Kullanıcı Modelimiz için kullanacağımız Api’leri tamamlamayı düşünüyorum eksik ve yanlışlarımı görürseniz bana dönüş yapmanız beni mutlu eder.

Bu yazı serisinde hedeflediğim nokta Rest Api’ler ile geliştirilmiş kapsamlı bir proje oluşturmayı düşünüyorum. Bu proje detaylarında,

Laravel Rest Api Kullanımı,

Laravel Docker Kullanımı,

Laravel Swagger Kullanımı,

Laravel Task Kullanımı,

Laravel Sanctum Kullanımı,

Laravel Vue Js Kullanımı,

Laravel CRUD operasyonları,

Laravel Queue kullanımı,

vb konuları yapmış olacağız.

Oluşturduğumuz Rest Api’leri farklı bir yazı dizisinde React Native ile uygulama geliştirirken kullanmayı düşünüyorum.

Bölüm-2 ;

Bölüm-3 ;

Bölüm-4 ;

Proje dosyamız github’da;

Postman üzerinde endpointler verilmiştir;

--

--