Laravel ile Restful Api Yapımı

MEHMET DÜZOYLUM
4 min readMar 6, 2021

Rest Nedir?

REST(Representational State Transfer), web üzerindeki bilgisayar sistemleri arasında standartlar sağlamak ve sistemlerin birbiriyle iletişim kurmasını kolaylaştırmak için mimari yaklaşımdır. Bu mimariyi kullanan yapılara Restful yapılar denmektedir. Bu yapı Soap için kullanımı zorunlu olan WSDL katı kurallarından sıyrılmak ve XML dışında istenilen bir biçimde veri alış verişini sağlamak amacıyla geliştirilmiş yapılardır.

Rest yapısı ile XML,JSON gibi yapılarla çalışabilirken, Soap yapısı sadece XML data yapısı ile çalışmaktadır. Json XML’e göre daha basit hafiftir bu açıdan XML’e nazaran çok daha hızlı ve kullanışlıdır.

Json Yapısı

Json (JavaScript Object Notation) insanlar tarafından okunabilen bir veri değişim biçimidir. Json türündeki veriler key (anahtar) ve value (değer) olarak iki parçadan oluşmaktadır.

5 Veri tipini içinde barındır;
- Number
- String
- Array
- Boolean
- Object
- null

Örnek Json Kod Yapısı:
{
“name”: “Mehmet”,
“city”: “Ankara”,
“birthYear”: 1991,
“isCoder”: true
}

Http’de Kullanılan Rest Metodları

Rest mimari yapısında sıklıkla kullanılan Http metodları :

GET : Verileri sunucudan almak için kullanılır
POST : Sunucuya veri yüklemek için kullanılır
PUT: Veri üzerinde güncelleme yapmak için kullanılır
DELETE: Veri silmek için kullanılır.

Yaygın olarak kullanılan Http response’lar:

200 OK — İşlem başarılı.
400 BAD REQUEST— Hatalı istek veya yetkilendirme hatası için kullanılır.
401 UNAUTHORIZED — Yetkilendirme hatası
404 NOT FOUND— İstenilen işlem bulunamadı
405 METHOD NOT ALLOWED — Http yöntemi kabul edilmemektedir.
500 INTERNAL SERVER ERROR — Sunucuda bir hata oluştu

Laravel Api

Bilgisayarınız da Composer’un kurulu olduğunu kabul ederek ilerliyor olacağım. Değil ise buradan indirebilirsiniz.

İlk olarak Laravel in son sürümünü bilgisayarımıza indiriyoruz.

composer create-project laravel/laravel api-proje

(Eğer composer kodu çalışmaz ise composer’un terminal ortamında çalışması için gereken işlemleri takip ederek çalışmasını sağlayabilirsiniz. Şu linkten gerekli adımları takip edebilirsiniz)

Yapımızı Mysql veritabanı üzerinden ilerleteceğiz. Bu yüzden bilgisayarınızda Xampp kurabilir ve bunun üzerinden mysql database işlemlerini yürütebiliriz.

localhost/phpmyadmin üzerinden RestApiDb adında bir veritabanı oluşturuyoruz

Sonrasında .env dosyasını bu yapıya uygun olarak düzenliyoruz. Sonrasında kodların aktif olması için
php artisan config:clear
kodunu kullanabiliriz.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=RestApiDb
DB_USERNAME=root
DB_PASSWORD=

Database bağlantısı kurulma adımı sonrası tablomuzu migration ile oluşturuyoruz.

php artisan make:migration create_city

Oluşturmuş olduğumuz migration dosyası içerisine şu şekilde kodumuzu ekliyoruz.

public function up()
{
Schema::create('cities', function (Blueprint $table) {
$table->id()->autoIncrement();
$table->text("city_name");
$table->timestamps=false;
});
}

Ardından gerekli kodu çalıştırarak tablomuzun oluşmasını sağlıyoruz.

php artisan migrate

Model dosyamızı oluşturmak için gerekli kodu çalıştırmamız gerekmekte.

php artisan make:model City

Model dosyası oluştuktan sonra içeriğini düzenliyoruz.

class Cities extends Model
{
use HasFactory;

protected $primaryKey = 'id';
protected $table = 'cities';
protected $fillable = ['city_name'];
public $timestamps=false;

public function scopeSearchCity($query,Request $request)
{
return $query->where('city_name', 'LIKE', '%' . $request->input("q") . '%');
}
}

Routes içerisindeki api.php içerisinden yönlendirmelerimizi düzenliyoruz.

//Şehirleri Getir
Route::get('/cities',[CityController::class,'getCities']);

//Şehri Getir
Route::get('/city'.'/{cities}',[CityController::class,'getCityById']);

//Şehir Kaydet
Route::post('/city',[CityController::class,'saveCity']);

//Şehir Guncelle
Route::put('/city/{cities}',[CityController::class,'updateCity']);

//Şehir Silme
Route::delete('/city/{cities}',[CityController::class,'deleteCity']);

//Şehir Arama
Route::get('/city',[CityController::class,'searchCity']);

Model dosyamızı da oluşturduktan sonra Controller yapımız içerisinden bir bir controller oluşturarak api.php de belirtmiş olduğumuz endpoint leri oluşturacağız.

php artisan make:controller CityController

Daha sonra CityController içerisine metotlarımızı yazıyoruz.

Tüm Şehirleri Getir

public function getCities()
{
$cities = Cities::all();
return response()->json($cities);
}

Istenilen Id’ye Göre Şehri Getir

public function getCityById(Cities $cities)
{
return response()->json($cities);
}

Şehri Kaydet

public function saveCity(Request $request)
{
$validator = Validator::make($request->all(),
[
"city_name" => "required|min:3"
]);

if ($validator->fails()) {
return response()->json('Lütfen Şehir Adını Doğru Giriniz');
}

$city = new Cities();
$city->city_name = $request->input("city_name");
$city->save();

return response()->json('Şehir Başarılı Bir Şekilde Eklendi');
}

Şehiri Güncelle

public function updateCity(Request $request, Cities $cities)
{

$validator = Validator::make($request->all(),
[
"city_name" => "required|min:3"
]);

if ($validator->fails()) {
return response()->json('Lütfen Şehir Adını Doğru Giriniz');
}

$cities->update(["city_name" => $request->input("city_name")]);
return response()->json('Şehir Başarılı Bir Şekilde Güncellendi');

Şehri Sil

public function deleteCity(Cities $cities)
{
$cities->delete();
return response()->json('Şehir Silme İşlemi Başarılı');
}

Şehri Bul

public function searchCity(Request $request)
{
$validator = Validator::make($request->all(),
[
"q" => "required|min:1"
]);

if ($validator->fails()) {
return response()->json('Lütfen Şehir Adını Doğru Giriniz');
}

$citySearch = Cities::searchCity($request)->get();
return response()->json('Arama Sonucunuz');
}

Projemizi çalıştırdıktan sonra, Postman üzerinden yapımızı test edebiliriz.

php artisan serve

Tablomuzdaki mevcut veriler.

Postman

Postman ile api projemizi test edebiliriz. Buradan indirebilirsiniz.

http://127.0.0.1:8000/api/cities (GET)

http://127.0.0.1:8000/api/city/4 (DELETE)

Umarım faydalı olmuştur. Başarılar Dilerim :)

--

--