Airline Company API

Airline Company API

Backend

JWT tabanlı kimlik doğrulama ile havayolu bilet yönetim sistemi REST API

Kullanılan Teknolojiler

Node.jsExpress.jsMySQLJWTSwaggerHeroku

1Genel Bakış

Airline Company API, kurgusal bir havayolu şirketi için geliştirilmiş kapsamlı bir bilet yönetim sistemidir. Proje, admin kullanıcıları ve mobil uygulama müşterileri için farklı özelliklere sahip iki ana kullanıcı grubunu destekler. Admin kullanıcıları sistem üzerinden uçuş planlaması yapar, kapasite raporları oluşturur ve tüm sistemi yönetir. Mobil uygulama kullanıcıları ise müşteri rolündedir ve uçuş arama, bilet satın alma ve check-in işlemlerini gerçekleştirir. API, RESTful mimaride tasarlanmış olup Heroku üzerinde deploy edilmiştir. MySQL veritabanı Google Cloud platformunda barındırılmaktadır.

2Kimlik Doğrulama ve Güvenlik

JWT (JSON Web Token) tabanlı güvenli kimlik doğrulama sistemi kullanılmaktadır. Admin kullanıcıları login olurken kullanıcı adı ve şifre ile doğrulama yapar ve 1 saatlik geçerlilik süresi olan bir JWT token alır. Token yapısı: - Header: Algoritma ve token tipi - Payload: Kullanıcı bilgileri ve yetkilendirme - Signature: Güvenlik imzası Her admin işleminde (uçuş ekleme, rapor oluşturma) Authorization header'ında Bearer token gönderilmesi zorunludur. Token süresi dolduğunda kullanıcının tekrar login olması gerekir. Mobil uygulama kullanıcıları için authentication gerektirmez, bu sayede misafir kullanıcılar da uçuş sorgulayabilir ve bilet alabilir.

3Admin Paneli Özellikleri

Admin kullanıcıları sistem üzerinde geniş yetkilere sahiptir: 1. Uçuş Yönetimi (POST /api/admin/flights): - Yeni uçuş rotaları ekleme - Uçuş tarihi, saati ve fiyat belirleme - Kalkış ve varış noktalarını tanımlama - Uçak kapasitesini ayarlama (koltuk sayısı) - Tekrarlayan uçuş programları oluşturma 2. Kapasite Raporları (POST /api/admin/creports): - Belirli tarih aralığı için doluluk raporları - Uçuş bazında satılan bilet sayısı - Boş koltuk analizi - Gelir tahminleri Tüm admin işlemleri JWT token ile korunur ve loglama sistemi ile takip edilir.

4Mobil Uygulama Özellikleri

Mobil uygulama kullanıcıları için üç ana işlev sunulur: 1. Uçuş Sorgulama (GET /api/flights): - Tarih aralığına göre filtreleme - Kalkış havalimanı seçimi - Varış havalimanı seçimi - Müsait uçuşları listeleme - Fiyat ve süre bilgilerini görüntüleme - Pagination ile sayfalama (büyük veri setleri için) 2. Bilet Satın Alma (POST /api/tickets/buy): - Yolcu bilgilerini girme (ad, soyad, kimlik) - Uçuş seçimi - Otomatik bilet ID üretimi - Koltuk kapasitesi kontrolü - Bilet onay bilgisi alma 3. Check-in İşlemi (POST /api/tickets/checkin): - Bilet ID ile sorgulama - Yolcu doğrulama - Check-in statüsü güncelleme - Boarding pass bilgileri

5Veritabanı Yapısı

MySQL veritabanı kullanılarak iki ana tablo ile veri yönetimi sağlanır: 1. Flights Tablosu: - flight_id: Benzersiz uçuş kimliği - origin: Kalkış havalimanı - destination: Varış havalimanı - departure_time: Kalkış zamanı - arrival_time: Varış zamanı - price: Bilet fiyatı - capacity: Toplam koltuk sayısı - available_seats: Müsait koltuk sayısı 2. Tickets Tablosu: - ticket_id: Otomatik oluşturulan bilet ID - flight_id: İlişkili uçuş kimliği (foreign key) - passenger_name: Yolcu adı - passenger_id: Yolcu kimlik bilgisi - purchase_date: Satın alma tarihi - checkin_status: Check-in durumu (boolean) mysql2 kütüphanesi ile connection pooling yapılarak performans optimize edilmiştir.

