[{"data":1,"prerenderedAt":543},["ShallowReactive",2],{"post-\u002Ftr\u002Frest-api-tasarimi":3},{"page":4,"translation":393,"nav":395,"related":521,"random":530},{"id":5,"title":6,"body":7,"categories":372,"category":374,"date":375,"description":376,"draft":377,"extension":378,"image":379,"kind":374,"lang":71,"meta":380,"navigation":381,"path":382,"readingTime":383,"seo":384,"slug":385,"stem":386,"tags":387,"translationKey":390,"type":373,"updated":391,"__hash__":392},"postsTr\u002Ftr\u002Frest-api-tasarimi.md","REST API Tasarım İncelikleri",{"type":8,"value":9,"toc":360},"minimark",[10,43,48,51,54,57,60,64,181,183,190,193,250,253,255,259,262,264,268,271,281,283,286,289,301,317,320,322,326,333,336,339,345,347,352],[11,12,13,21],"blockquote",{},[14,15,16,17],"p",{},"💡 ",[18,19,20],"strong",{},"Özet (TL;DR):",[22,23,24,31,37],"ul",{},[25,26,27,30],"li",{},[18,28,29],{},"Giriş:"," Web uygulamaları, mobil cihazlar ve diğer üçüncü parti servisler için ortak bir arka uç (backend) mimarisi kurgularken RESTful API tasarım standartları hayati önem taşır.",[25,32,33,36],{},[18,34,35],{},"Serinin Amacı:"," API mimarisi kurarken çıktı formatı, URI yapısı, güvenlik, hata yönetimi ve kimlik doğrulama gibi temel unsurları standartlaştırmak.",[25,38,39,42],{},[18,40,41],{},"Temel Tercihler:"," Özel bir kısıtlama olmadığı sürece modern web standartlarına en uygun veri transfer formatı olarak JSON tercih edilmelidir.",[44,45,47],"h3",{"id":46},"restful-api-tasarımının-i̇nceliklerini-öğrenmeye-kimin-i̇htiyacı-var-bu-yazı-kimin-i̇çin","RESTful API Tasarımının İnceliklerini Öğrenmeye Kimin İhtiyacı Var? Bu Yazı Kimin İçin?",[14,49,50],{},"Tek tabanca çalışan bir geliştiriciysen ve küçük-orta büyüklükte klasik bir web sitesi oluşturuyorsan bir REST API'ye ihtiyacın olmayacaktır; bildiğin monolitik yöntemlerle devam edebilirsin.",[14,52,53],{},"Fakat web sitenizin, mobil cihazlarınızın ve belki de diğer harici servislerin veri tüketeceği ortak bir arka uç (backend) tasarlaman gerekiyorsa, o zaman REST API tasarımının inceliklerini öğrenmen gerekir.",[14,55,56],{},"Geniş kapsamlı bir konu olması nedeniyle, konuyu mantıklı parçalara ayırarak incelemek çok daha faydalı olacaktır.",[58,59],"hr",{},[44,61,63],{"id":62},"rest-api-http-metotları-ve-kullanım-amaçları","REST API HTTP Metotları ve Kullanım Amaçları",[65,66,67,90],"table",{},[68,69,70],"thead",{},[71,72,73,78,81,84,87],"tr",{},[74,75,77],"th",{"align":76},"left","HTTP Metodu",[74,79,80],{"align":76},"İşlem Türü (CRUD)",[74,82,83],{"align":76},"Açıklama",[74,85,86],{"align":76},"Güvenli (Safe)?",[74,88,89],{"align":76},"Idempotent?",[91,92,93,112,130,147,164],"tbody",{},[71,94,95,101,104,107,110],{},[96,97,98],"td",{"align":76},[18,99,100],{},"GET",[96,102,103],{"align":76},"Read (Oku)",[96,105,106],{"align":76},"Belirtilen kaynağı veya koleksiyonu sorgular.",[96,108,109],{"align":76},"Evet",[96,111,109],{"align":76},[71,113,114,119,122,125,128],{},[96,115,116],{"align":76},[18,117,118],{},"POST",[96,120,121],{"align":76},"Create (Oluştur)",[96,123,124],{"align":76},"Yeni bir kaynak oluşturur.",[96,126,127],{"align":76},"Hayır",[96,129,127],{"align":76},[71,131,132,137,140,143,145],{},[96,133,134],{"align":76},[18,135,136],{},"PUT",[96,138,139],{"align":76},"Update (Güncelle)",[96,141,142],{"align":76},"Belirtilen kaynağı tamamen yenisiyle değiştirir.",[96,144,127],{"align":76},[96,146,109],{"align":76},[71,148,149,154,157,160,162],{},[96,150,151],{"align":76},[18,152,153],{},"PATCH",[96,155,156],{"align":76},"Update (Kısmi Güncelle)",[96,158,159],{"align":76},"Kaynağın sadece belirli alanlarını günceller.",[96,161,127],{"align":76},[96,163,127],{"align":76},[71,165,166,171,174,177,179],{},[96,167,168],{"align":76},[18,169,170],{},"DELETE",[96,172,173],{"align":76},"Delete (Sil)",[96,175,176],{"align":76},"Belirtilen kaynağı siler.",[96,178,127],{"align":76},[96,180,109],{"align":76},[58,182],{},[184,185,187],"h2",{"id":186},"serinin-tamamı",[18,188,189],{},"Serinin Tamamı",[14,191,192],{},"Aşağıdaki başlıklar altında RESTful API tasarımını parça parça ele alacağız. İlk iki başlık bu yazı içerisinde yer alırken, diğer başlıklara ilgili bağlantılardan ulaşabilirsiniz:",[22,194,195,202,208,214,220,226,232,238,244],{},[25,196,197],{},[198,199,201],"a",{"href":200},"\u002Ftr\u002Frest-api-tasarimi#rest-api-temelleri","REST API Temelleri",[25,203,204],{},[198,205,207],{"href":206},"\u002Ftr\u002Frest-api-tasarimi#%C3%A7%C4%B1kt%C4%B1-format%C4%B1-ne-olmal%C4%B1","REST API Çıktı Formatı Ne Olmalı?",[25,209,210],{},[198,211,213],{"href":212},"\u002Ftr\u002Frest-api-uri-yapisi-nasil-olmali","REST API URI Yapısı Nasıl Olmalı?",[25,215,216],{},[198,217,219],{"href":218},"\u002Ftr\u002Frestapi-ve-hateoas-kavrami","REST API HATEOAS Kavramı Nedir?",[25,221,222],{},[198,223,225],{"href":224},"\u002Ftr\u002Frest-api-kimlik-dogrulama-nasil-yapilir","REST API Kimlik Doğrulama Nasıl Yapılır? (Authentication)",[25,227,228],{},[198,229,231],{"href":230},"\u002Ftr\u002Frest-api-hata-yonetimi","REST API Hata Yönetimi Nasıl Yapılır? (Error Handling)",[25,233,234],{},[198,235,237],{"href":236},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST API Güvenliği Nasıl Sağlanır? (Security)",[25,239,240],{},[198,241,243],{"href":242},"\u002Ftr\u002Frest-api-dokumantasyonu-nasil-yapilir","REST API Dokümantasyon ve Testi Nasıl Yapılır?",[25,245,246],{},[198,247,249],{"href":248},"\u002Ftr\u002Ffull-stack-proje-gelistiriyoruz","Örnek REST API Projesi",[14,251,252],{},"Dürüst olacağım, bu bilgilerin çoğunun kaynağı ben değilim. Birkaç sene öncesine kadar API'lerin sadece tüketicisiydim. Gün gelip bir API yazmam gerektiğinde bu konuda bol bol araştırma yapıp notlar aldım; bu yazacaklarım da o notlarımın derlenip toplanmış, biraz da kendi deneyimlerimi kattığım hâlidir.",[58,254],{},[184,256,258],{"id":257},"farklı-yaklaşımlar","Farklı Yaklaşımlar",[14,260,261],{},"Burada anlatacağım başlıkların çoğu için farklı yaklaşımlar veya yöntemler olabilir. Hatta sektördeki dev firmaları incelediğinizde buradaki standartlarla uyumsuz noktalar olduğunu, kendi şirket içi pratiklerini benimsediklerini görebilirsiniz. Benim anlatacaklarım; yaptığım araştırmalar ve denemeler sonrasında edindiğim, \"ben bir REST API tasarlasam böyle yaparım\" dediğim en iyi pratikler (best practices) olacak.",[58,263],{},[184,265,267],{"id":266},"mimariden-bağımsız-tasarım","Mimariden Bağımsız Tasarım",[14,269,270],{},"Kullanılan programlama dili, veritabanı veya sunucu altyapısı doğrudan API tasarımının dışındadır; bunlar bütçe, ekip yetkinliği ve mevcut sistemin ihtiyaçlarına göre belirlenir. O nedenle işin kodlama ve sunucu kısımlarını atlayıp doğrudan API arayüz tasarımını ilgilendiren bölümlere odaklanacağız.",[14,272,273,274,280],{},"Daha önce yazdığım ",[18,275,276],{},[198,277,279],{"href":278},"\u002Ftr\u002Frestful-api-bilesenleri","RESTful API Bileşenleri"," başlığında bu konudaki kişisel teknoloji tercihlerimi belirtmiştim.",[58,282],{},[184,284,201],{"id":285},"rest-api-temelleri",[14,287,288],{},"RESTful API tasarımı ile belirli kaynaklar sunup bunları istemcilerin kullanımına açmış olursunuz. Monolitik sitelerde AJAX ile backend'e sorgu atıp gelen sonuçlara göre arayüzü güncelleriz ya; RESTful API de herhangi bir istemcinin (web, mobil, IoT) bize HTTP üzerinden istek göndermesi, bizim de o istemcinin anlayacağı standart bir dille yanıt dönmemizdir.",[14,290,291,292,296,297,300],{},"API'niz kaynaklar (örneğin ",[293,294,295],"code",{},"yazar",") veya bu kaynaklardan oluşan koleksiyonları (",[293,298,299],{},"yazarlar",") paylaşıma açar, oluşturur, günceller ve siler.",[14,302,303,304,306,307,306,309,306,311,313,314,316],{},"Bu kaynaklarla işlem yapmak için önceden belirlenmiş uç nokta (endpoint) adreslerine ",[293,305,100],{},", ",[293,308,118],{},[293,310,136],{},[293,312,153],{}," ve ",[293,315,170],{}," gibi klasik HTTP metotları ile istek gönderilir.",[14,318,319],{},"Aslına bakarsanız keşke her proje sadece saf bir RESTful API'den oluşsa. Standart bir veri modeli gelecek, o veriyle işlemler yapılıp standart bir formatta çıktı verilecek. Full-stack bir monolitik uygulamayla uğraşmaktan çok daha zahmetsiz ve temiz bir süreçtir. :)",[58,321],{},[184,323,325],{"id":324},"çıktı-formatı-ne-olmalı","Çıktı Formatı Ne Olmalı?",[14,327,328,329,332],{},"API'nizin çıktı formatı JSON, CSV, XML, RSS veya HTML olabilir. İhtiyaçların sınırsız olduğu yazılım dünyasında şüphesiz bunlara yönelik çözümler de çok çeşitlidir. Ancak genel kullanıma açık modern bir REST API tasarlıyorsanız muhtemelen ",[18,330,331],{},"JSON"," tercih edeceksiniz.",[14,334,335],{},"Özel veya zorlayıcı bir sistem kısıtlaması yoksa, hafifliği ve JavaScript ekosistemiyle tam uyumu nedeniyle çıktı formatı olarak JSON kullanmanızı kesinlikle tavsiye ederim.",[14,337,338],{},"Serinin bir sonraki yazısında, RESTful API'lerde uç nokta adreslerinin (URI) nasıl belirlenmesi gerektiği üzerinde duracağız:",[22,340,341],{},[25,342,343],{},[198,344,213],{"href":212},[58,346],{},[348,349,351],"h5",{"id":350},"bu-yazıda-yapılan-değişiklikler","Bu Yazıda Yapılan Değişiklikler",[22,353,354,357],{},[25,355,356],{},"11.05.2022: Yazı özeti düzenlendi.",[25,358,359],{},"21.06.2026: REST API marka standartları, imla hataları (altyapı, metotları, testi vb.) ve cümle içi mükerrer kelimeler düzeltildi. Cümlenin sonundaki çift noktalama işaretleri temizlendi. Giriş için TL;DR özet paneli ve HTTP metotlarının CRUD\u002FIdempotent özelliklerini gösteren bir referans tablosu eklenerek yazı zenginleştirildi.",{"title":361,"searchDepth":362,"depth":362,"links":363},"",2,[364,366,367,368,369,370,371],{"id":46,"depth":365,"text":47},3,{"id":62,"depth":365,"text":63},{"id":186,"depth":362,"text":189},{"id":257,"depth":362,"text":258},{"id":266,"depth":362,"text":267},{"id":285,"depth":362,"text":201},{"id":324,"depth":362,"text":325},[373],"technical",null,"2021-02-04","Birden fazla platforma hizmet verecek modern, standart ve performanslı bir RESTful API tasarlarken dikkat edilmesi gereken mimari kurallar.",false,"md","\u002Fimages\u002Fhero\u002Frest-api-design.avif",{},true,"\u002Ftr\u002Frest-api-tasarimi",4,{"title":6,"description":376},"rest-api-tasarimi","tr\u002Frest-api-tasarimi",[388,389],"api","rest","rest-api-design","2026-06-21","2doWlSvACedC6joIWUTzgHkQ2bE7WpEJm7cfwTDVYbQ",{"path":394},"\u002Frest-api-design",{"prev":396,"next":398,"others":399,"lucky":518,"readingTime":383},{"path":224,"title":397},"REST API Kimlik Doğrulama Nasıl Yapılır?",{"path":212,"title":213},[400,403,406,409,412,415,418,420,423,426,429,431,434,437,440,443,446,449,452,455,458,461,464,467,470,473,476,479,482,485,488,491,494,497,500,503,506,509,512,515],{"path":401,"title":402},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir","Decorator Tasarım Deseni Nedir?",{"path":404,"title":405},"\u002Ftr\u002Fwebpack-nedir","Webpack Nedir? Modern JavaScript Paketleyici Ekosistemi",{"path":407,"title":408},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir","Singleton Tasarım Deseni Nedir?",{"path":410,"title":411},"\u002Ftr\u002Fstrategy-tasarim-deseni-nedir","Strategy Tasarım Deseni Nedir?",{"path":413,"title":414},"\u002Ftr\u002Fes8-nedir-ecmascript-2017-nedir","ES8 Nedir? ECMAScript 2017 Nedir?",{"path":416,"title":417},"\u002Ftr\u002Fes17-nedir-ecmascript-2026-nedir","ES17 nedir? ECMAScript 2026 nedir?",{"path":218,"title":419},"RestApi ve HATEOAS Kavramı",{"path":421,"title":422},"\u002Ftr\u002Fdigital-oceanda-vps-kurulumu","DigitalOcean'da VPS (Droplet) Kurulumu: Adım Adım Rehber",{"path":424,"title":425},"\u002Ftr\u002Ffull-stack-proje-agaci","Full-Stack Proje Yol Haritası ve İçindekiler",{"path":427,"title":428},"\u002Ftr\u002Fself-hosted-api-gateway-nasil-kurulur-kapsamli-rehber","Self-Hosted API Gateway Nasıl Kurulur? Kapsamlı Rehber",{"path":236,"title":430},"REST Api Güvenliği Nasıl Sağlanır?",{"path":432,"title":433},"\u002Ftr\u002Fubuntu-20-04-composer-kurulumu","Ubuntu 20.04 - Composer Kurulumu",{"path":435,"title":436},"\u002Ftr\u002Fes15-nedir-ecmascript-2024-nedir","ES15 nedir? ECMAScript 2024 nedir?",{"path":438,"title":439},"\u002Ftr\u002Fgo-veri-tipleri-struct","Go Veri Tipleri: Struct",{"path":441,"title":442},"\u002Ftr\u002Fprototype-tasarim-deseni-nedir","Prototype Tasarım Deseni Nedir?",{"path":444,"title":445},"\u002Ftr\u002Fes5-nedir","ES5 Nedir? JavaScript Geliştiricileri İçin Kılavuz",{"path":447,"title":448},"\u002Ftr\u002Ftailwind-css-nerede-kullanilir-tailwind-css-nerede-kullanilmaz","Tailwind CSS Nerede Kullanılır? Tailwind CSS Nerede Kullanılmaz?",{"path":450,"title":451},"\u002Ftr\u002Fwsl-2-kurulumu-6-kolay-adim","WSL 2 Kurulumu - 6 kolay adım",{"path":453,"title":454},"\u002Ftr\u002Fjwt-guvenli-mi-guvenlik-acigi-olusturmayin","JWT Güvenli Derken Güvenlik Açığı Oluşturmayın",{"path":456,"title":457},"\u002Ftr\u002Fgo-veri-tipleri-string-integer-float-complex-boolean-ve-array","Go Veri Tipleri - String, Integer, Float, Complex, Boolean ve Array",{"path":459,"title":460},"\u002Ftr\u002Fadapter-tasarim-deseni-nedir","Adapter Tasarım Deseni Nedir?",{"path":462,"title":463},"\u002Ftr\u002Fdocker-ile-mariadb-kurulumu","Docker ile MariaDB Kurulumu",{"path":465,"title":466},"\u002Ftr\u002Fdocker-ile-litespeed-enterprise-kurulumu","Docker ile LiteSpeed Enterprise Kurulumu",{"path":468,"title":469},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir","Factory Method Tasarım Deseni Nedir?",{"path":471,"title":472},"\u002Ftr\u002Fheadless-wordpress-hakkinda-her-sey","Headless WordPress Hakkında Her Şey",{"path":474,"title":475},"\u002Ftr\u002Fdesign-patterns-tasarim-desenleri-nedir","Design Patterns \u002F Tasarım Desenleri nedir?",{"path":477,"title":478},"\u002Ftr\u002Fbridge-tasarim-deseni-nedir","Bridge Tasarım Deseni Nedir?",{"path":480,"title":481},"\u002Ftr\u002Fobserver-tasarim-deseni-nedir","Observer Tasarım Deseni Nedir?",{"path":483,"title":484},"\u002Ftr\u002Fgo-slice-veri-tipi","Go Veri Tipleri: Slice",{"path":486,"title":487},"\u002Ftr\u002Flinuxda-golang-kurulumu","Linux'ta Golang Kurulumu",{"path":489,"title":490},"\u002Ftr\u002Fphp-generator-ve-iterator-farki","PHP'de Generator ve Iterator Arasındaki Temel Farklar",{"path":492,"title":493},"\u002Ftr\u002Fes14-nedir-ecmascript-2023-nedir","ES14 nedir? ECMAScript 2023 nedir?",{"path":495,"title":496},"\u002Ftr\u002Fphalcon-frameworkun-gelecegi","Phalcon Framework'ün Geleceği: Bir Devrin Sonu",{"path":498,"title":499},"\u002Ftr\u002Fbuilder-tasarim-deseni-nedir","Builder Tasarım Deseni Nedir?",{"path":501,"title":502},"\u002Ftr\u002Fdocker-swarm-nedir","Docker Swarm Nedir?",{"path":504,"title":505},"\u002Ftr\u002Fprogralama-ipucu-yoda-gosterimi","Yoda Koşulları (Yoda Conditions) Nedir? Programlama İpucu",{"path":507,"title":508},"\u002Ftr\u002Fmerhaba-tailwind-css","Merhaba Tailwind CSS",{"path":510,"title":511},"\u002Ftr\u002Fmemento-tasarim-deseni-nedir","Memento Tasarım Deseni Nedir?",{"path":513,"title":514},"\u002Ftr\u002Fnostalji-ibibik-online","Nostalji: İbibik Online (1998'den Bir Web Macerası)",{"path":516,"title":517},"\u002Ftr\u002Fes16-nedir-ecmascript-2025-nedir","ES16 nedir? ECMAScript 2025 nedir?",{"path":519,"title":520},"\u002Ftr\u002Fgo-ile-websockets-websocket-upgrader-nedir","Go ile WebSockets: Upgrader Nedir?",[522,524,527,529],{"path":218,"title":419,"date":523},"2021-02-24",{"path":248,"title":525,"date":526},"Full Stack Proje Geliştiriyoruz","2021-02-16",{"path":242,"title":528,"date":526},"REST Api Dokümantasyonu Nasıl Oluşturulur?",{"path":236,"title":430,"date":526},[531,535,539],{"path":532,"title":533,"date":534},"\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir","Factory Method ve Abstract Factory Farkı Nedir?","2021-07-27",{"path":536,"title":537,"date":538},"\u002Ftr\u002Fdocker-ile-mongodb-kurulumu","Docker ile MongoDB Kurulumu","2021-03-13",{"path":540,"title":541,"date":542},"\u002Ftr\u002Fvue-3-hakkinda-bilmeniz-gerekenler-yenilikler","Vue 3 Hakkında Bilmeniz Gerekenler ve Yenilikler","2021-07-24",1782142031098]