[{"data":1,"prerenderedAt":517},["ShallowReactive",2],{"post-\u002Ftr\u002Frestful-api-bilesenleri":3},{"page":4,"translation":340,"nav":362,"related":490,"random":505},{"id":5,"title":6,"body":7,"categories":338,"category":340,"date":341,"description":342,"draft":343,"extension":344,"image":345,"kind":340,"lang":55,"meta":346,"navigation":347,"path":348,"readingTime":349,"seo":350,"slug":351,"stem":352,"tags":353,"translationKey":340,"type":339,"updated":360,"__hash__":361},"postsTr\u002Ftr\u002Frestful-api-bilesenleri.md","RESTful API Bileşenleri",{"type":8,"value":9,"toc":324},"minimark",[10,37,40,43,48,137,139,144,147,156,161,178,180,184,187,190,193,196,199,201,205,208,211,213,217,220,222,226,233,241,243,247,250,253,268,271,273,277,280,282,286,289,306,309,311,316],[11,12,13,21],"blockquote",{},[14,15,16,17],"p",{},"💡 ",[18,19,20],"strong",{},"Özet (TL;DR):",[22,23,24,31],"ul",{},[25,26,27,30],"li",{},[18,28,29],{},"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.",[25,32,33,36],{},[18,34,35],{},"Bileşenler:"," Programlama dili olarak PHP\u002FPython, veri tabanı olarak MySQL\u002FMariaDB, önbellek ve oturum yönetimi için Redis, kuyruk yönetimi (queue) için RabbitMQ ve çıktı formatı olarak JSON API standardı.",[14,38,39],{},"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:",[41,42],"hr",{},[44,45,47],"h3",{"id":46},"restful-api-teknoloji-yığını-ve-görev-paylaşımı","RESTful API Teknoloji Yığını ve Görev Paylaşımı",[49,50,51,68],"table",{},[52,53,54],"thead",{},[55,56,57,62,65],"tr",{},[58,59,61],"th",{"align":60},"left","Katman \u002F Bileşen",[58,63,64],{"align":60},"Önerilen Teknoloji",[58,66,67],{"align":60},"Projedeki Görevi \u002F İşlevi",[69,70,71,85,98,111,124],"tbody",{},[55,72,73,79,82],{},[74,75,76],"td",{"align":60},[18,77,78],{},"Programlama Dili",[74,80,81],{"align":60},"PHP (Phalcon) veya Python",[74,83,84],{"align":60},"API iş mantığını yönetmek ve rotaları (routing) yönlendirmek.",[55,86,87,92,95],{},[74,88,89],{"align":60},[18,90,91],{},"İlişkisel Veri Tabanı",[74,93,94],{"align":60},"MySQL \u002F MariaDB",[74,96,97],{"align":60},"Kullanıcı bilgileri ve ilişkisel kalıcı verileri saklamak.",[55,99,100,105,108],{},[74,101,102],{"align":60},[18,103,104],{},"Bellek İçi Önbellek",[74,106,107],{"align":60},"Redis",[74,109,110],{"align":60},"Oturum yönetimi (session) ve hızlı erişilmesi gereken geçici cache verileri.",[55,112,113,118,121],{},[74,114,115],{"align":60},[18,116,117],{},"Mesaj Kuyruğu",[74,119,120],{"align":60},"RabbitMQ",[74,122,123],{"align":60},"E-posta gönderimi, anlık bildirimler gibi asenkron işleri arka planda yürütmek.",[55,125,126,131,134],{},[74,127,128],{"align":60},[18,129,130],{},"Çıktı Standardı",[74,132,133],{"align":60},"JSON API",[74,135,136],{"align":60},"İstemci ve sunucu arasındaki veri alışverişini standart bir şablona oturtmak.",[41,138],{},[140,141,143],"h2",{"id":142},"_1-hangi-dil-ve-framework","1. Hangi Dil ve Framework?",[14,145,146],{},"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.",[14,148,149,150,155],{},"RESTful API için tercih edeceğim PHP framework'ü ise kesinlikle Phalcon olacaktır. ",[151,152,154],"a",{"href":153},"\u002Ftr\u002Fmerhaba-phalcon-framework","\"Phalcon Tartışmasız En Hızlı PHP Framework'ü\""," başlıklı yazımda Phalcon'u öne çıkaran özelliklerinden bahsetmiştim.",[14,157,158],{},[151,159,160],{"href":153},"Merhaba Phalcon Framework",[11,162,163,175],{},[14,164,165,168,171,174],{},[18,166,167],{},"Özetle:",[169,170],"br",{},[18,172,173],{},"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.",[14,176,177],{},"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.",[41,179],{},[140,181,183],{"id":182},"_2-full-stack-ve-micro-proje-tipleri","2. Full-Stack ve Micro Proje Tipleri",[14,185,186],{},"Genel olarak PHP framework'leri Full-Stack (kapsamlı) ve Micro (minik) olarak ikiye ayrılıyor.",[14,188,189],{},"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.",[14,191,192],{},"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.",[14,194,195],{},"Hangi framework olduğundan bağımsız olarak, RESTful API için en uygun framework tipi micro framework'lerdir.",[14,197,198],{},"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.",[41,200],{},[140,202,204],{"id":203},"_3-veri-tabanı","3. Veri Tabanı",[14,206,207],{},"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\u002FMariaDB'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.",[14,209,210],{},"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.",[41,212],{},[140,214,216],{"id":215},"_4-redis-opcache-apc-vb-önbellekleme-cache-çözümleri","4. Redis, OPcache, APC vb. Önbellekleme (Cache) Çözümleri",[14,218,219],{},"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.",[41,221],{},[140,223,225],{"id":224},"_5-kuyruk-yönetimi-queue-management","5. Kuyruk Yönetimi (Queue Management)",[14,227,228,232],{},[151,229,231],{"href":230},"\u002Ftr\u002Frabbitmq-nedir","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.",[14,234,235,236,240],{},"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 ",[237,238,239],"code",{},"php-amqplib"," kütüphanesini birlikte kullanabilirsiniz.",[41,242],{},[140,244,246],{"id":245},"_6-hangi-formatta-yanıt-döndüreceğiz","6. Hangi Formatta Yanıt Döndüreceğiz?",[14,248,249],{},"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?",[14,251,252],{},"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?",[14,254,255,256,258,259,267],{},"Cevap: ",[18,257,133],{},". Adından da belli olduğu gibi API'lerle JSON formatında çıktıları düzenleyen bir standarttır. ",[151,260,261],{"href":261,"rel":262,"target":266},"https:\u002F\u002Fjsonapi.org\u002F",[263,264,265],"nofollow","noopener","noreferrer","_blank"," 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.",[14,269,270],{},"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.",[41,272],{},[140,274,276],{"id":275},"_7-geliştirmeyi-hangi-platformda-yaparsın","7. Geliştirmeyi Hangi Platformda Yaparsın?",[14,278,279],{},"Ben olsam Nginx\u002FPHP, 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.",[41,281],{},[140,283,285],{"id":284},"sonuç","Sonuç",[14,287,288],{},"Bu yazıda genel olarak standart bir API projesi için tercih ettiğim bileşenleri sıraladım. Özetlersek:",[22,290,291,294,297,300,303],{},[25,292,293],{},"Programlama dili olarak PHP veya Python",[25,295,296],{},"Veri tabanı olarak MySQL",[25,298,299],{},"Oturum yönetimi ve önbellekleme için Redis, APC ve Symfony Cache bileşeni",[25,301,302],{},"Kuyruk yönetimi için RabbitMQ",[25,304,305],{},"Çıktı formatı olarak JSON API",[14,307,308],{},"Çö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.",[41,310],{},[312,313,315],"h5",{"id":314},"bu-yazıda-yapılan-değişiklikler","Bu Yazıda Yapılan Değişiklikler",[22,317,318,321],{},[25,319,320],{},"11.05.2022: Yazı özeti düzenlendi.",[25,322,323],{},"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.",{"title":325,"searchDepth":326,"depth":326,"links":327},"",2,[328,330,331,332,333,334,335,336,337],{"id":46,"depth":329,"text":47},3,{"id":142,"depth":326,"text":143},{"id":182,"depth":326,"text":183},{"id":203,"depth":326,"text":204},{"id":215,"depth":326,"text":216},{"id":224,"depth":326,"text":225},{"id":245,"depth":326,"text":246},{"id":275,"depth":326,"text":276},{"id":284,"depth":326,"text":285},[339],"technical",null,"2021-01-19","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ı.",false,"md","\u002Fimages\u002Fhero\u002Frest-api-components.avif",{},true,"\u002Ftr\u002Frestful-api-bilesenleri",5,{"title":6,"description":342},"restful-api-bilesenleri","tr\u002Frestful-api-bilesenleri",[354,355,356,357,358,359],"api","devops","json","mariadb","mysql","redis","2026-06-21","3O_Ir-nIP3JaC2Pr2pTVn0w2oG34QTcQYf-OQa_OhzE",{"prev":363,"next":366,"others":369,"lucky":489,"readingTime":349},{"path":364,"title":365},"\u002Ftr\u002Fdocker-swarm-nedir","Docker Swarm Nedir?",{"path":367,"title":368},"\u002Ftr\u002Fjwt-guvenli-mi-guvenlik-acigi-olusturmayin","JWT Güvenli Derken Güvenlik Açığı Oluşturmayın",[370,373,376,379,382,385,388,391,394,397,400,402,405,408,411,414,417,420,423,426,429,432,435,438,441,444,447,450,453,456,459,462,465,468,471,474,477,480,483,486],{"path":371,"title":372},"\u002Ftr\u002Fes7-nedir-ecmascript-2016-nedir","ES7 Nedir? ECMAScript 2016 Nedir?",{"path":374,"title":375},"\u002Ftr\u002Fes9-nedir-ecmascript-2018-nedir","ES9 Nedir? ECMAScript 2018 Nedir?",{"path":377,"title":378},"\u002Ftr\u002Fnostalji-ibibik-online","Nostalji: İbibik Online (1998'den Bir Web Macerası)",{"path":380,"title":381},"\u002Ftr\u002Fes12-nedir-ecmascript-2021-nedir","ES12 Nedir? ECMAScript 2021 Nedir?",{"path":383,"title":384},"\u002Ftr\u002Fecmascript-nedir-ecmascript-ne-degildir-bilinmesi-gerekenler","ECMAScript Nedir? Bilinmesi Gerekenler...",{"path":386,"title":387},"\u002Ftr\u002Frest-api-uri-yapisi-nasil-olmali","REST API URI Yapısı Nasıl Olmalı?",{"path":389,"title":390},"\u002Ftr\u002Fphp-ve-makine-ogrenimi-php-ml-kutuphanesi","PHP ve Makine Öğrenimi: PHP-ML Kütüphanesi ile Pratik Çözümler",{"path":392,"title":393},"\u002Ftr\u002Frestapi-ve-hateoas-kavrami","RestApi ve HATEOAS Kavramı",{"path":395,"title":396},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir","Singleton Tasarım Deseni Nedir?",{"path":398,"title":399},"\u002Ftr\u002Fchain-of-responsibility-deseni-nedir","Chain of Responsibility Deseni Nedir?",{"path":230,"title":401},"RabbitMQ Nedir?",{"path":403,"title":404},"\u002Ftr\u002Fstate-tasarim-deseni-nedir","State Tasarım Deseni Nedir?",{"path":406,"title":407},"\u002Ftr\u002Flinuxda-golang-kurulumu","Linux'ta Golang Kurulumu",{"path":409,"title":410},"\u002Ftr\u002Fphp-8-0-yenilikler","Merhaba PHP 8: Modern PHP 8.x Çağı",{"path":412,"title":413},"\u002Ftr\u002Fgo-programlama-dilinin-ozellikleri","Go Programlama Dilinin Özellikleri",{"path":415,"title":416},"\u002Ftr\u002Faws-ec2-uzerinde-docker-ve-full-stack-web-performansi","AWS EC2 Üzerinde Docker ve Full Stack Web Performansı",{"path":418,"title":419},"\u002Ftr\u002Fes16-nedir-ecmascript-2025-nedir","ES16 nedir? ECMAScript 2025 nedir?",{"path":421,"title":422},"\u002Ftr\u002Fdocker-ile-litespeed-enterprise-kurulumu","Docker ile LiteSpeed Enterprise Kurulumu",{"path":424,"title":425},"\u002Ftr\u002Fvue-3-hakkinda-bilmeniz-gerekenler-yenilikler","Vue 3 Hakkında Bilmeniz Gerekenler ve Yenilikler",{"path":427,"title":428},"\u002Ftr\u002Fes5-nedir","ES5 Nedir? JavaScript Geliştiricileri İçin Kılavuz",{"path":430,"title":431},"\u002Ftr\u002Fapi-gateway-nedir","API Gateway Nedir? Ne İşe Yarar?",{"path":433,"title":434},"\u002Ftr\u002Fubuntu-24-04-uzerinde-cyberpanel-kurulumu","Ubuntu 24.04 LTS ve 22.04 LTS Üzerinde CyberPanel Kurulumu",{"path":436,"title":437},"\u002Ftr\u002Fdocker-ve-portainer-kurulumu","Docker ve Portainer Kurulumu",{"path":439,"title":440},"\u002Ftr\u002Fself-hosted-api-gateway-nasil-kurulur-kapsamli-rehber","Self-Hosted API Gateway Nasıl Kurulur? Kapsamlı Rehber",{"path":442,"title":443},"\u002Ftr\u002Fgo-veri-tipleri-string-integer-float-complex-boolean-ve-array","Go Veri Tipleri - String, Integer, Float, Complex, Boolean ve Array",{"path":445,"title":446},"\u002Ftr\u002Fes6-nedir-ecmascript-2015-nedir","ES6 Nedir? ECMAScript 2015 Nedir?",{"path":448,"title":449},"\u002Ftr\u002Fgraylog-nedir-docker-ile-nasil-kurulur","Graylog Nedir? Docker Compose ile Adım Adım Kurulum Rehberi",{"path":451,"title":452},"\u002Ftr\u002Fopenlitespeed-ve-litespeed-enterprisei-reverse-proxy-olarak-kullanmak","OpenLiteSpeed ve LiteSpeed Enterprise Sunucularını Reverse Proxy Olarak Kullanmak",{"path":454,"title":455},"\u002Ftr\u002Frest-api-hata-yonetimi","REST Api Hata Yönetimi",{"path":457,"title":458},"\u002Ftr\u002Fgo-ile-websockets-websocket-upgrader-nedir","Go ile WebSockets: Upgrader Nedir?",{"path":460,"title":461},"\u002Ftr\u002Fdocker-ile-mongodb-kurulumu","Docker ile MongoDB Kurulumu",{"path":463,"title":464},"\u002Ftr\u002Fdesign-patterns-tasarim-desenleri-nedir","Design Patterns \u002F Tasarım Desenleri nedir?",{"path":466,"title":467},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST Api Güvenliği Nasıl Sağlanır?",{"path":469,"title":470},"\u002Ftr\u002Fes11-nedir-ecmascript-2020-nedir","ES11 Nedir? ECMAScript 2020 Nedir?",{"path":472,"title":473},"\u002Ftr\u002Fcomposite-tasarim-deseni-nedir","Composite Tasarım Deseni Nedir?",{"path":475,"title":476},"\u002Ftr\u002Fmediator-tasarim-deseni-nedir","Mediator Tasarım Deseni Nedir?",{"path":478,"title":479},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir","Factory Method Tasarım Deseni Nedir?",{"path":481,"title":482},"\u002Ftr\u002Fmerhaba-gluster","Merhaba Gluster: Dağıtık Dosya Sistemi Nedir?",{"path":484,"title":485},"\u002Ftr\u002Fubuntu-20-04-uzerinde-cyberpanel-kurulumu","Ubuntu 20.04 üzerinde CyberPanel kurulumu",{"path":487,"title":488},"\u002Ftr\u002Fwsl-2-kurulumu-6-kolay-adim","WSL 2 Kurulumu - 6 kolay adım",{"path":445,"title":446},[491,495,497,501],{"path":492,"title":493,"date":494},"\u002Ftr\u002Fdocker-ile-mariadb-kurulumu","Docker ile MariaDB Kurulumu","2021-03-01",{"path":439,"title":440,"date":496},"2023-01-12",{"path":498,"title":499,"date":500},"\u002Ftr\u002Fdocker-ile-redis-kurulumu","Docker ile Redis Kurulumu","2021-03-09",{"path":502,"title":503,"date":504},"\u002Ftr\u002Ffull-stack-proje-gelistiriyoruz","Full Stack Proje Geliştiriyoruz","2021-02-16",[506,509,513],{"path":507,"title":508,"date":360},"\u002Ftr\u002Fvite-nedir","Vite Nedir? Modern Web Geliştirme ve Paketleme Aracı",{"path":510,"title":511,"date":512},"\u002Ftr\u002Fgo-slice-veri-tipi","Go Veri Tipleri: Slice","2021-10-10",{"path":514,"title":515,"date":516},"\u002Ftr\u002Fearly-return-erken-donus-nedir","Early Return \u002F Erken Dönüş nedir?","2021-09-11",1782142064427]