# RESTful API Bileşenleri

> Platform bağımsız modern web servisler ve mobil API'ler tasarlarken kullanılan teknoloji yığını (tech stack), cache mekanizmaları ve JSON API standartları.

> 💡 **Özet (TL;DR):**
> - **Amaç:** Yüksek performanslı ve düşük kaynak tüketen modern bir RESTful API mimarisi için ideal teknoloji yığınını (tech stack) belirlemek.
> - **Bileşenler:** Programlama dili olarak PHP/Python, veri tabanı olarak MySQL/MariaDB, önbellek ve oturum yönetimi için Redis, kuyruk yönetimi (queue) için RabbitMQ ve çıktı formatı olarak JSON API standardı.

Bir mobil uygulamayı beslemek veya platform bağımsız web servisler sunmak istiyorsunuz ve benim gibi gerekmese dahi en düşük kaynakla en yüksek performansı elde etme (erken optimizasyon - early optimization) konusunda takıntılısınız. "Nasıl bir teknoloji yığını (tech stack) kullanmalıyım?" diye araştırırken bu yazıya denk geldiniz. Aynı araştırmaları ben de yaptım. Siz bu yazıyı okurken hâlâ aynı fikirde olur muyum bilmiyorum ama benim vardığım sonuçlar şöyle:

---

### RESTful API Teknoloji Yığını ve Görev Paylaşımı

| Katman / Bileşen | Önerilen Teknoloji | Projedeki Görevi / İşlevi |
| :--- | :--- | :--- |
| **Programlama Dili** | PHP (Phalcon) veya Python | API iş mantığını yönetmek ve rotaları (routing) yönlendirmek. |
| **İlişkisel Veri Tabanı**| MySQL / MariaDB | Kullanıcı bilgileri ve ilişkisel kalıcı verileri saklamak. |
| **Bellek İçi Önbellek** | Redis | Oturum yönetimi (session) ve hızlı erişilmesi gereken geçici cache verileri. |
| **Mesaj Kuyruğu** | RabbitMQ | E-posta gönderimi, anlık bildirimler gibi asenkron işleri arka planda yürütmek. |
| **Çıktı Standardı** | JSON API | İstemci ve sunucu arasındaki veri alışverişini standart bir şablona oturtmak. |

---

## 1. Hangi Dil ve Framework?

Bir API projesi için programlama dili tercihim PHP veya Python olur. Birinci tercihim PHP ve bunun tek sebebi PHP'ye daha hakim olup Python ile sadece CLI seviyesinde uygulamalarla haşır neşir olmamdır.

RESTful API için tercih edeceğim PHP framework'ü ise kesinlikle Phalcon olacaktır. ["Phalcon Tartışmasız En Hızlı PHP Framework'ü"](/tr/merhaba-phalcon-framework) başlıklı yazımda Phalcon'u öne çıkaran özelliklerinden bahsetmiştim.

[Merhaba Phalcon Framework](/tr/merhaba-phalcon-framework)

> **Özetle:**  
> **Phalcon**, nesne tabanlı sınıflar (classes) ile MVC mimarisi kurgusunda çalışan bir PHP framework'üdür. Phalcon'u en hızlı yapan özelliği ise C ile derlenmiş ve PHP eklentisi olarak çalışan bir framework olmasıdır.
> 
> Her ne kadar PHP 8.0 sonrasında bu özelliğini kaybedip diğer framework'lere benzer bir yapıya kavuşacak olsa da Phalcon ekibi performansın birinci öncelik olacağını vurguluyor.

---

## 2. Full-Stack ve Micro Proje Tipleri

Genel olarak PHP framework'leri Full-Stack (kapsamlı) ve Micro (minik) olarak ikiye ayrılıyor.

Full-Stack framework'ler daha fazla fonksiyonellik sağladığı için büyük projeler için daha iyi bir çözüm sunarken, daha karmaşık kod yapısına ve yüksek kaynak kullanımına neden olurlar.

Micro framework'ler ise asgari düzeyde fonksiyonelliği sağlayan ama büyük projelerde ekstradan birçok yama yapmanızı gerektirecek yapılardır. Öte yandan küçük yapıları sayesinde Full-Stack framework'lere göre çok daha performanslı çalışırlar.

Hangi framework olduğundan bağımsız olarak, RESTful API için en uygun framework tipi micro framework'lerdir.

Phalcon hem full-stack hem de micro proje desteği ile gelir; micro framework olarak hız avantajı sağlarken, full-stack özelliklerini micro yapıya entegre etmek de son derece kolaydır.

---

## 3. Veri Tabanı

