Laravel Api Oluşturma
Herkese merhabalar, bugun hep beraber Laravel kullanarak temel bir api nasıl oluşturabiliriz sizlere anlatmaya çalışacağım.
Api Nedir?
API(Application Programming Interface) “Uygulama Programlama Arayüzü “ diye adlandırılır. APIler sayesinde bir uygulamanın işlevlerine dışarıdan veya uzaktan erişilip bu işlevleri kullanabiliriz. APIler ile birlikte bir sunucunun üzerindeki uygulamaya farklı platformlardan ulaşabilir ve geriye cevap alabileceğimiz yapılardır.
Proje Oluşturma
composer create-project --prefer-dist laravel/laravel api
Ardından terminal ekranında php artisan serve diyerek projeyi ayağa kaldırıyoruz.
Oluşturduğumuz proje içerisinde .env
dosyası üzerinde bağlanacağımız database ayarlarını gerçekleştirelim. (Örneğimizde Database olarak Mysql kullanımıştır.)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=apitestdb
DB_USERNAME=root
DB_PASSWORD=
Laravel standart mvc(Model, View, Controller) yapısını kullanmaktadır.
Aşağıdaki komut ile beraber app/Http/Controller/ProductController.php
ProductController oluşturulur.
php artisan make:controller ProductController
Aşağıdaki komut ile beraber app/Product.php
Product Model oluşturulur.
php artisan make:model Product
Aşağıdaki komut ile beraber database/migration/create_product_table.php
migration (Migrationlar ile beraber db tablolarımızı komut satırı ile beraber kolayca oluşturabiliriz.) oluşturulur.
php artisan make:migration create_product_table
database/migration/create_product_table.php
dosyamızı açalım ve tabloda basit bir örnek olması açısında ad ve fiyat alanında iki alan tanımlayalım.
Schema::create('product', function (Blueprint $table) {
$table->id();
$table->string("ad");
$table->string('fiyat');
$table->timestamps();
});
daha sonra aşağıdaki komut çalıştırılarak bağlı olduğumuz veritabanında tablonun oluşturulduğunu göreceksiniz.
php artisan migrate
İlgili tanımlamalarımız gerçekleştikten sonra router/api.php
dosyası içerisinde API mize gelecek olan istekleri adresleme işlemlerini gerçekleştirelim.
(Uygulamamıza gelecek olan istekleri ve metotlarını belirleyelim)
Http methodları hakkında daha fazla bilgi için buraya tıklayarak daha fazla bilgi edinebilirsiniz.
Route:: dedikten sonra ilgili API ye hangi method ile ulaşacağımızı belirtiyoruz, ilk parametre urldeki adı örneğin https:localhost/api/product
ikinci parametre ise ilgili route geldiğinde hangi controlleri çalıştıracağı @ işaretinden sonraki kısım ise ilgili controllerdaki hangi methodun tetikleneceğidir.
Uygulamamızda 4 adet (Create,Read,Update,Delete) için methodlarımız bulunmaktadır.
Sırasıyla;
index:(Read) tüm verilerimizi almak için,
store:(Create) veri kaydetmek için,
destroy:(Delete) veri silmek için,
put:(Update) veri güncellemek için
Route::get('product',"ProductController@index");
Route::post('product',"ProductController@store");
Route::delete('product/{id}',"ProductController@destroy");
Route::put('product/{id}',"ProductController@update");
Şimdide app/Http/Controllers/ProductContller.php
dosyamızı açalım ve ilgili kodları yazalım.
Index Methodumuz;
use App\Product;public function index(){
return response()->json(Product::all(),200);
}
Product modelimizi import ettikten sonra, istek yapılan istemciye response(cevap) olarak json döneceğimizi söyleyip,Product modeli üzerinden veri tabanındaki bütün kayıtları ilgili istemciye gönderiyoruz cevap kodu olarakta 200(OK) kodunu geriye cevap olarak veriyoruz.
örnek olması açısından postman üzerinden tanımladığımız rotaya GET isteği gönderdiğimizde veri tabanında herhangi bir kayıt olmadığı için geriye boş bir array cevabı verilmiş oldu.
Http kodları hakkında daha detaylı bilgi için buraya tıklayarak daha detaylı bilgi edinebilirsiniz.
Store Methodumuz;
use App\Product;
public function store(Request $request){
$product=new Product();
$product->ad=$request->ad;
$product->fiyat=$request->fiyat;
$product->save();
return response()->json($product,201);
}
İstemciden bize gönderilen istek(Request örnekte json)üzerinden Product modelimiz için bir nesne üretip ilgili alanlarımızı istemciden gelen istekdeki verilerimiz ile doldurup model üzerinden veri tabanına kayıt işlemimizi sağlayıp cevap olarak oluşturmuş olduğumuz kaydı veriyoruz.
Destroy Methodumuz;
İstemciden bize gelen adresteki id değerini yakalayıp,Product modeli üzerinden veri tabanından ilgili id ye sahip veri silinip geriye cevap olacak ilgili ürünün silindiğine dair bir mesaj verilecektir.
public function destroy($id){
Product::destroy($id);
return response()->json(['message'=>$id.'Numaralı Ürün Başarıyla Silindi'],200);
}
Update Methodumuz;
İstemciden bize gelen adresteki id değerini yakalayıp, önce ilgili veriyi Product modeli üzerinden bulup ardından request içerisindeki yeni veriler ile güncelleyip geriye cevap olarak güncellediğimiz veriyi veriyoruz.
public function update(Request $request,$id){
$product = Product::find($id);
$product->ad = $request->ad;
$product->fiyat = $request->fiyat;
$product->update();
return response()->json($product,200);
}
Herkse İyi Çalışmalar :)