6API Endpoint Yapısı

RESTful API prensiplerine uygun endpoint tasarımı: Admin Endpoints (JWT Gerekli): • POST /api/auth/login Body: { username, password } Response: { token, expiresIn } • POST /api/admin/flights Header: Authorization: Bearer <token> Body: { origin, destination, date, time, price, capacity } Response: { flightId, message } • POST /api/admin/creports Header: Authorization: Bearer <token> Body: { startDate, endDate } Response: { flights: [], totalRevenue, occupancyRate } Public Endpoints: • GET /api/flights Query: ?origin=IST&destination=ANK&date=2024-01-01 Response: { flights: [], pagination } • POST /api/tickets/buy Body: { flightId, passengerName, passengerId } Response: { ticketId, confirmationCode } • POST /api/tickets/checkin Body: { ticketId, passengerId } Response: { success, boardingPass }

7Teknik Uygulama Detayları

Projenin teknik implementasyonunda dikkat edilen önemli noktalar: 1. Bilet ID Üretimi: Yolcu adına göre algoritmik ID üretimi yapılır. Örnek: "John Doe" + timestamp + random hash = JD20240101ABC123 2. Tekrarlayan Uçuşlar: Admin, belirli günlerde düzenli sefer ekleyebilir. Sistem, batch insert ile performanslı kayıt yapar. 3. Kapasite Yönetimi: Her bilet satışında available_seats değeri otomatik güncellenir. Transaction kullanılarak data consistency sağlanır. 4. Pagination: Büyük veri setlerinde sayfa başına 20 sonuç gösterilir. LIMIT ve OFFSET kullanılarak SQL sorguları optimize edilir. 5. Error Handling: Tüm endpoint'ler try-catch blokları ile korunur. HTTP status kodları (200, 400, 401, 500) doğru kullanılır. 6. Swagger Dokümantasyon: API endpoints, request/response formatları ve örnek kullanımlar Swagger UI üzerinden görüntülenebilir.

8Deployment ve Hosting

Proje production ortamında şu şekilde deploy edilmiştir: Platform: Heroku - Node.js buildpack kullanımı - Environment variables ile config yönetimi - Otomatik SSL sertifikası - Dyno scaling desteği Database: Google Cloud MySQL - Cloud SQL instance - Otomatik backup sistemi - Connection pooling - IP whitelist güvenliği CI/CD: - GitHub repository ile entegrasyon - Push to main branch → otomatik deploy - Environment-based configuration Monitoring: - Heroku logs ile hata takibi - Database query performance monitoring - API response time tracking

9Karşılaşılan Zorluklar ve Çözümler

Proje geliştirme sürecinde karşılaşılan teknik zorluklar: 1. Token Yönetimi: Problem: Token expiration handling Çözüm: 1 saatlik süre + refresh token mekanizması tasarımı 2. Concurrency Kontrolü: Problem: Aynı uçuşa eş zamanlı bilet satışı Çözüm: MySQL transaction ve row locking kullanımı 3. Tarih Formatları: Problem: Farklı timezone'lar için tarih yönetimi Çözüm: UTC standardına geçiş ve client-side conversion 4. Database Performance: Problem: Büyük veri setlerinde yavaş sorgu Çözüm: Index oluşturma ve pagination implementasyonu 5. Heroku Deployment: Problem: Environment variables ve port binding Çözüm: process.env kullanımı ve dynamic port configuration Bu zorluklar, REST API geliştirme ve production deployment konusunda derinlemesine bilgi kazandırdı.

Özellikler

  • JWT tabanlı güvenli kimlik doğrulama
  • Admin paneli: Uçuş ekleme ve kapasite raporları
  • Mobil app: Uçuş arama, bilet satın alma, check-in
  • Tarih, kalkış ve varış noktasına göre gelişmiş arama
  • Tekrarlayan uçuş programları desteği
  • Yolcu adına göre otomatik bilet ID üretimi
  • Pagination ile büyük veri yönetimi
  • Swagger API dokümantasyonu

Görseller

Airline Company API screenshot 1
1 / 6