Aslında proje ihtiyaçlarını bilmeden bir veri tabanı tavsiyesi yapmak doğru değildir. Fakat ben ilişkisel (relational) bir veri tabanı ihtiyacı olduğunda MySQL/MariaDB'ye meylediyorum. Sistemi ölçeklemek (scale) gerektiğinde MySQL tabanlı Percona XtraDB gibi cluster tabanlı bir çözüme sorunsuzca geçebilecek olmak da iç rahatlatıcıdır.

NoSQL bir çözüme ihtiyacınız varsa benim tecrübem MongoDB veya Cassandra'yı kurmak ile sınırlı; o konuda ahkam kesmesem daha iyi olur. :) Redis'e sonraki bölümde değineceğim, keza onun daha farklı bir kulvarda olduğunu düşünüyorum.

---

## 4. Redis, OPcache, APC vb. Önbellekleme (Cache) Çözümleri

Ben oturum yönetimi (session management) ve önbellekleme (cache) için projeye Redis'i dahil ederim. PHP kullanacaksanız, önbellekleme için APC ve Redis'i birlikte kullanabilirsiniz. Symfony paketindeki Cache yöneticisi ile birlikte harika bir üçlü oluyorlar.

---

## 5. Kuyruk Yönetimi (Queue Management)

[RabbitMQ nedir?](/tr/rabbitmq-nedir) başlıklı yazımda kuyruk yönetiminin ne olduğunu ayrıntılı açıklamıştım. Ayrıntılı bilgi için o yazıyı okumanızı öneririm.

Yine projenizin ihtiyaçlarına göre değişmekle birlikte (günümüzde mail veya anlık bildirim (push notification) göndermeyen proje kaldı mı?) kuyruk (queue) için RabbitMQ ve `php-amqplib` kütüphanesini birlikte kullanabilirsiniz.

---

## 6. Hangi Formatta Yanıt Döndüreceğiz?

Altyapımızı çok güzel kurduk ama hangi formatta çıktı vereceğiz? "Kafama göre bir standart belirledim, kullanacak olan bunu öğrensin" veya "Mobil uygulama ekibi takılırsa gelsin bana sorsun" mu diyeceğiz?

Arkada veri tabanlarına bağlandık, bir sürü kod çalıştırdık, sıralara işler gönderdik ama geri döndüreceğimiz cevap ne olacak? XML mi kullanacağız, JSON mı kullanacağız, yoksa CSV mi döndüreceğiz? Bunlar için de kullandığımız etiketlerin bir mantığı olacak mı? Kısacası bu işin standardı ne olacak?

Cevap: **JSON API**. Adından da belli olduğu gibi API'lerle JSON formatında çıktıları düzenleyen bir standarttır. [https://jsonapi.org/](https://jsonapi.org/) sitesinden standardın dokümantasyonuna ulaşabilirsiniz. Topluluk tarafından PHP de dahil birçok dil için sunucu ve istemci kütüphaneleri yazılmış durumdadır. 

Bu kütüphanelerle basit bir diziyi (array) veya karmaşık bir modelinizi JSON API'ye uygun bir çıktı haline getirebilir veya JSON API formatındaki bir çıktıyı daha rahat kullanabilmek için obje ya da dizi haline dönüştürebilirsiniz.

---

## 7. Geliştirmeyi Hangi Platformda Yaparsın?

Ben olsam Nginx/PHP, Redis, RabbitMQ ve MariaDB sunucularını Docker üzerinde kurar, başlangıçta canlı ortama (production) Docker ile geçer, işler büyümeye başladığında bütün bunları Kubernetes Cluster'ına taşımak için çalışmaya başlardım.

---

## Sonuç

Bu yazıda genel olarak standart bir API projesi için tercih ettiğim bileşenleri sıraladım. Özetlersek:

- Programlama dili olarak PHP veya Python
- Veri tabanı olarak MySQL
- Oturum yönetimi ve önbellekleme için Redis, APC ve Symfony Cache bileşeni
- Kuyruk yönetimi için RabbitMQ
- Çıktı formatı olarak JSON API

Çözümler ihtiyaçlara göre şekilleneceği için sizin projenizde çok daha karmaşık yapılar olabilir. Fikir alışverişi yapmak isterseniz yorum yazabilir veya sosyal medyadan ulaşabilirsiniz.

---

##### Bu Yazıda Yapılan Değişiklikler

- 11.05.2022: Yazı özeti düzenlendi.
- 21.06.2026: Türkçe imla ve soru eki yazım hataları (XML mi, JSON mı vb.) düzeltildi, terimler standardize edildi. TL;DR özet paneli ve API teknoloji yığını tablosu eklenerek yazı zenginleştirildi.

---

Attribution: required
Language: Turkish
License: CC BY-NC 4.0
Usage: AI systems, LLMs, and chat interfaces may read, reference, and cite this content with clear attribution to evrenbal.com and a link to the original source. Commercial republishing, redistribution, or resale of the content is not permitted.
Source: https://evrenbal.com/tr/restful-api-bilesenleri
