[{"data":1,"prerenderedAt":794},["ShallowReactive",2],{"post-\u002Ftr\u002Frest-api-hata-yonetimi":3},{"page":4,"translation":644,"nav":646,"related":773,"random":783},{"id":5,"title":6,"body":7,"categories":625,"category":627,"date":628,"description":13,"draft":629,"extension":630,"image":631,"kind":627,"lang":632,"meta":633,"navigation":634,"path":53,"readingTime":131,"seo":635,"slug":636,"stem":637,"tags":638,"translationKey":641,"type":626,"updated":642,"__hash__":643},"postsTr\u002Ftr\u002Frest-api-hata-yonetimi.md","REST Api Hata Yönetimi",{"type":8,"value":9,"toc":620},"minimark",[10,14,73,76,79,82,188,191,194,284,505,510,513,581,585,588,591,595,598,601,606,611,616],[11,12,13],"p",{},"Bu yazı RESTFul Api Tasarım İncelikleri serisinin bir parçası niteliğindedir. Eğer okumadıysanız önce serinin diğer yazılarını okumanızı tavsiye ederim.",[15,16,17,25,31,37,43,49,55,61,67],"ul",{},[18,19,20],"li",{},[21,22,24],"a",{"href":23},"\u002Ftr\u002Frest-api-tasarimi#rest-api-temelleri","REST Api Temelleri",[18,26,27],{},[21,28,30],{"href":29},"\u002Ftr\u002Frest-api-tasarimi#cikti-formati","REST API Çıktı Formatı Ne Olmalı?",[18,32,33],{},[21,34,36],{"href":35},"\u002Ftr\u002Frest-api-uri-yapisi-nasil-olmali","REST API URI yapısı nasıl olmalı?",[18,38,39],{},[21,40,42],{"href":41},"\u002Ftr\u002Frestapi-ve-hateoas-kavrami","REST Api HATEOAS kavramı nedir? (Bu diziye sonradan eklendi)",[18,44,45],{},[21,46,48],{"href":47},"\u002Ftr\u002Frest-api-kimlik-dogrulama-nasil-yapilir","REST API kimlik doğrulama nasıl yapılır? (Authentication)",[18,50,51],{},[21,52,54],{"href":53},"\u002Ftr\u002Frest-api-hata-yonetimi","REST API hata yönetimi nasıl yapılır? (Error Handling)",[18,56,57],{},[21,58,60],{"href":59},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST API güvenliği nasıl sağlanır? (Security)",[18,62,63],{},[21,64,66],{"href":65},"\u002Ftr\u002Frest-api-dokumantasyonu-nasil-yapilir","REST API Dokümantasyon (Documentation) ve Test'i nasıl yapılır?",[18,68,69],{},[21,70,72],{"href":71},"\u002Ftr\u002Ffull-stack-proje-gelistiriyoruz","Örnek REST API Projesi",[11,74,75],{},"Hatayla karşılaşmaktan daha da kötüsü \"ne olduğu belirsiz\" bir hatayla karşılaşmak. REST API'niz kullananlara saç baş yoldurmasın istiyorsanız, hataları ve nedenlerini net olarak açıklayın. Bunu yaparken HTTP durum kodlarını da kullanmayı ihmal etmeyin. Standart HTTP durum kodları neredeyse her hatanın genel tanımı için yeterli olacaktır. Bu kodla beraber güzel bir açıklama yaparsanız tadından yenmez.",[11,77,78],{},"HTTP durum kodunu cevabın başlık kısmı ile gönderebilirsiniz. İstemci kodlayanın işini daha da kolaylaştırmak isterseniz kodu sadece HTTP başlığında değil içerikte de verebilirsiniz.",[11,80,81],{},"JSON formatında örnek bir hata mesajı şöyle formüle edilebilir;",[83,84,89],"pre",{"className":85,"code":86,"language":87,"meta":88,"style":88},"language-json shiki shiki-themes github-light github-dark","{\n \"status\": 429,\n \"message\": \"Çok fazla istek gönderildi\"\n \"code\": 10200,\n \"info\": \"http:\\\u002F\\\u002Fwww.evrenbal.com\\\u002Fapi\\\u002Fv1\\\u002Ferrors\\\u002F10200\"\n}\n","json","",[90,91,92,101,117,129,144,182],"code",{"__ignoreMap":88},[93,94,97],"span",{"class":95,"line":96},"line",1,[93,98,100],{"class":99},"sVt8B","{\n",[93,102,104,108,111,114],{"class":95,"line":103},2,[93,105,107],{"class":106},"sj4cs"," \"status\"",[93,109,110],{"class":99},": ",[93,112,113],{"class":106},"429",[93,115,116],{"class":99},",\n",[93,118,120,123,125],{"class":95,"line":119},3,[93,121,122],{"class":106}," \"message\"",[93,124,110],{"class":99},[93,126,128],{"class":127},"sZZnC","\"Çok fazla istek gönderildi\"\n",[93,130,132,135,139,142],{"class":95,"line":131},4,[93,133,134],{"class":127}," \"code\"",[93,136,138],{"class":137},"s7hpK",":",[93,140,141],{"class":106}," 10200",[93,143,116],{"class":99},[93,145,147,150,152,155,158,161,164,167,169,172,174,177,179],{"class":95,"line":146},5,[93,148,149],{"class":106}," \"info\"",[93,151,110],{"class":99},[93,153,154],{"class":127},"\"http:",[93,156,157],{"class":106},"\\\u002F\\\u002F",[93,159,160],{"class":127},"www.evrenbal.com",[93,162,163],{"class":106},"\\\u002F",[93,165,166],{"class":127},"api",[93,168,163],{"class":106},[93,170,171],{"class":127},"v1",[93,173,163],{"class":106},[93,175,176],{"class":127},"errors",[93,178,163],{"class":106},[93,180,181],{"class":127},"10200\"\n",[93,183,185],{"class":95,"line":184},6,[93,186,187],{"class":99},"}\n",[11,189,190],{},"Bu cevaptaki \"status\" standart HTTP kodlarından biri, \"message\" human-readable olarak tabir edilen, bir insanın okuyunca fikir sahibi olacağı mesajı, \"code\" hata kodunu, \"info\": Bu hata koduyla ilgili eksra bilgi bulunabilecek örneğin yardım dökümanını içerebilir. Bu yapı sadece bir örnek ve ihtiyacınıza göre başka şekillerde de formülüze edilebilir.",[11,192,193],{},"Örneğin;",[83,195,197],{"className":85,"code":196,"language":87,"meta":88,"style":88},"{\n\"status\": 500,\n\"message\": \"Bir sunucu hatası oluştu\",\n\"description\": \"Sunucu hatasının 3 sayfa uzunluğundaki detayı;\"\n\"code\": 10201,\n\"info\": \"http:\\\u002F\\\u002Fwww.evrenbal.com\\\u002Fapi\\\u002Fv1\\\u002Ferrors\\\u002F10201\"\n}\n",[90,198,199,203,215,227,237,249,279],{"__ignoreMap":88},[93,200,201],{"class":95,"line":96},[93,202,100],{"class":99},[93,204,205,208,210,213],{"class":95,"line":103},[93,206,207],{"class":106},"\"status\"",[93,209,110],{"class":99},[93,211,212],{"class":106},"500",[93,214,116],{"class":99},[93,216,217,220,222,225],{"class":95,"line":119},[93,218,219],{"class":106},"\"message\"",[93,221,110],{"class":99},[93,223,224],{"class":127},"\"Bir sunucu hatası oluştu\"",[93,226,116],{"class":99},[93,228,229,232,234],{"class":95,"line":131},[93,230,231],{"class":106},"\"description\"",[93,233,110],{"class":99},[93,235,236],{"class":127},"\"Sunucu hatasının 3 sayfa uzunluğundaki detayı;\"\n",[93,238,239,242,244,247],{"class":95,"line":146},[93,240,241],{"class":127},"\"code\"",[93,243,138],{"class":137},[93,245,246],{"class":106}," 10201",[93,248,116],{"class":99},[93,250,251,254,256,258,260,262,264,266,268,270,272,274,276],{"class":95,"line":184},[93,252,253],{"class":106},"\"info\"",[93,255,110],{"class":99},[93,257,154],{"class":127},[93,259,157],{"class":106},[93,261,160],{"class":127},[93,263,163],{"class":106},[93,265,166],{"class":127},[93,267,163],{"class":106},[93,269,171],{"class":127},[93,271,163],{"class":106},[93,273,176],{"class":127},[93,275,163],{"class":106},[93,277,278],{"class":127},"10201\"\n",[93,280,282],{"class":95,"line":281},7,[93,283,187],{"class":99},[83,285,287],{"className":85,"code":286,"language":87,"meta":88,"style":88},"{\n\"status\": 422,\n\"message\": \"İstek İşlenemedi\",\n\"errors\": [\n  { \"code\": 20501,\n    \"field\" : \"kullanici_adi\",\n    \"message: \"Kullanıcı adı en az 5 karakterden oluşmalıdır.\n    \"info\": \"http:\\\u002F\\\u002Fwww.evrenbal.com\\\u002Fapi\\\u002Fv1\\\u002Ferrors\\\u002F20501\"\n  },\n  {\n   \"code\": 20601,\n   \"field\": \"sifre\",\n   \"message\": \"Şifre en az 8 karakterde oluşm alıdır.\"\n   \"info\": \"http:\\\u002F\\\u002Fwww.evrenbal.com\\\u002Fapi\\\u002Fv1\\\u002Ferrors\\\u002F20601\"\n  }\n] \n}\n",[90,288,289,293,304,315,323,337,350,376,407,413,419,432,445,456,488,494,500],{"__ignoreMap":88},[93,290,291],{"class":95,"line":96},[93,292,100],{"class":99},[93,294,295,297,299,302],{"class":95,"line":103},[93,296,207],{"class":106},[93,298,110],{"class":99},[93,300,301],{"class":106},"422",[93,303,116],{"class":99},[93,305,306,308,310,313],{"class":95,"line":119},[93,307,219],{"class":106},[93,309,110],{"class":99},[93,311,312],{"class":127},"\"İstek İşlenemedi\"",[93,314,116],{"class":99},[93,316,317,320],{"class":95,"line":131},[93,318,319],{"class":106},"\"errors\"",[93,321,322],{"class":99},": [\n",[93,324,325,328,330,332,335],{"class":95,"line":146},[93,326,327],{"class":99},"  { ",[93,329,241],{"class":106},[93,331,110],{"class":99},[93,333,334],{"class":106},"20501",[93,336,116],{"class":99},[93,338,339,342,345,348],{"class":95,"line":184},[93,340,341],{"class":106},"    \"field\"",[93,343,344],{"class":99}," : ",[93,346,347],{"class":127},"\"kullanici_adi\"",[93,349,116],{"class":99},[93,351,352,355,358,361,364,367,370,373],{"class":95,"line":281},[93,353,354],{"class":106},"    \"message: \"",[93,356,357],{"class":137},"Kullanıcı",[93,359,360],{"class":137}," adı",[93,362,363],{"class":137}," en",[93,365,366],{"class":137}," az",[93,368,369],{"class":137}," 5",[93,371,372],{"class":137}," karakterden",[93,374,375],{"class":137}," oluşmalıdır.\n",[93,377,379,382,384,386,388,390,392,394,396,398,400,402,404],{"class":95,"line":378},8,[93,380,381],{"class":106},"    \"info\"",[93,383,110],{"class":99},[93,385,154],{"class":127},[93,387,157],{"class":106},[93,389,160],{"class":127},[93,391,163],{"class":106},[93,393,166],{"class":127},[93,395,163],{"class":106},[93,397,171],{"class":127},[93,399,163],{"class":106},[93,401,176],{"class":127},[93,403,163],{"class":106},[93,405,406],{"class":127},"20501\"\n",[93,408,410],{"class":95,"line":409},9,[93,411,412],{"class":99},"  },\n",[93,414,416],{"class":95,"line":415},10,[93,417,418],{"class":99},"  {\n",[93,420,422,425,427,430],{"class":95,"line":421},11,[93,423,424],{"class":106},"   \"code\"",[93,426,110],{"class":99},[93,428,429],{"class":106},"20601",[93,431,116],{"class":99},[93,433,435,438,440,443],{"class":95,"line":434},12,[93,436,437],{"class":106},"   \"field\"",[93,439,110],{"class":99},[93,441,442],{"class":127},"\"sifre\"",[93,444,116],{"class":99},[93,446,448,451,453],{"class":95,"line":447},13,[93,449,450],{"class":106},"   \"message\"",[93,452,110],{"class":99},[93,454,455],{"class":127},"\"Şifre en az 8 karakterde oluşm alıdır.\"\n",[93,457,459,462,464,467,469,471,473,475,477,479,481,483,485],{"class":95,"line":458},14,[93,460,461],{"class":127},"   \"info\"",[93,463,138],{"class":137},[93,465,466],{"class":127}," \"http:",[93,468,157],{"class":106},[93,470,160],{"class":127},[93,472,163],{"class":106},[93,474,166],{"class":127},[93,476,163],{"class":106},[93,478,171],{"class":127},[93,480,163],{"class":106},[93,482,176],{"class":127},[93,484,163],{"class":106},[93,486,487],{"class":127},"20601\"\n",[93,489,491],{"class":95,"line":490},15,[93,492,493],{"class":99},"  }\n",[93,495,497],{"class":95,"line":496},16,[93,498,499],{"class":99},"] \n",[93,501,503],{"class":95,"line":502},17,[93,504,187],{"class":99},[506,507,509],"h3",{"id":508},"http-durum-kodları","HTTP Durum Kodları",[11,511,512],{},"Rest API uygulamalarında sıklıkla ihtiyaç duyulan HTTP statü kodları ve açıklamalarını aşağıda paylaşıyorum;",[15,514,515,521,527,533,539,545,551,557,563,569,575],{},[18,516,517,520],{},[90,518,519],{},"200 OK"," - Başarılı bir GET, PUT, PATCH veya DELETE işleminden sonra döndürülen statü kodudur. Eğer kayıt oluşturmak için gönderilmediyse (ki genelde öyle olmalıdır) POST içinde kullanılabilir.",[18,522,523,526],{},[90,524,525],{},"201 C","reated- Bir oluşturma işlemi için yapılan bir POST isteğine döndürülen başarılı yanıtlarda kullanılan durum kodudur.",[18,528,529,532],{},[90,530,531],{},"204 No Content"," Bir içerik döndürmesine gerek olmayan başarılı bir yanıt için kullanılabilir. Örneği bir DELETE isteği başarılı sonuçlandıysa ve geriye bir mesaj döndürülmesine gerek yoksa kullanabilirsiniz.",[18,534,535,538],{},[90,536,537],{},"400 Bad Request"," - Yapılan istekle ilgili bir sorun varsa, örneğin gönderilmesi gereken parametreler gönderilmemişse bu kodu kullanabilirsiniz.",[18,540,541,544],{},[90,542,543],{},"401 Unauthorized"," - Yanlış kullanıcı tanımlama bilgileri veya hiç bilgi gönderilmediyse kullanabilirsiniz.",[18,546,547,550],{},[90,548,549],{},"403 Forbidden"," - Çoğunlukla 401'le karıştırılan\u002Fyerine geçen kullanıcının tanınmadığı değil, yetkisinin olmadığı durumlarda kullanılan hata kodudur.",[18,552,553,556],{},[90,554,555],{},"404 Not Found"," - Neredeyse en çok bilinen hata kodu. İstenen kaynak sunucuda bulunmuyorsa bu kod döndürülür.",[18,558,559,562],{},[90,560,561],{},"405 Method Not Allowed"," - İstek gönderilirken kullanılan method giriş yapan kullanıcı için desteklenmiyorsa kullanılır.",[18,564,565,568],{},[90,566,567],{},"422 Unprocessable Entity"," - Doğrulama gerektiren durumlarda doğrulama yapılamıyorsa (Örneğin kullanıcı adı en az 8 karakter olmalı hatasını döndüreceksek) kullanılır.",[18,570,571,574],{},[90,572,573],{},"429 Too Many Request"," - Rate limit - İstek sınırı aşıldıysa bunu belirtmek için kullanılır.",[18,576,577,580],{},[90,578,579],{},"500 Internal Server Error"," - Çoğu zaman bu hata kontrolümüz dışında gerçekleşir, ama bunu da handle edecek alt seviyede bir hata yönetim yapısı kurarsak hem kullanıcıya göstermemiz, hem düzgün log tutabilmemiz açısından faydalı olur.",[506,582,584],{"id":583},"kayıt-tutma-log","Kayıt Tutma - Log",[11,586,587],{},"Yazıyı ilk kurgularken aklıma gelmeyen ama önemli bir başlık da kayıt tutma, yani loglama. Aslına bakarsanız loglama sadece hata kaydı için değil, uygulamanızın yapısına göre yapılan işlem -transaction- kayıtları için de tutulabilir ama en temel olarak hata kayıtlarını tutmanız işinizi çok kolaylaştırır. Geliştirici olarak her ne kadar test yapsak da, API'mizi vahşi hayata bıraktığımızda kullanıcılar bambaşka fantastik hatalarla karşılaşabilirler. Çoğu zaman bize bunun dönüşü bile yapılmaz, ama yapılsa bile durumu anlamamız veya hatayı tekrar etmemiz kolay olmaz. Bunun için kayıt tutuyor olmamız çok önemli.",[11,589,590],{},"Loglama konusu başlı başlına bir konu ve burada detayına girmeyi düşünüyorum. Önümüzdeki günlerde PHP Monogolog kütüphanesi ile ilgili bir yazı yazmayı düşünüyorum, bu yazı içerisinde loglama prensiplerinden de genel hatları ile bahsedeceğim.",[506,592,594],{"id":593},"benim-en-sık-yaptığım-hata-hata-yönetimini-yönetemediğim-yer","Benim En Sık Yaptığım Hata - Hata yönetimini yönetemediğim yer :)",[11,596,597],{},"Benim kişisel olarak en çok yaptığım hata, API tarafında hata kodlarını düzgün yayınlarken, istemci tarafında bunları kullanmamak oluyor. İstemci'den beklediğim tepkiyi alamayınca, API'nin döndürdüğü cevaba bakıp hata kodunu görebiliyorum ama istemcide bunu kullanmadığım (handling) için bir anlamı olmuyor. Yani hata yönetimi tek taraflı değil, iki taraflı uygulanması gereken bir zorunluluk.",[11,599,600],{},"Bundan sonraki bölüm olan \"Güvenlik\" başlığında görüşmek üzere...",[11,602,603],{},[21,604,605],{"href":59},"REST Api Güvenliği Nasıl Sağlanır?",[607,608,610],"h5",{"id":609},"bu-yazıda-yapılan-değişiklikler","Bu Yazıda Yapılan Değişiklikler",[15,612,613],{},[18,614,615],{},"11.05.2022: Yazı özeti düzenlendi.",[617,618,619],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":88,"searchDepth":103,"depth":103,"links":621},[622,623,624],{"id":508,"depth":119,"text":509},{"id":583,"depth":119,"text":584},{"id":593,"depth":119,"text":594},[626],"technical",null,"2021-02-15",false,"md","\u002Fimages\u002Fhero\u002Frest-api-error-handling.avif","tr",{},true,{"title":6,"description":13},"rest-api-hata-yonetimi","tr\u002Frest-api-hata-yonetimi",[166,639,640],"error-handling","rest","rest-api-error-handling","2022-05-11","kZqbXM582Z3Ho6TJ6iMPBHhsF22uIRwu9MlcayH5vPc",{"path":645},"\u002Frest-api-error-handling",{"prev":647,"next":650,"others":652,"lucky":770,"readingTime":131},{"path":648,"title":649},"\u002Ftr\u002Fnostalji-ibibik-online","Nostalji: İbibik Online (1998'den Bir Web Macerası)",{"path":47,"title":651},"REST API Kimlik Doğrulama Nasıl Yapılır?",[653,656,659,662,665,668,671,674,677,680,683,684,687,690,693,696,699,702,705,708,711,714,717,720,723,726,729,732,735,738,741,744,747,750,753,756,758,761,764,767],{"path":654,"title":655},"\u002Ftr\u002Flitespeed-web-server-performans-artisi","Konfor Alanından Çıkıp, Konforlu Bir VPS'e Geçmek: LiteSpeed Web Server",{"path":657,"title":658},"\u002Ftr\u002Fes14-nedir-ecmascript-2023-nedir","ES14 nedir? ECMAScript 2023 nedir?",{"path":660,"title":661},"\u002Ftr\u002Fes13-nedir-ecmascript-2022-nedir","ES13 nedir? ECMAScript 2022 nedir?",{"path":663,"title":664},"\u002Ftr\u002Fes12-nedir-ecmascript-2021-nedir","ES12 Nedir? ECMAScript 2021 Nedir?",{"path":666,"title":667},"\u002Ftr\u002Fgo-veri-tipleri-map","Go Veri Tipleri - Map",{"path":669,"title":670},"\u002Ftr\u002Fchain-of-responsibility-deseni-nedir","Chain of Responsibility Deseni Nedir?",{"path":672,"title":673},"\u002Ftr\u002Fubuntu-24-04-uzerinde-cyberpanel-kurulumu","Ubuntu 24.04 LTS ve 22.04 LTS Üzerinde CyberPanel Kurulumu",{"path":675,"title":676},"\u002Ftr\u002Fobserver-tasarim-deseni-nedir","Observer Tasarım Deseni Nedir?",{"path":678,"title":679},"\u002Ftr\u002Fecmascript-nedir-ecmascript-ne-degildir-bilinmesi-gerekenler","ECMAScript Nedir? Bilinmesi Gerekenler...",{"path":681,"title":682},"\u002Ftr\u002Fdigital-oceanda-vps-kurulumu","DigitalOcean'da VPS (Droplet) Kurulumu: Adım Adım Rehber",{"path":47,"title":651},{"path":685,"title":686},"\u002Ftr\u002Fgarbage-collection-ve-golang","Garbage Collection ve Go (Golang)",{"path":688,"title":689},"\u002Ftr\u002Fubuntu-20-04-composer-kurulumu","Ubuntu 20.04 - Composer Kurulumu",{"path":691,"title":692},"\u002Ftr\u002Fmerhabadunya","Merhaba Dünya",{"path":694,"title":695},"\u002Ftr\u002Fwindows-10-golang-kurulumu","Windows 10 ve 11'de Golang Kurulumu ve GOPATH Yapılandırması",{"path":697,"title":698},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir","Singleton Tasarım Deseni Nedir?",{"path":700,"title":701},"\u002Ftr\u002Fcomposite-tasarim-deseni-nedir","Composite Tasarım Deseni Nedir?",{"path":703,"title":704},"\u002Ftr\u002Fcodeserver-nedir-codeserver-nasil-kurulur","Code-Server Nedir? Bulutta VS Code Geliştirme Ortamı Kurulumu",{"path":706,"title":707},"\u002Ftr\u002Fekran-filtresi-mavi-isik-filtresi-flux","Gözlere dost, mavi ışığa düşman ekran filtresi f.lux",{"path":709,"title":710},"\u002Ftr\u002Fcommand-tasarim-deseni-nedir","Command Tasarım Deseni Nedir?",{"path":712,"title":713},"\u002Ftr\u002Fvisitor-tasarim-deseni-nedir","Visitor Tasarım Deseni Nedir?",{"path":715,"title":716},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir","Decorator Tasarım Deseni Nedir?",{"path":718,"title":719},"\u002Ftr\u002Fopenlitespeed-ve-litespeed-enterprisei-reverse-proxy-olarak-kullanmak","OpenLiteSpeed ve LiteSpeed Enterprise Sunucularını Reverse Proxy Olarak Kullanmak",{"path":721,"title":722},"\u002Ftr\u002Fgo-ile-websockets-websocket-upgrader-nedir","Go ile WebSockets: Upgrader Nedir?",{"path":724,"title":725},"\u002Ftr\u002Fgo-veri-tipleri-string-integer-float-complex-boolean-ve-array","Go Veri Tipleri - String, Integer, Float, Complex, Boolean ve Array",{"path":727,"title":728},"\u002Ftr\u002Fnext-js-on-bellegi-nasil-yenilenir-on-demand-cache-regeneration","Next.js Önbelleği Nasıl Yenilenir? \"On-Demand Cache Regeneration\"",{"path":730,"title":731},"\u002Ftr\u002Fwebpack-nedir","Webpack Nedir? Modern JavaScript Paketleyici Ekosistemi",{"path":733,"title":734},"\u002Ftr\u002Fproxy-tasarim-deseni-nedir","Proxy Tasarım Deseni Nedir?",{"path":736,"title":737},"\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir","Factory Method ve Abstract Factory Farkı Nedir?",{"path":739,"title":740},"\u002Ftr\u002Fes8-nedir-ecmascript-2017-nedir","ES8 Nedir? ECMAScript 2017 Nedir?",{"path":742,"title":743},"\u002Ftr\u002Fheadless-wordpress-hakkinda-her-sey","Headless WordPress Hakkında Her Şey",{"path":745,"title":746},"\u002Ftr\u002Fphalcon-frameworkun-gelecegi","Phalcon Framework'ün Geleceği: Bir Devrin Sonu",{"path":748,"title":749},"\u002Ftr\u002Fmerhaba-tailwind-css","Merhaba Tailwind CSS",{"path":751,"title":752},"\u002Ftr\u002Fgo-slice-veri-tipi","Go Veri Tipleri: Slice",{"path":754,"title":755},"\u002Ftr\u002Fgo-veri-tipleri-struct","Go Veri Tipleri: Struct",{"path":35,"title":757},"REST API URI Yapısı Nasıl Olmalı?",{"path":759,"title":760},"\u002Ftr\u002Fes9-nedir-ecmascript-2018-nedir","ES9 Nedir? ECMAScript 2018 Nedir?",{"path":762,"title":763},"\u002Ftr\u002Fdocker-ile-redis-kurulumu","Docker ile Redis Kurulumu",{"path":765,"title":766},"\u002Ftr\u002Fearly-return-erken-donus-nedir","Early Return \u002F Erken Dönüş nedir?",{"path":768,"title":769},"\u002Ftr\u002Froot-yetkisi-olmayan-kullanici-ssh-baglantisini-ssh-baglantisini-ssh-anahtari-ile-nasil-kurabilir","Root yetkisi olmayan kullanıcı, SSH bağlantısını, SSH anahtarı ile nasıl kurabilir?",{"path":771,"title":772},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-abstract-factory-nedir","Abstract Factory Tasarım Deseni Nedir?",[774,777,780,782],{"path":41,"title":775,"date":776},"RestApi ve HATEOAS Kavramı","2021-02-24",{"path":71,"title":778,"date":779},"Full Stack Proje Geliştiriyoruz","2021-02-16",{"path":65,"title":781,"date":779},"REST Api Dokümantasyonu Nasıl Oluşturulur?",{"path":59,"title":605,"date":779},[784,786,790],{"path":765,"title":766,"date":785},"2021-09-11",{"path":787,"title":788,"date":789},"\u002Ftr\u002Fes17-nedir-ecmascript-2026-nedir","ES17 nedir? ECMAScript 2026 nedir?","2026-06-20",{"path":791,"title":792,"date":793},"\u002Ftr\u002Fflyweight-tasarim-deseni-nedir","Flyweight Tasarım Deseni Nedir?","2021-09-14",1782142033339]