[{"data":1,"prerenderedAt":1092},["ShallowReactive",2],{"post-\u002Ftr\u002Frestapi-ve-hateoas-kavrami":3},{"page":4,"translation":944,"nav":946,"related":1070,"random":1079},{"id":5,"title":6,"body":7,"categories":925,"category":927,"date":928,"description":929,"draft":930,"extension":931,"image":932,"kind":927,"lang":110,"meta":933,"navigation":476,"path":875,"readingTime":265,"seo":934,"slug":935,"stem":936,"tags":937,"translationKey":941,"type":926,"updated":942,"__hash__":943},"postsTr\u002Ftr\u002Frestapi-ve-hateoas-kavrami.md","RestApi ve HATEOAS Kavramı",{"type":8,"value":9,"toc":911},"minimark",[10,14,55,58,63,70,97,99,103,192,194,198,201,204,269,272,403,410,412,417,420,423,445,448,608,611,614,713,720,722,726,758,760,764,768,771,775,778,805,807,811,830,832,837,845,847,851,907],[11,12,13],"p",{},"Bazı şeyler vardır, her yerde öyle kullanıldığını görürsünüz ve siz de farkında olmadan öyle kullanmaya başlarsınız. Bir gün alaylı olarak öğrendiğiniz bu şeyin adını duyar ve \"ben hep öyle yapıyordum, onun bir adı mı varmış\" dersiniz. İşte ben bugün o 'bazı şeylerden' birini yaşadım ve yaşadığım aydınlanmayı sizlerle de paylaşmak istedim. O şeyin adı \"HATEOAS\", dokümantasyonlarda veya spesifikasyonlarda böyle böyle yapın diye öğrendiğimiz şeyin aslında bir adı varmış. :)",[15,16,17,24],"blockquote",{},[11,18,19,20],{},"💡 ",[21,22,23],"strong",{},"Özet (TL;DR):",[25,26,27,34,45],"ul",{},[28,29,30,33],"li",{},[21,31,32],{},"HATEOAS Nedir?:"," REST mimarisinin en olgun seviyesi (Level 3) olup, sunucunun veriyle birlikte istemcinin yapabileceği sonraki işlemleri gösteren dinamik bağlantıları (hypermedia) dönmesidir.",[28,35,36,39,40,44],{},[21,37,38],{},"Kilit Fayda:"," İstemcinin sunucu URL şemalarından tamamen bağımsızlaşmasıdır. İstemci, URL yollarını sabit kodlamak (hardcode) yerine ilişkileri (",[41,42,43],"code",{},"rel",") takip eder.",[28,46,47,50,51],{},[21,48,49],{},"Motto:"," ",[52,53,54],"em",{},"Decouple clients from server URIs using dynamic hypermedia links.",[56,57],"hr",{},[59,60,62],"h2",{"id":61},"richardson-olgunluk-modeli-richardson-maturity-model","Richardson Olgunluk Modeli (Richardson Maturity Model)",[11,64,65,66,69],{},"HATEOAS'ın REST mimarisindeki yerini anlamak için, REST uyumluluğunu 4 seviyeye ayıran ",[21,67,68],{},"Richardson Olgunluk Modeli","'ne bakmak gerekir:",[71,72,73,79,85,91],"ol",{},[28,74,75,78],{},[21,76,77],{},"Level 0 (Swamp of POX):"," Tek bir URI ve tek bir HTTP metodu (genellikle POST) kullanılır. Örnek: SOAP tabanlı servisler.",[28,80,81,84],{},[21,82,83],{},"Level 1 (Resources):"," Kaynaklara özel farklı URI'lar tanımlanır ancak HTTP metotları standartlara uygun kullanılmaz veya tekilleştirilmez.",[28,86,87,90],{},[21,88,89],{},"Level 2 (HTTP Verbs):"," Çoklu URI yapısı ile birlikte standart HTTP metotları (GET, POST, PUT, DELETE) ve HTTP durum kodları (200, 201, 404, 500 vb.) doğru şekilde kullanılır.",[28,92,93,96],{},[21,94,95],{},"Level 3 (Hypermedia Controls - HATEOAS):"," API, döneceği hypermedia bağlantılarıyla kendi kendini belgeler ve istemciye sonraki adımları dinamik olarak gösterir.",[56,98],{},[59,100,102],{"id":101},"hateoas-vs-standart-rest","HATEOAS vs. Standart REST",[104,105,106,123],"table",{},[107,108,109],"thead",{},[110,111,112,117,120],"tr",{},[113,114,116],"th",{"align":115},"left","Özellik",[113,118,119],{"align":115},"Standart REST (Level 2)",[113,121,122],{"align":115},"HATEOAS REST (Level 3)",[124,125,126,147,163,179],"tbody",{},[110,127,128,134,141],{},[129,130,131],"td",{"align":115},[21,132,133],{},"URL Çözümleme",[129,135,136,137,140],{"align":115},"İstemci tarafında sabit kodlanır (",[41,138,139],{},"\u002Faccounts\u002F{id}\u002Fwithdraw",")",[129,142,143,144,140],{"align":115},"Yanıttan dinamik olarak okunur (",[41,145,146],{},"links.withdraw",[110,148,149,154,160],{},[129,150,151],{"align":115},[21,152,153],{},"Durum Kararları",[129,155,156,157,140],{"align":115},"İstemci tarafındaki iş kurallarıyla yönetilir (",[41,158,159],{},"balance > 0",[129,161,162],{"align":115},"Sunucudan gelen link varlığına göre belirlenir (link varsa buton gösterilir)",[110,164,165,170,173],{},[129,166,167],{"align":115},[21,168,169],{},"Sunucu Değişiklikleri",[129,171,172],{"align":115},"Sunucuda URL değişirse istemci kırılır",[129,174,175,176,178],{"align":115},"İstemci etkilenmez, sadece ilişki anahtarını (",[41,177,43],{},") takip eder",[110,180,181,186,189],{},[129,182,183],{"align":115},[21,184,185],{},"API Bağımlılığı",[129,187,188],{"align":115},"URL yapısına sıkı sıkıya bağlıdır (Tight coupling)",[129,190,191],{"align":115},"Gevşek bağlıdır, son derece esnektir (Loose coupling)",[56,193],{},[59,195,197],{"id":196},"hateoas-örneği","HATEOAS Örneği",[11,199,200],{},"REST API'mizden bir makalenin bilgilerini istedik. Gelen veri; \"Makale Başlığı ve Makale İçeriği\" olacaktır. Bununla birlikte \"Yazar\", \"Yorumlar\", \"Kategoriler\" vb. ilişkili kaynaklar olduğu ve bu kaynaklara ulaşılabilecek \"URL\"ler de gönderilecektir.",[11,202,203],{},"Standart bir REST (Level 2) çıktısı sadece veriyi döner:",[205,206,211],"pre",{"className":207,"code":208,"language":209,"meta":210,"style":210},"language-json shiki shiki-themes github-light github-dark","{\n    \"id\": 42,\n    \"title\": \"RestApi ve HATEOAS Kavramı\",\n    \"content\": \"HATEOAS İngilizce...\"\n}\n","json","",[41,212,213,222,238,252,263],{"__ignoreMap":210},[214,215,218],"span",{"class":216,"line":217},"line",1,[214,219,221],{"class":220},"sVt8B","{\n",[214,223,225,229,232,235],{"class":216,"line":224},2,[214,226,228],{"class":227},"sj4cs","    \"id\"",[214,230,231],{"class":220},": ",[214,233,234],{"class":227},"42",[214,236,237],{"class":220},",\n",[214,239,241,244,246,250],{"class":216,"line":240},3,[214,242,243],{"class":227},"    \"title\"",[214,245,231],{"class":220},[214,247,249],{"class":248},"sZZnC","\"RestApi ve HATEOAS Kavramı\"",[214,251,237],{"class":220},[214,253,255,258,260],{"class":216,"line":254},4,[214,256,257],{"class":227},"    \"content\"",[214,259,231],{"class":220},[214,261,262],{"class":248},"\"HATEOAS İngilizce...\"\n",[214,264,266],{"class":216,"line":265},5,[214,267,268],{"class":220},"}\n",[11,270,271],{},"HATEOAS uyumlu bir API ise ilişkili kaynaklara nasıl ulaşılacağını da bağlantılarla birlikte sunar:",[205,273,275],{"className":207,"code":274,"language":209,"meta":210,"style":210},"{\n    \"id\": 42,\n    \"title\": \"RestApi ve HATEOAS Kavramı\",\n    \"content\": \"HATEOAS İngilizce...\",\n    \"_links\": {\n        \"self\": { \"href\": \"\u002Farticles\u002F42\" },\n        \"author\": { \"href\": \"\u002Fusers\u002F15\" },\n        \"comments\": { \"href\": \"\u002Farticles\u002F42\u002Fcomments\" },\n        \"categories\": { \"href\": \"\u002Fcategories\u002F8\" }\n    }\n}\n",[41,276,277,281,291,301,312,320,340,357,374,392,398],{"__ignoreMap":210},[214,278,279],{"class":216,"line":217},[214,280,221],{"class":220},[214,282,283,285,287,289],{"class":216,"line":224},[214,284,228],{"class":227},[214,286,231],{"class":220},[214,288,234],{"class":227},[214,290,237],{"class":220},[214,292,293,295,297,299],{"class":216,"line":240},[214,294,243],{"class":227},[214,296,231],{"class":220},[214,298,249],{"class":248},[214,300,237],{"class":220},[214,302,303,305,307,310],{"class":216,"line":254},[214,304,257],{"class":227},[214,306,231],{"class":220},[214,308,309],{"class":248},"\"HATEOAS İngilizce...\"",[214,311,237],{"class":220},[214,313,314,317],{"class":216,"line":265},[214,315,316],{"class":227},"    \"_links\"",[214,318,319],{"class":220},": {\n",[214,321,323,326,329,332,334,337],{"class":216,"line":322},6,[214,324,325],{"class":227},"        \"self\"",[214,327,328],{"class":220},": { ",[214,330,331],{"class":227},"\"href\"",[214,333,231],{"class":220},[214,335,336],{"class":248},"\"\u002Farticles\u002F42\"",[214,338,339],{"class":220}," },\n",[214,341,343,346,348,350,352,355],{"class":216,"line":342},7,[214,344,345],{"class":227},"        \"author\"",[214,347,328],{"class":220},[214,349,331],{"class":227},[214,351,231],{"class":220},[214,353,354],{"class":248},"\"\u002Fusers\u002F15\"",[214,356,339],{"class":220},[214,358,360,363,365,367,369,372],{"class":216,"line":359},8,[214,361,362],{"class":227},"        \"comments\"",[214,364,328],{"class":220},[214,366,331],{"class":227},[214,368,231],{"class":220},[214,370,371],{"class":248},"\"\u002Farticles\u002F42\u002Fcomments\"",[214,373,339],{"class":220},[214,375,377,380,382,384,386,389],{"class":216,"line":376},9,[214,378,379],{"class":227},"        \"categories\"",[214,381,328],{"class":220},[214,383,331],{"class":227},[214,385,231],{"class":220},[214,387,388],{"class":248},"\"\u002Fcategories\u002F8\"",[214,390,391],{"class":220}," }\n",[214,393,395],{"class":216,"line":394},10,[214,396,397],{"class":220},"    }\n",[214,399,401],{"class":216,"line":400},11,[214,402,268],{"class":220},[11,404,405,406,409],{},"İstemci tarafında yazarın veya yorumların URL şemasının nasıl kurulduğunu bilmemiz gerekmez. Doğrudan ",[41,407,408],{},"\"comments\""," anahtarındaki adrese istek atmak yeterlidir.",[56,411],{},[413,414,416],"h3",{"id":415},"vikipedideki-banka-hesabı-örneği","Vikipedi'deki Banka Hesabı Örneği",[11,418,419],{},"Uygulama durumunun (Application State) HATEOAS ile nasıl yönetildiğini anlamak için klasik banka hesabı örneğine bakalım.",[11,421,422],{},"İstemci, bakiyesi artı değerde olan bir HESAP (ACCOUNT) kaynağı için istek gönderir:",[205,424,428],{"className":425,"code":426,"language":427,"meta":210,"style":210},"language-http shiki shiki-themes github-light github-dark","GET \u002Faccounts\u002F12345 HTTP\u002F1.1\nHost: bank.example.com\nAccept: application\u002Fvnd.acme.account+json\n","http",[41,429,430,435,440],{"__ignoreMap":210},[214,431,432],{"class":216,"line":217},[214,433,434],{},"GET \u002Faccounts\u002F12345 HTTP\u002F1.1\n",[214,436,437],{"class":216,"line":224},[214,438,439],{},"Host: bank.example.com\n",[214,441,442],{"class":216,"line":240},[214,443,444],{},"Accept: application\u002Fvnd.acme.account+json\n",[11,446,447],{},"Geri dönen temsili cevap şudur:",[205,449,451],{"className":207,"code":450,"language":209,"meta":210,"style":210},"HTTP\u002F1.1 200 OK\nContent-Type: application\u002Fvnd.acme.account+json\n\n{\n    \"account\": {\n        \"account_number\": 12345,\n        \"balance\": {\n            \"currency\": \"usd\",\n            \"value\": 100.00\n        },\n        \"links\": {\n            \"deposit\": \"\u002Faccounts\u002F12345\u002Fdeposit\",\n            \"withdraw\": \"\u002Faccounts\u002F12345\u002Fwithdraw\",\n            \"transfer\": \"\u002Faccounts\u002F12345\u002Ftransfer\",\n            \"close\": \"\u002Faccounts\u002F12345\u002Fclose\"\n        }\n    }\n}\n",[41,452,453,467,472,478,482,489,501,508,520,530,535,542,555,568,581,592,598,603],{"__ignoreMap":210},[214,454,455,458,461,464],{"class":216,"line":217},[214,456,457],{"class":220},"HTTP\u002F",[214,459,460],{"class":227},"1.1",[214,462,463],{"class":227}," 200",[214,465,466],{"class":220}," OK\n",[214,468,469],{"class":216,"line":224},[214,470,471],{"class":220},"Content-Type: application\u002Fvnd.acme.account+json\n",[214,473,474],{"class":216,"line":240},[214,475,477],{"emptyLinePlaceholder":476},true,"\n",[214,479,480],{"class":216,"line":254},[214,481,221],{"class":220},[214,483,484,487],{"class":216,"line":265},[214,485,486],{"class":227},"    \"account\"",[214,488,319],{"class":220},[214,490,491,494,496,499],{"class":216,"line":322},[214,492,493],{"class":227},"        \"account_number\"",[214,495,231],{"class":220},[214,497,498],{"class":227},"12345",[214,500,237],{"class":220},[214,502,503,506],{"class":216,"line":342},[214,504,505],{"class":227},"        \"balance\"",[214,507,319],{"class":220},[214,509,510,513,515,518],{"class":216,"line":359},[214,511,512],{"class":227},"            \"currency\"",[214,514,231],{"class":220},[214,516,517],{"class":248},"\"usd\"",[214,519,237],{"class":220},[214,521,522,525,527],{"class":216,"line":376},[214,523,524],{"class":227},"            \"value\"",[214,526,231],{"class":220},[214,528,529],{"class":227},"100.00\n",[214,531,532],{"class":216,"line":394},[214,533,534],{"class":220},"        },\n",[214,536,537,540],{"class":216,"line":400},[214,538,539],{"class":227},"        \"links\"",[214,541,319],{"class":220},[214,543,545,548,550,553],{"class":216,"line":544},12,[214,546,547],{"class":227},"            \"deposit\"",[214,549,231],{"class":220},[214,551,552],{"class":248},"\"\u002Faccounts\u002F12345\u002Fdeposit\"",[214,554,237],{"class":220},[214,556,558,561,563,566],{"class":216,"line":557},13,[214,559,560],{"class":227},"            \"withdraw\"",[214,562,231],{"class":220},[214,564,565],{"class":248},"\"\u002Faccounts\u002F12345\u002Fwithdraw\"",[214,567,237],{"class":220},[214,569,571,574,576,579],{"class":216,"line":570},14,[214,572,573],{"class":227},"            \"transfer\"",[214,575,231],{"class":220},[214,577,578],{"class":248},"\"\u002Faccounts\u002F12345\u002Ftransfer\"",[214,580,237],{"class":220},[214,582,584,587,589],{"class":216,"line":583},15,[214,585,586],{"class":227},"            \"close\"",[214,588,231],{"class":220},[214,590,591],{"class":248},"\"\u002Faccounts\u002F12345\u002Fclose\"\n",[214,593,595],{"class":216,"line":594},16,[214,596,597],{"class":220},"        }\n",[214,599,601],{"class":216,"line":600},17,[214,602,397],{"class":220},[214,604,606],{"class":216,"line":605},18,[214,607,268],{"class":220},[11,609,610],{},"Görüldüğü gibi, yatırma (deposit), çekme (withdraw), transfer ve kapatma (close) bağlantıları istemciye sunulmuştur.",[11,612,613],{},"Peki, hesap bakiyesinin eksiye düştüğü bir sonraki durumu sorguladığımızda ne olur?",[205,615,617],{"className":207,"code":616,"language":209,"meta":210,"style":210},"HTTP\u002F1.1 200 OK\nContent-Type: application\u002Fvnd.acme.account+json\n\n{\n    \"account\": {\n        \"account_number\": 12345,\n        \"balance\": {\n            \"currency\": \"usd\",\n            \"value\": -25.00\n        },\n        \"links\": {\n            \"deposit\": \"\u002Faccounts\u002F12345\u002Fdeposit\"\n        }\n    }\n}\n",[41,618,619,629,633,637,641,647,657,663,673,682,686,692,701,705,709],{"__ignoreMap":210},[214,620,621,623,625,627],{"class":216,"line":217},[214,622,457],{"class":220},[214,624,460],{"class":227},[214,626,463],{"class":227},[214,628,466],{"class":220},[214,630,631],{"class":216,"line":224},[214,632,471],{"class":220},[214,634,635],{"class":216,"line":240},[214,636,477],{"emptyLinePlaceholder":476},[214,638,639],{"class":216,"line":254},[214,640,221],{"class":220},[214,642,643,645],{"class":216,"line":265},[214,644,486],{"class":227},[214,646,319],{"class":220},[214,648,649,651,653,655],{"class":216,"line":322},[214,650,493],{"class":227},[214,652,231],{"class":220},[214,654,498],{"class":227},[214,656,237],{"class":220},[214,658,659,661],{"class":216,"line":342},[214,660,505],{"class":227},[214,662,319],{"class":220},[214,664,665,667,669,671],{"class":216,"line":359},[214,666,512],{"class":227},[214,668,231],{"class":220},[214,670,517],{"class":248},[214,672,237],{"class":220},[214,674,675,677,679],{"class":216,"line":376},[214,676,524],{"class":227},[214,678,231],{"class":220},[214,680,681],{"class":227},"-25.00\n",[214,683,684],{"class":216,"line":394},[214,685,534],{"class":220},[214,687,688,690],{"class":216,"line":400},[214,689,539],{"class":227},[214,691,319],{"class":220},[214,693,694,696,698],{"class":216,"line":544},[214,695,547],{"class":227},[214,697,231],{"class":220},[214,699,700],{"class":248},"\"\u002Faccounts\u002F12345\u002Fdeposit\"\n",[214,702,703],{"class":216,"line":557},[214,704,597],{"class":220},[214,706,707],{"class":216,"line":570},[214,708,397],{"class":220},[214,710,711],{"class":216,"line":583},[214,712,268],{"class":220},[11,714,715,716,719],{},"Bu durumda bağlantılar içinde para çekme, transfer ve kapatma yer almaz, sadece para yatırma bağlantısı sunulur. İstemci tarafında \"eğer bakiye 0'dan büyükse para çekme butonunu göster, küçükse gizle\" gibi bir iş mantığı kurmaya gerek kalmaz. Sadece gelen yanıtta ",[41,717,718],{},"withdraw"," linkinin olup olmadığına bakılarak arayüz dinamik olarak şekillendirilir.",[56,721],{},[59,723,725],{"id":724},"hateoas-bize-ne-sağlıyor","HATEOAS Bize Ne Sağlıyor?",[71,727,728,746,752],{},[28,729,730,733,734,737,738,741,742,745],{},[21,731,732],{},"Bağlantı Bağımsızlığı (Decoupled URIs):"," Sunucu tarafındaki URL'ler değişse bile (",[41,735,736],{},"\u002Faccounts"," yerine ",[41,739,740],{},"\u002Fapi\u002Fv2\u002Faccounts"," gelse dahi), istemci ilişkisel anahtarları (örn: ",[41,743,744],{},"deposit",") takip ettiği için istemci kodunda güncelleme yapmaya gerek kalmaz.",[28,747,748,751],{},[21,749,750],{},"Kolaylaştırılmış İstemci Mantığı:"," Karmaşık iş kuralları ve durum kontrolleri tamamen sunucu tarafında kalır. İstemci sadece linklerin varlığını denetler.",[28,753,754,757],{},[21,755,756],{},"Kendi Kendini Belgeleme (Discoverability):"," API'yi kullanan geliştiriciler, statik belgelere bağımlı kalmadan linkleri takip ederek tüm API fonksiyonlarını dinamik olarak keşfedebilirler.",[56,759],{},[59,761,763],{"id":762},"sıkça-sorulan-sorular-faq","Sıkça Sorulan Sorular (FAQ)",[413,765,767],{"id":766},"hateoas-neden-tüm-genel-apilerde-yaygın-olarak-kullanılmıyor","HATEOAS neden tüm genel API'lerde yaygın olarak kullanılmıyor?",[11,769,770],{},"Teoride mükemmel olsa da, HATEOAS her yanıtta büyük link nesneleri taşıdığı için payload boyutunu artırır. Ayrıca istemci tarafında statik URL çağırmak yerine dinamik link tarayıcıları yazmak gerektiğinden geliştiriciler tarafından alışılagelmiş yöntemlere kıyasla daha karmaşık bulunur.",[413,772,774],{"id":773},"hateoas-uygulamak-için-hangi-standart-formatlar-kullanılır","HATEOAS uygulamak için hangi standart formatlar kullanılır?",[11,776,777],{},"Düz JSON yerine, hypermedia ilişkilerini standartlaştıran şu formatlar tercih edilir:",[25,779,780,793,799],{},[28,781,782,50,785,788,789,792],{},[21,783,784],{},"HAL (Hypertext Application Language):",[41,786,787],{},"_links"," ve ",[41,790,791],{},"_embedded"," alanlarıyla en yaygın ve sade JSON uzantısıdır.",[28,794,795,798],{},[21,796,797],{},"Siren:"," Eylemleri, sınıfları ve şemaları barındıran daha gelişmiş bir formattır.",[28,800,801,804],{},[21,802,803],{},"JSON-LD:"," Veri bağlamlarını küresel olarak birbirine bağlayan yapıdır.",[56,806],{},[59,808,810],{"id":809},"referans","Referans",[71,812,813],{},[28,814,815,816,819,820,829],{},"Wikipedia contributors. \"HATEOAS.\" ",[52,817,818],{},"Wikipedia, The Free Encyclopedia",". Wikipedia, The Free Encyclopedia, 18 Mar. 2020. Web. ",[821,822,823],"a",{"href":823,"rel":824,"target":828},"https:\u002F\u002Fen.wikipedia.org\u002Fw\u002Findex.php?title=HATEOAS&oldid=946088168",[825,826,827],"nofollow","noopener","noreferrer","_blank",".",[56,831],{},[833,834,836],"h5",{"id":835},"bu-yazıda-yapılan-değişiklikler","Bu Yazıda Yapılan Değişiklikler",[25,838,839,842],{},[28,840,841],{},"20.06.2026: Yazı tamamen modernize edildi. Richardson Olgunluk Modeli açıklaması, HATEOAS vs Standart REST karşılaştırma tablosu ve FAQ bölümü eklendi.",[28,843,844],{},"11.05.2022: Yazı özeti düzenlendi.",[56,846],{},[59,848,850],{"id":849},"rest-api-yazı-dizisi","REST API Yazı Dizisi",[25,852,853,859,865,871,877,883,889,895,901],{},[28,854,855],{},[821,856,858],{"href":857},"\u002Ftr\u002Frest-api-tasarimi#rest-api-temelleri","REST Api Temelleri",[28,860,861],{},[821,862,864],{"href":863},"\u002Ftr\u002Frest-api-tasarimi#cikti-formati","REST API Çıktı Formatı Ne Olmalı?",[28,866,867],{},[821,868,870],{"href":869},"\u002Ftr\u002Frest-api-uri-yapisi-nasil-olmali","REST API URI yapısı nasıl olmalı?",[28,872,873],{},[821,874,876],{"href":875},"\u002Ftr\u002Frestapi-ve-hateoas-kavrami","REST Api HATEOAS kavramı nedir? (Bu diziye sonradan eklendi)",[28,878,879],{},[821,880,882],{"href":881},"\u002Ftr\u002Frest-api-kimlik-dogrulama-nasil-yapilir","REST API kimlik doğrulama nasıl yapılır? (Authentication)",[28,884,885],{},[821,886,888],{"href":887},"\u002Ftr\u002Frest-api-hata-yonetimi","REST API hata yönetimi nasıl yapılır? (Error Handling)",[28,890,891],{},[821,892,894],{"href":893},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST API güvenliği nasıl sağlanır? (Security)",[28,896,897],{},[821,898,900],{"href":899},"\u002Ftr\u002Frest-api-dokumantasyonu-nasil-yapilir","REST API Dokümantasyon (Documentation) ve Test'i nasıl yapılır?",[28,902,903],{},[821,904,906],{"href":905},"\u002Ftr\u002Ffull-stack-proje-gelistiriyoruz","Örnek REST API Projesi",[908,909,910],"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 .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":210,"searchDepth":224,"depth":224,"links":912},[913,914,915,918,919,923,924],{"id":61,"depth":224,"text":62},{"id":101,"depth":224,"text":102},{"id":196,"depth":224,"text":197,"children":916},[917],{"id":415,"depth":240,"text":416},{"id":724,"depth":224,"text":725},{"id":762,"depth":224,"text":763,"children":920},[921,922],{"id":766,"depth":240,"text":767},{"id":773,"depth":240,"text":774},{"id":809,"depth":224,"text":810},{"id":849,"depth":224,"text":850},[926],"technical",null,"2021-02-24","HATEOAS (Hypermedia as the Engine of Application State) kavramını, Richardson Olgunluk Modeli'ni ve REST API'lerdeki rolünü öğrenin.",false,"md","\u002Fimages\u002Fhero\u002Frest-api-hypermedia.avif",{},{"title":6,"description":929},"restapi-ve-hateoas-kavrami","tr\u002Frestapi-ve-hateoas-kavrami",[938,939,940],"api","hateoas","rest","what-is-hateoas","2026-06-20","9AVbAYfOyqzsPogq7RlXvlcPutWD5FBCs2oniIcs25Q",{"path":945},"\u002Fwhat-is-hateoas",{"prev":947,"next":950,"others":953,"lucky":1069,"readingTime":265},{"path":948,"title":949},"\u002Ftr\u002Fdocker-ile-mariadb-kurulumu","Docker ile MariaDB Kurulumu",{"path":951,"title":952},"\u002Ftr\u002Fcodeserver-nedir-codeserver-nasil-kurulur","Code-Server Nedir? Bulutta VS Code Geliştirme Ortamı Kurulumu",[954,957,960,963,966,969,972,975,978,981,983,986,989,992,995,998,1001,1004,1007,1010,1013,1014,1017,1020,1023,1026,1029,1032,1035,1038,1040,1043,1046,1049,1052,1055,1058,1061,1064,1066],{"path":955,"title":956},"\u002Ftr\u002Fdocker-ile-redis-kurulumu","Docker ile Redis Kurulumu",{"path":958,"title":959},"\u002Ftr\u002Fes13-nedir-ecmascript-2022-nedir","ES13 nedir? ECMAScript 2022 nedir?",{"path":961,"title":962},"\u002Ftr\u002Fes14-nedir-ecmascript-2023-nedir","ES14 nedir? ECMAScript 2023 nedir?",{"path":964,"title":965},"\u002Ftr\u002Fgo-programlama-dilinin-ozellikleri","Go Programlama Dilinin Özellikleri",{"path":967,"title":968},"\u002Ftr\u002Fvisitor-tasarim-deseni-nedir","Visitor Tasarım Deseni Nedir?",{"path":970,"title":971},"\u002Ftr\u002Faws-ec2-uzerinde-docker-ve-full-stack-web-performansi","AWS EC2 Üzerinde Docker ve Full Stack Web Performansı",{"path":973,"title":974},"\u002Ftr\u002Fobserver-tasarim-deseni-nedir","Observer Tasarım Deseni Nedir?",{"path":976,"title":977},"\u002Ftr\u002Fes9-nedir-ecmascript-2018-nedir","ES9 Nedir? ECMAScript 2018 Nedir?",{"path":979,"title":980},"\u002Ftr\u002Fiterator-tasarim-deseni-nedir","Iterator Tasarım Deseni Nedir?",{"path":869,"title":982},"REST API URI Yapısı Nasıl Olmalı?",{"path":984,"title":985},"\u002Ftr\u002Fgo-veri-tipleri-string-integer-float-complex-boolean-ve-array","Go Veri Tipleri - String, Integer, Float, Complex, Boolean ve Array",{"path":987,"title":988},"\u002Ftr\u002Fgo-ile-websockets-websocket-upgrader-nedir","Go ile WebSockets: Upgrader Nedir?",{"path":990,"title":991},"\u002Ftr\u002Fbuilder-tasarim-deseni-nedir","Builder Tasarım Deseni Nedir?",{"path":993,"title":994},"\u002Ftr\u002Ftailwind-css-nerede-kullanilir-tailwind-css-nerede-kullanilmaz","Tailwind CSS Nerede Kullanılır? Tailwind CSS Nerede Kullanılmaz?",{"path":996,"title":997},"\u002Ftr\u002Fdocker-ile-litespeed-enterprise-kurulumu","Docker ile LiteSpeed Enterprise Kurulumu",{"path":999,"title":1000},"\u002Ftr\u002Fes8-nedir-ecmascript-2017-nedir","ES8 Nedir? ECMAScript 2017 Nedir?",{"path":1002,"title":1003},"\u002Ftr\u002Fgo-ve-degiskenler","Go ve Değişkenler",{"path":1005,"title":1006},"\u002Ftr\u002Fapi-gateway-nedir","API Gateway Nedir? Ne İşe Yarar?",{"path":1008,"title":1009},"\u002Ftr\u002Fes11-nedir-ecmascript-2020-nedir","ES11 Nedir? ECMAScript 2020 Nedir?",{"path":1011,"title":1012},"\u002Ftr\u002Fprogralama-ipucu-yoda-gosterimi","Yoda Koşulları (Yoda Conditions) Nedir? Programlama İpucu",{"path":951,"title":952},{"path":1015,"title":1016},"\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir","Factory Method ve Abstract Factory Farkı Nedir?",{"path":1018,"title":1019},"\u002Ftr\u002Fubuntu-20-04-composer-kurulumu","Ubuntu 20.04 - Composer Kurulumu",{"path":1021,"title":1022},"\u002Ftr\u002Fflyweight-tasarim-deseni-nedir","Flyweight Tasarım Deseni Nedir?",{"path":1024,"title":1025},"\u002Ftr\u002Fprototype-tasarim-deseni-nedir","Prototype Tasarım Deseni Nedir?",{"path":1027,"title":1028},"\u002Ftr\u002Flinuxda-golang-kurulumu","Linux'ta Golang Kurulumu",{"path":1030,"title":1031},"\u002Ftr\u002Fphp-8-0-yenilikler","Merhaba PHP 8: Modern PHP 8.x Çağı",{"path":1033,"title":1034},"\u002Ftr\u002Fwindows-10-golang-kurulumu","Windows 10 ve 11'de Golang Kurulumu ve GOPATH Yapılandırması",{"path":1036,"title":1037},"\u002Ftr\u002Fgarbage-collection-ve-golang","Garbage Collection ve Go (Golang)",{"path":887,"title":1039},"REST Api Hata Yönetimi",{"path":1041,"title":1042},"\u002Ftr\u002Fproxy-tasarim-deseni-nedir","Proxy Tasarım Deseni Nedir?",{"path":1044,"title":1045},"\u002Ftr\u002Fgo-veri-tipleri-map","Go Veri Tipleri - Map",{"path":1047,"title":1048},"\u002Ftr\u002Fmerhabadunya","Merhaba Dünya",{"path":1050,"title":1051},"\u002Ftr\u002Fecmascript-nedir-ecmascript-ne-degildir-bilinmesi-gerekenler","ECMAScript Nedir? Bilinmesi Gerekenler...",{"path":1053,"title":1054},"\u002Ftr\u002Fekran-filtresi-mavi-isik-filtresi-flux","Gözlere dost, mavi ışığa düşman ekran filtresi f.lux",{"path":1056,"title":1057},"\u002Ftr\u002Fgoda-iota-nedir-iota-ne-zaman-ve-nerede-kullanilir","Go'da iota Nedir? iota Ne Zaman ve Nerede Kullanılır?",{"path":1059,"title":1060},"\u002Ftr\u002Fnostalji-ibibik-online","Nostalji: İbibik Online (1998'den Bir Web Macerası)",{"path":1062,"title":1063},"\u002Ftr\u002Fjwt-guvenli-mi-guvenlik-acigi-olusturmayin","JWT Güvenli Derken Güvenlik Açığı Oluşturmayın",{"path":905,"title":1065},"Full Stack Proje Geliştiriyoruz",{"path":1067,"title":1068},"\u002Ftr\u002Fmerhaba-gluster","Merhaba Gluster: Dağıtık Dosya Sistemi Nedir?",{"path":1062,"title":1063},[1071,1073,1075,1077],{"path":905,"title":1065,"date":1072},"2021-02-16",{"path":899,"title":1074,"date":1072},"REST Api Dokümantasyonu Nasıl Oluşturulur?",{"path":893,"title":1076,"date":1072},"REST Api Güvenliği Nasıl Sağlanır?",{"path":887,"title":1039,"date":1078},"2021-02-15",[1080,1084,1088],{"path":1081,"title":1082,"date":1083},"\u002Ftr\u002Fdocker-ile-mongodb-kurulumu","Docker ile MongoDB Kurulumu","2021-03-13",{"path":1085,"title":1086,"date":1087},"\u002Ftr\u002Fvue-3-hakkinda-bilmeniz-gerekenler-yenilikler","Vue 3 Hakkında Bilmeniz Gerekenler ve Yenilikler","2021-07-24",{"path":1089,"title":1090,"date":1091},"\u002Ftr\u002Fdocker-ve-portainer-kurulumu","Docker ve Portainer Kurulumu","2021-02-21",1782142059077]