[{"data":1,"prerenderedAt":1155},["ShallowReactive",2],{"post-\u002Ftr\u002Frest-api-dokumantasyonu-nasil-yapilir":3},{"page":4,"translation":1016,"nav":1018,"related":1141,"random":1149},{"id":5,"title":6,"body":7,"categories":997,"category":999,"date":1000,"description":59,"draft":1001,"extension":1002,"image":1003,"kind":999,"lang":777,"meta":1004,"navigation":1005,"path":109,"readingTime":367,"seo":1006,"slug":1007,"stem":1008,"tags":1009,"translationKey":1013,"type":998,"updated":1014,"__hash__":1015},"postsTr\u002Ftr\u002Frest-api-dokumantasyonu-nasil-yapilir.md","REST Api Dokümantasyonu Nasıl Oluşturulur?",{"type":8,"value":9,"toc":975},"minimark",[10,57,60,117,120,123,203,206,211,214,219,222,240,244,247,272,274,278,282,285,289,292,299,686,688,692,695,722,724,728,731,735,746,750,757,761,764,766,770,844,846,850,854,857,876,880,890,912,915,917,921,955,958,963,971],[11,12,13,21],"blockquote",{},[14,15,16,17],"p",{},"💡 ",[18,19,20],"strong",{},"Özet (TL;DR):",[22,23,24,31,37,43],"ul",{},[25,26,27,30],"li",{},[18,28,29],{},"OpenAPI (Swagger):"," Sektör standardıdır. API şemalarını JSON\u002FYAML olarak tanımlayıp dokümantasyon (Swagger UI\u002FRedoc) ve otomatik istemci kodu üretmeyi sağlar.",[25,32,33,36],{},[18,34,35],{},"Postman:"," Takım çalışması, otomatik test senaryoları ve mock sunucular için zengin bir platformdur.",[25,38,39,42],{},[18,40,41],{},"Modern Yaklaşım:"," Günümüzde dokümantasyonu elle yazmak yerine, FastAPI (Python), NestJS (TS) veya Fastify gibi kütüphanelerle koddan otomatik OpenAPI şemaları türetmek tercih edilir.",[25,44,45,48,49,52,53,56],{},[18,46,47],{},"Modern İstemciler:"," Advanced Rest Client (ARC) yerine artık Git dostu ve açık kaynaklı ",[18,50,51],{},"Bruno"," ya da VS Code entegreli ",[18,54,55],{},"Thunder Client"," gibi modern araçlar kullanılmaktadır.",[14,58,59],{},"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.",[22,61,62,69,75,81,87,93,99,105,111],{},[25,63,64],{},[65,66,68],"a",{"href":67},"\u002Ftr\u002Frest-api-tasarimi#rest-api-temelleri","REST Api Temelleri",[25,70,71],{},[65,72,74],{"href":73},"\u002Ftr\u002Frest-api-tasarimi#cikti-formati","REST API Çıktı Formatı Ne Olmalı?",[25,76,77],{},[65,78,80],{"href":79},"\u002Ftr\u002Frest-api-uri-yapisi-nasil-olmali","REST API URI yapısı nasıl olmalı?",[25,82,83],{},[65,84,86],{"href":85},"\u002Ftr\u002Frestapi-ve-hateoas-kavrami","REST Api HATEOAS kavramı nedir? (Bu diziye sonradan eklendi)",[25,88,89],{},[65,90,92],{"href":91},"\u002Ftr\u002Frest-api-kimlik-dogrulama-nasil-yapilir","REST API kimlik doğrulama nasıl yapılır? (Authentication)",[25,94,95],{},[65,96,98],{"href":97},"\u002Ftr\u002Frest-api-hata-yonetimi","REST API hata yönetimi nasıl yapılır? (Error Handling)",[25,100,101],{},[65,102,104],{"href":103},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST API güvenliği nasıl sağlanır? (Security)",[25,106,107],{},[65,108,110],{"href":109},"\u002Ftr\u002Frest-api-dokumantasyonu-nasil-yapilir","REST API Dokümantasyon (Documentation) ve Test'i nasıl yapılır?",[25,112,113],{},[65,114,116],{"href":115},"\u002Ftr\u002Ffull-stack-proje-gelistiriyoruz","Örnek REST API Projesi",[14,118,119],{},"Dokümantasyon oluşturmak, genellikle API'yi kodlamaktan çok daha zor ve ihmal edilen bir süreçtir. Her ne kadar bunu otomatik yaptığını iddia eden kütüphaneler olsa da, bu araçların doğru çıktı verebilmesi için koda eklenmesi gereken açıklamalar (annotations \u002F decorators) bazen manuel doküman yazmak kadar uğraştırıcı olabilir.",[14,121,122],{},"İyi bir REST API dokümantasyonunun mutlaka barındırması gereken kritik bilgiler şunlardır:",[22,124,125,140,146,156,169,191,197],{},[25,126,127,130,131,135,136,139],{},[18,128,129],{},"API Uç Noktaları (Endpoints) ve HTTP Metotları:"," Hangi kaynaklara hangi URI üzerinden erişiliyor? (",[132,133,134],"code",{},"GET \u002Fusers",", ",[132,137,138],{},"POST \u002Fusers"," vb.)",[25,141,142,145],{},[18,143,144],{},"Parametreler:"," Query, Path veya Body içinde hangi parametreler bekliyor? Hangileri zorunlu (required), hangileri isteğe bağlı (optional)? Veri tipleri neler?",[25,147,148,151,152,155],{},[18,149,150],{},"İstek (Request) Örneği:"," Payload içeriği ve HTTP Header bilgileri (örn. ",[132,153,154],{},"Content-Type: application\u002Fjson",").",[25,157,158,161,162,135,165,168],{},[18,159,160],{},"Yanıt (Response) Şeması ve Örnekleri:"," Başarılı (",[132,163,164],{},"200 OK",[132,166,167],{},"201 Created",") ve hatalı yanıtların gövde (body) yapısı.",[25,170,171,174,175,135,178,135,181,135,184,135,187,190],{},[18,172,173],{},"Hata Yönetimi (Error Codes):"," Olası HTTP hata durum kodları (",[132,176,177],{},"400",[132,179,180],{},"401",[132,182,183],{},"403",[132,185,186],{},"404",[132,188,189],{},"500",") ve dönen hata mesajı biçimleri.",[25,192,193,196],{},[18,194,195],{},"Kimlik Doğrulama (Authentication & Authorization):"," Uç noktaya erişim için JWT Token, API Key veya OAuth2 gerekiyor mu? Gerekiyorsa nasıl gönderilmeli?",[25,198,199,202],{},[18,200,201],{},"Hız Sınırları (Rate Limiting):"," İstemcilerin dakikada\u002Fsaniyede yapabileceği maksimum istek sayısı.",[204,205],"hr",{},[207,208,210],"h2",{"id":209},"api-tasarım-yaklaşımları-design-first-vs-code-first","API Tasarım Yaklaşımları: Design-First vs. Code-First",[14,212,213],{},"API dokümantasyonunu kurgularken iki temel yaklaşımdan biri tercih edilir:",[215,216,218],"h3",{"id":217},"_1-design-first-önce-tasarım","1. Design-First (Önce Tasarım)",[14,220,221],{},"Kod yazmaya başlamadan önce API kontratının OpenAPI spesifikasyonuna uygun olarak YAML veya JSON formatında tasarlanmasıdır.",[22,223,224,234],{},[25,225,226,229,230,233],{},[18,227,228],{},"Avantajı:"," Ön yüz (Frontend) ve arka yüz (Backend) geliştiricileri aynı anda, ortak bir kontrat üzerinden çalışmaya başlayabilir. Tasarlanan şema ",[18,231,232],{},"Prism"," gibi mock araçlarıyla anında sahte bir API sunucusuna dönüştürülebilir.",[25,235,236,239],{},[18,237,238],{},"Araçlar:"," Swagger Editor, Stoplight Studio, Apicurio.",[215,241,243],{"id":242},"_2-code-first-önce-kod","2. Code-First (Önce Kod)",[14,245,246],{},"Önce backend kodunun yazılması ve kodun içerisindeki tip tanımlamaları, decorator'lar veya yorum satırları vasıtasıyla dokümantasyonun otomatik olarak türetilmesidir.",[22,248,249,254],{},[25,250,251,253],{},[18,252,228],{}," Kod değiştiğinde dokümantasyon da otomatik olarak güncellenir; kod ile dokümanın senkronizasyonunun bozulması engellenir.",[25,255,256,259,260,263,264,267,268,271],{},[18,257,258],{},"Kütüphaneler:"," FastAPI (Python - entegre gelir), NestJS (",[132,261,262],{},"@nestjs\u002Fswagger"," - TypeScript), Fastify (",[132,265,266],{},"@fastify\u002Fswagger"," - Node.js), ",[132,269,270],{},"zircote\u002Fswagger-php"," (PHP).",[204,273],{},[207,275,277],{"id":276},"sektör-standardı-openapi-ve-swagger","Sektör Standardı: OpenAPI ve Swagger",[215,279,281],{"id":280},"openapi-nedir","OpenAPI Nedir?",[14,283,284],{},"OpenAPI, RESTful API'lerin dil bağımsız bir şekilde tanımlanmasını sağlayan resmi bir spesifikasyondur. API'nizin tüm girdilerini ve çıktılarını standart bir JSON veya YAML dosyasında açıklar.",[215,286,288],{"id":287},"swagger-nedir","Swagger Nedir?",[14,290,291],{},"Swagger, OpenAPI spesifikasyonunu oluşturmak, görselleştirmek ve tüketmek için kullanılan araçlar ekosistemidir (Swagger UI, Swagger Editor, Swagger Codegen).",[14,293,294,295,298],{},"Aşağıda temel bir kullanıcının bilgilerini dönen API endpoint'ine ait örnek bir ",[18,296,297],{},"OpenAPI 3.1"," YAML şeması yer almaktadır:",[300,301,306],"pre",{"className":302,"code":303,"language":304,"meta":305,"style":305},"language-yaml shiki shiki-themes github-light github-dark","openapi: 3.1.0\ninfo:\n  title: Kullanıcı Yönetim API'si\n  version: 1.0.0\npaths:\n  \u002Fusers\u002F{id}:\n    get:\n      summary: Belirli bir kullanıcının detaylarını getirir\n      parameters:\n        - name: id\n          in: path\n          required: true\n          description: Kullanıcının benzersiz ID değeri\n          schema:\n            type: integer\n      security:\n        - BearerAuth: []\n      responses:\n        '200':\n          description: Başarılı istek yanıtı\n          content:\n            application\u002Fjson:\n              schema:\n                type: object\n                properties:\n                  id:\n                    type: integer\n                    example: 42\n                  name:\n                    type: string\n                    example: \"Evren Bal\"\n        '401':\n          description: Yetkisiz erişim (Token eksik veya geçersiz)\ncomponents:\n  securitySchemes:\n    BearerAuth:\n      type: http\n      scheme: bearer\n      bearerFormat: JWT\n","yaml","",[132,307,308,325,334,346,357,365,373,381,392,400,414,425,436,447,455,466,474,485,493,501,511,519,527,535,546,554,562,572,583,591,601,611,619,629,637,645,653,664,675],{"__ignoreMap":305},[309,310,313,317,321],"span",{"class":311,"line":312},"line",1,[309,314,316],{"class":315},"s9eBZ","openapi",[309,318,320],{"class":319},"sVt8B",": ",[309,322,324],{"class":323},"sj4cs","3.1.0\n",[309,326,328,331],{"class":311,"line":327},2,[309,329,330],{"class":315},"info",[309,332,333],{"class":319},":\n",[309,335,337,340,342],{"class":311,"line":336},3,[309,338,339],{"class":315},"  title",[309,341,320],{"class":319},[309,343,345],{"class":344},"sZZnC","Kullanıcı Yönetim API'si\n",[309,347,349,352,354],{"class":311,"line":348},4,[309,350,351],{"class":315},"  version",[309,353,320],{"class":319},[309,355,356],{"class":323},"1.0.0\n",[309,358,360,363],{"class":311,"line":359},5,[309,361,362],{"class":315},"paths",[309,364,333],{"class":319},[309,366,368,371],{"class":311,"line":367},6,[309,369,370],{"class":315},"  \u002Fusers\u002F{id}",[309,372,333],{"class":319},[309,374,376,379],{"class":311,"line":375},7,[309,377,378],{"class":315},"    get",[309,380,333],{"class":319},[309,382,384,387,389],{"class":311,"line":383},8,[309,385,386],{"class":315},"      summary",[309,388,320],{"class":319},[309,390,391],{"class":344},"Belirli bir kullanıcının detaylarını getirir\n",[309,393,395,398],{"class":311,"line":394},9,[309,396,397],{"class":315},"      parameters",[309,399,333],{"class":319},[309,401,403,406,409,411],{"class":311,"line":402},10,[309,404,405],{"class":319},"        - ",[309,407,408],{"class":315},"name",[309,410,320],{"class":319},[309,412,413],{"class":344},"id\n",[309,415,417,420,422],{"class":311,"line":416},11,[309,418,419],{"class":315},"          in",[309,421,320],{"class":319},[309,423,424],{"class":344},"path\n",[309,426,428,431,433],{"class":311,"line":427},12,[309,429,430],{"class":315},"          required",[309,432,320],{"class":319},[309,434,435],{"class":323},"true\n",[309,437,439,442,444],{"class":311,"line":438},13,[309,440,441],{"class":315},"          description",[309,443,320],{"class":319},[309,445,446],{"class":344},"Kullanıcının benzersiz ID değeri\n",[309,448,450,453],{"class":311,"line":449},14,[309,451,452],{"class":315},"          schema",[309,454,333],{"class":319},[309,456,458,461,463],{"class":311,"line":457},15,[309,459,460],{"class":315},"            type",[309,462,320],{"class":319},[309,464,465],{"class":344},"integer\n",[309,467,469,472],{"class":311,"line":468},16,[309,470,471],{"class":315},"      security",[309,473,333],{"class":319},[309,475,477,479,482],{"class":311,"line":476},17,[309,478,405],{"class":319},[309,480,481],{"class":315},"BearerAuth",[309,483,484],{"class":319},": []\n",[309,486,488,491],{"class":311,"line":487},18,[309,489,490],{"class":315},"      responses",[309,492,333],{"class":319},[309,494,496,499],{"class":311,"line":495},19,[309,497,498],{"class":344},"        '200'",[309,500,333],{"class":319},[309,502,504,506,508],{"class":311,"line":503},20,[309,505,441],{"class":315},[309,507,320],{"class":319},[309,509,510],{"class":344},"Başarılı istek yanıtı\n",[309,512,514,517],{"class":311,"line":513},21,[309,515,516],{"class":315},"          content",[309,518,333],{"class":319},[309,520,522,525],{"class":311,"line":521},22,[309,523,524],{"class":315},"            application\u002Fjson",[309,526,333],{"class":319},[309,528,530,533],{"class":311,"line":529},23,[309,531,532],{"class":315},"              schema",[309,534,333],{"class":319},[309,536,538,541,543],{"class":311,"line":537},24,[309,539,540],{"class":315},"                type",[309,542,320],{"class":319},[309,544,545],{"class":344},"object\n",[309,547,549,552],{"class":311,"line":548},25,[309,550,551],{"class":315},"                properties",[309,553,333],{"class":319},[309,555,557,560],{"class":311,"line":556},26,[309,558,559],{"class":315},"                  id",[309,561,333],{"class":319},[309,563,565,568,570],{"class":311,"line":564},27,[309,566,567],{"class":315},"                    type",[309,569,320],{"class":319},[309,571,465],{"class":344},[309,573,575,578,580],{"class":311,"line":574},28,[309,576,577],{"class":315},"                    example",[309,579,320],{"class":319},[309,581,582],{"class":323},"42\n",[309,584,586,589],{"class":311,"line":585},29,[309,587,588],{"class":315},"                  name",[309,590,333],{"class":319},[309,592,594,596,598],{"class":311,"line":593},30,[309,595,567],{"class":315},[309,597,320],{"class":319},[309,599,600],{"class":344},"string\n",[309,602,604,606,608],{"class":311,"line":603},31,[309,605,577],{"class":315},[309,607,320],{"class":319},[309,609,610],{"class":344},"\"Evren Bal\"\n",[309,612,614,617],{"class":311,"line":613},32,[309,615,616],{"class":344},"        '401'",[309,618,333],{"class":319},[309,620,622,624,626],{"class":311,"line":621},33,[309,623,441],{"class":315},[309,625,320],{"class":319},[309,627,628],{"class":344},"Yetkisiz erişim (Token eksik veya geçersiz)\n",[309,630,632,635],{"class":311,"line":631},34,[309,633,634],{"class":315},"components",[309,636,333],{"class":319},[309,638,640,643],{"class":311,"line":639},35,[309,641,642],{"class":315},"  securitySchemes",[309,644,333],{"class":319},[309,646,648,651],{"class":311,"line":647},36,[309,649,650],{"class":315},"    BearerAuth",[309,652,333],{"class":319},[309,654,656,659,661],{"class":311,"line":655},37,[309,657,658],{"class":315},"      type",[309,660,320],{"class":319},[309,662,663],{"class":344},"http\n",[309,665,667,670,672],{"class":311,"line":666},38,[309,668,669],{"class":315},"      scheme",[309,671,320],{"class":319},[309,673,674],{"class":344},"bearer\n",[309,676,678,681,683],{"class":311,"line":677},39,[309,679,680],{"class":315},"      bearerFormat",[309,682,320],{"class":319},[309,684,685],{"class":344},"JWT\n",[204,687],{},[207,689,691],{"id":690},"modern-dokümantasyon-arayüzleri","Modern Dokümantasyon Arayüzleri",[14,693,694],{},"OpenAPI YAML\u002FJSON dosyasını hazırladıktan sonra bunu kullanıcıya şık bir arayüzle sunmak gerekir:",[696,697,698,704,710,716],"ol",{},[25,699,700,703],{},[18,701,702],{},"Swagger UI:"," Sektörün en eski ve en popüler arayüzüdür. İstekleri doğrudan tarayıcı üzerinden tetikleyerek (\"Try it out\") test etme olanağı tanır.",[25,705,706,709],{},[18,707,708],{},"Redoc:"," Özellikle büyük API'ler için harika, modern ve üç panelli (Sol menü, orta içerik, sağ kod blokları) statik bir dokümantasyon arayüzüdür. Okunabilirliği Swagger UI'dan çok daha yüksektir.",[25,711,712,715],{},[18,713,714],{},"Scalar:"," Son dönemde popülerliği hızla artan, son derece hızlı, etkileşimli ve şık bir OpenAPI istemcisidir. Doğrudan API test aracı (Rest Client) barındırır.",[25,717,718,721],{},[18,719,720],{},"Stoplight Elements:"," Web bileşeni (Web Component) mimarisine sahip, sitenize kolayca entegre edebileceğiniz modern bir alternatiftir.",[204,723],{},[207,725,727],{"id":726},"api-test-ve-dokümantasyon-araçları","API Test ve Dokümantasyon Araçları",[14,729,730],{},"Dokümantasyonun yanı sıra, geliştirme esnasında API isteklerini test etmek için kullanılan araçlar da büyük önem taşır:",[215,732,734],{"id":733},"_1-postman","1. Postman",[14,736,737,738,741,742,745],{},"API testi, takım içi koleksiyon paylaşımı ve uçtan uca entegrasyon testleri için en yaygın platformdur. JavaScript tabanlı test scriptleri yazmanıza ve CI\u002FCD süreçlerine entegre etmenize (",[132,739,740],{},"Newman"," veya ",[132,743,744],{},"Postman CLI"," aracılığıyla) olanak tanır. Ancak, son sürümlerde çok fazla bulut tabanlı ve ticari özelliğe odaklandığı için bazı geliştiriciler tarafından ağır bulunmaktadır.",[215,747,749],{"id":748},"_2-bruno-açık-kaynak-git-dostu","2. Bruno (Açık Kaynak & Git Dostu)",[14,751,752,753,756],{},"Postman'e en güçlü açık kaynaklı alternatiftir. En büyük avantajı, API istek koleksiyonlarını şifreli veya kapalı veri tabanlarında değil, doğrudan projenizin Git deposunda saklanabilecek düz metin formatında (",[132,754,755],{},".bru"," dosyaları olarak) kaydetmesidir. Böylece sürüm kontrolü (version control) çok kolaylaşır.",[215,758,760],{"id":759},"_3-vs-code-eklentileri-thunder-client-rapidapi-client","3. VS Code Eklentileri (Thunder Client \u002F RapidAPI Client)",[14,762,763],{},"Editörden çıkmadan hızlıca istek atmak isteyenler için harika çözümlerdir. Hafif ve pratiktirler.",[204,765],{},[207,767,769],{"id":768},"karşılaştırma-tablosu","Karşılaştırma Tablosu",[771,772,773,793],"table",{},[774,775,776],"thead",{},[777,778,779,784,787,790],"tr",{},[780,781,783],"th",{"align":782},"left","Araç",[780,785,786],{"align":782},"Kullanım Amacı",[780,788,789],{"align":782},"Avantajları",[780,791,792],{"align":782},"Dezavantajları",[794,795,796,813,829],"tbody",{},[777,797,798,804,807,810],{},[799,800,801],"td",{"align":782},[18,802,803],{},"OpenAPI \u002F Swagger",[799,805,806],{"align":782},"Şema & Görsel Arayüz",[799,808,809],{"align":782},"Dil bağımsız standart, otomatik kod üretimi, geniş ekosistem",[799,811,812],{"align":782},"YAML\u002FJSON şemasını elle yazmak karmaşıktır",[777,814,815,820,823,826],{},[799,816,817],{"align":782},[18,818,819],{},"Postman",[799,821,822],{"align":782},"API Testi & Otomasyon",[799,824,825],{"align":782},"Zengin arayüz, mock sunucular, güçlü test betikleri",[799,827,828],{"align":782},"Bulut zorunluluğu, ağırlaşan arayüz, takım özellikleri için ücretli olması",[777,830,831,835,838,841],{},[799,832,833],{"align":782},[18,834,51],{},[799,836,837],{"align":782},"Git-Dostu API Testi",[799,839,840],{"align":782},"Tamamen açık kaynak, koleksiyonları git'te düz metin tutma",[799,842,843],{"align":782},"Ekosistemi ve entegrasyon araçları Postman kadar geniş değil",[204,845],{},[207,847,849],{"id":848},"sıkça-sorulan-sorular-faq","Sıkça Sorulan Sorular (FAQ)",[215,851,853],{"id":852},"üretim-production-ortamında-api-dokümantasyonunu-nasıl-korumalıyız","Üretim (Production) ortamında API dokümantasyonunu nasıl korumalıyız?",[14,855,856],{},"Canlı sunucuda tüm API dokümanını herkese açık bırakmak güvenlik riskleri doğurabilir. Bunu önlemek için:",[22,858,859,866,869],{},[25,860,861,862,865],{},"Swagger\u002FRedoc endpoints arkasına bir ",[18,863,864],{},"Basic Authentication"," (Kullanıcı adı\u002FŞifre) katmanı ekleyin.",[25,867,868],{},"Sadece belirli IP adreslerinden (örn. ofis IP'niz veya VPN) gelen isteklere izin verin.",[25,870,871,872,875],{},"Üretim ortamında dokümantasyon endpoint'ini tamamen kapatacak ortam değişkenleri (",[132,873,874],{},"ENABLE_SWAGGER=false",") kullanın.",[215,877,879],{"id":878},"openapi-şemamı-kullanarak-frontend-için-nasıl-mock-sunucu-oluştururum","OpenAPI şemamı kullanarak frontend için nasıl mock sunucu oluştururum?",[14,881,882,883,886,887,889],{},"Eğer elinizde bir OpenAPI spec dosyası (",[132,884,885],{},"api.yaml",") varsa, ",[18,888,232],{}," kütüphanesini kullanarak saniyeler içinde sahte bir sunucu ayaklandırabilirsiniz:",[300,891,895],{"className":892,"code":893,"language":894,"meta":305,"style":305},"language-bash shiki shiki-themes github-light github-dark","npx @stoplight\u002Fprism-cli mock api.yaml\n","bash",[132,896,897],{"__ignoreMap":305},[309,898,899,903,906,909],{"class":311,"line":312},[309,900,902],{"class":901},"sScJk","npx",[309,904,905],{"class":344}," @stoplight\u002Fprism-cli",[309,907,908],{"class":344}," mock",[309,910,911],{"class":344}," api.yaml\n",[14,913,914],{},"Bu komut, şemada tanımladığınız örnek (example) verileri kullanarak isteklerinize uygun JSON yanıtları dönen bir lokal sunucu başlatır.",[204,916],{},[207,918,920],{"id":919},"resmi-kaynaklar-dokümantasyonlar","Resmi Kaynaklar & Dokümantasyonlar",[22,922,923,934,941,948],{},[25,924,925],{},[65,926,933],{"href":927,"rel":928,"target":932},"https:\u002F\u002Fwww.openapis.org\u002F",[929,930,931],"nofollow","noopener","noreferrer","_blank","OpenAPI Initiative Resmi Web Sitesi",[25,935,936],{},[65,937,940],{"href":938,"rel":939,"target":932},"https:\u002F\u002Fswagger.io\u002Fdocs\u002F",[929,930,931],"Swagger Araçları Resmi Dokümantasyonu",[25,942,943],{},[65,944,947],{"href":945,"rel":946,"target":932},"https:\u002F\u002Fwww.usebruno.com\u002F",[929,930,931],"Bruno API Client Resmi Web Sitesi",[25,949,950],{},[65,951,954],{"href":952,"rel":953,"target":932},"https:\u002F\u002Fscalar.com\u002F",[929,930,931],"Scalar OpenAPI Client Resmi Web Sitesi",[14,956,957],{},"Sonuç olarak, iyi tasarlanmış ve standartlara uygun bir dokümantasyon, API'nizin kullanımını kolaylaştırır, hataları azaltır ve frontend-backend ekipleri arasındaki entegrasyonu hızlandırır. Projelerinizde OpenAPI (Swagger\u002FScalar) standardını benimsemek uzun vadede zaman kazandıracaktır.",[959,960,962],"h5",{"id":961},"bu-yazıda-yapılan-değişiklikler","Bu Yazıda Yapılan Değişiklikler",[22,964,965,968],{},[25,966,967],{},"20.06.2026: Yazı içeriği modern OpenAPI 3.1 standartlarına göre güncellendi. Tasarım yaklaşımları (Design-First vs. Code-First), mock sunucu araçları (Prism), modern dokümantasyon araçları (Redoc, Scalar) ve Git dostu API istemcisi Bruno eklenerek zenginleştirildi.",[25,969,970],{},"11.05.2022: Yazı özeti düzenlendi.",[972,973,974],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}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);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":305,"searchDepth":327,"depth":327,"links":976},[977,981,985,986,991,992,996],{"id":209,"depth":327,"text":210,"children":978},[979,980],{"id":217,"depth":336,"text":218},{"id":242,"depth":336,"text":243},{"id":276,"depth":327,"text":277,"children":982},[983,984],{"id":280,"depth":336,"text":281},{"id":287,"depth":336,"text":288},{"id":690,"depth":327,"text":691},{"id":726,"depth":327,"text":727,"children":987},[988,989,990],{"id":733,"depth":336,"text":734},{"id":748,"depth":336,"text":749},{"id":759,"depth":336,"text":760},{"id":768,"depth":327,"text":769},{"id":848,"depth":327,"text":849,"children":993},[994,995],{"id":852,"depth":336,"text":853},{"id":878,"depth":336,"text":879},{"id":919,"depth":327,"text":920},[998],"technical",null,"2021-02-16",false,"md","\u002Fimages\u002Fhero\u002Fapi-documentation.avif",{},true,{"title":6,"description":59},"rest-api-dokumantasyonu-nasil-yapilir","tr\u002Frest-api-dokumantasyonu-nasil-yapilir",[1010,1011,1012],"api","rest","swagger","rest-api-documentation","2026-06-20","V2MAYA0t_teSuJLcw4Ik81o_nzJhMbihjcqusHk9Cbg",{"path":1017},"\u002Frest-api-documentation-and-testing",{"prev":1019,"next":1021,"others":1023,"lucky":1139,"readingTime":367},{"path":115,"title":1020},"Full Stack Proje Geliştiriyoruz",{"path":103,"title":1022},"REST Api Güvenliği Nasıl Sağlanır?",[1024,1027,1030,1033,1036,1039,1040,1043,1046,1049,1052,1055,1058,1061,1064,1065,1068,1071,1073,1076,1079,1082,1085,1088,1091,1094,1097,1100,1103,1106,1109,1112,1115,1118,1121,1124,1127,1130,1133,1136],{"path":1025,"title":1026},"\u002Ftr\u002Fvisitor-tasarim-deseni-nedir","Visitor Tasarım Deseni Nedir?",{"path":1028,"title":1029},"\u002Ftr\u002Fvite-nedir","Vite Nedir? Modern Web Geliştirme ve Paketleme Aracı",{"path":1031,"title":1032},"\u002Ftr\u002Fes9-nedir-ecmascript-2018-nedir","ES9 Nedir? ECMAScript 2018 Nedir?",{"path":1034,"title":1035},"\u002Ftr\u002Fjwt-guvenli-mi-guvenlik-acigi-olusturmayin","JWT Güvenli Derken Güvenlik Açığı Oluşturmayın",{"path":1037,"title":1038},"\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":103,"title":1022},{"path":1041,"title":1042},"\u002Ftr\u002Fgo-ile-websockets-websocket-upgrader-nedir","Go ile WebSockets: Upgrader Nedir?",{"path":1044,"title":1045},"\u002Ftr\u002Fnostalji-ibibik-online","Nostalji: İbibik Online (1998'den Bir Web Macerası)",{"path":1047,"title":1048},"\u002Ftr\u002Fes13-nedir-ecmascript-2022-nedir","ES13 nedir? ECMAScript 2022 nedir?",{"path":1050,"title":1051},"\u002Ftr\u002Ftailwind-css-just-in-time-modu","Tailwind CSS Just-in-Time (JIT) Modu Nedir?",{"path":1053,"title":1054},"\u002Ftr\u002Fes14-nedir-ecmascript-2023-nedir","ES14 nedir? ECMAScript 2023 nedir?",{"path":1056,"title":1057},"\u002Ftr\u002Fobserver-tasarim-deseni-nedir","Observer Tasarım Deseni Nedir?",{"path":1059,"title":1060},"\u002Ftr\u002Fubuntu-24-04-uzerinde-cyberpanel-kurulumu","Ubuntu 24.04 LTS ve 22.04 LTS Üzerinde CyberPanel Kurulumu",{"path":1062,"title":1063},"\u002Ftr\u002Fubuntu-guncellemesi-sonrasi-cyberpanele-ulasilamama-sorunlarini-giderme","Ubuntu Güncellemesi Sonrası CyberPanel'e Ulaşılamama Sorunlarını Giderme",{"path":115,"title":1020},{"path":1066,"title":1067},"\u002Ftr\u002Fgraylog-nedir-docker-ile-nasil-kurulur","Graylog Nedir? Docker Compose ile Adım Adım Kurulum Rehberi",{"path":1069,"title":1070},"\u002Ftr\u002Fwebpack-nedir","Webpack Nedir? Modern JavaScript Paketleyici Ekosistemi",{"path":91,"title":1072},"REST API Kimlik Doğrulama Nasıl Yapılır?",{"path":1074,"title":1075},"\u002Ftr\u002Fdigital-oceanda-vps-kurulumu","DigitalOcean'da VPS (Droplet) Kurulumu: Adım Adım Rehber",{"path":1077,"title":1078},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir","Decorator Tasarım Deseni Nedir?",{"path":1080,"title":1081},"\u002Ftr\u002Fgo-veri-tipleri-map","Go Veri Tipleri - Map",{"path":1083,"title":1084},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir","Singleton Tasarım Deseni Nedir?",{"path":1086,"title":1087},"\u002Ftr\u002Fprogralama-ipucu-yoda-gosterimi","Yoda Koşulları (Yoda Conditions) Nedir? Programlama İpucu",{"path":1089,"title":1090},"\u002Ftr\u002Fphalcon-frameworkun-gelecegi","Phalcon Framework'ün Geleceği: Bir Devrin Sonu",{"path":1092,"title":1093},"\u002Ftr\u002Fdocker-ile-mariadb-kurulumu","Docker ile MariaDB Kurulumu",{"path":1095,"title":1096},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir","Factory Method Tasarım Deseni Nedir?",{"path":1098,"title":1099},"\u002Ftr\u002Fes17-nedir-ecmascript-2026-nedir","ES17 nedir? ECMAScript 2026 nedir?",{"path":1101,"title":1102},"\u002Ftr\u002Fmutable-ve-immutable-kavrami","Mutable ve Immutable Kavramları Nedir?",{"path":1104,"title":1105},"\u002Ftr\u002Fgoda-iota-nedir-iota-ne-zaman-ve-nerede-kullanilir","Go'da iota Nedir? iota Ne Zaman ve Nerede Kullanılır?",{"path":1107,"title":1108},"\u002Ftr\u002Fself-hosted-api-gateway-nasil-kurulur-kapsamli-rehber","Self-Hosted API Gateway Nasıl Kurulur? Kapsamlı Rehber",{"path":1110,"title":1111},"\u002Ftr\u002Fubuntu-20-04-composer-kurulumu","Ubuntu 20.04 - Composer Kurulumu",{"path":1113,"title":1114},"\u002Ftr\u002Fmemento-tasarim-deseni-nedir","Memento Tasarım Deseni Nedir?",{"path":1116,"title":1117},"\u002Ftr\u002Fdocker-ile-litespeed-enterprise-kurulumu","Docker ile LiteSpeed Enterprise Kurulumu",{"path":1119,"title":1120},"\u002Ftr\u002Fes16-nedir-ecmascript-2025-nedir","ES16 nedir? ECMAScript 2025 nedir?",{"path":1122,"title":1123},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-abstract-factory-nedir","Abstract Factory Tasarım Deseni Nedir?",{"path":1125,"title":1126},"\u002Ftr\u002Fwsl-2-kurulumu-6-kolay-adim","WSL 2 Kurulumu - 6 kolay adım",{"path":1128,"title":1129},"\u002Ftr\u002Fprototype-tasarim-deseni-nedir","Prototype Tasarım Deseni Nedir?",{"path":1131,"title":1132},"\u002Ftr\u002Fmerhabadunya","Merhaba Dünya",{"path":1134,"title":1135},"\u002Ftr\u002Fes8-nedir-ecmascript-2017-nedir","ES8 Nedir? ECMAScript 2017 Nedir?",{"path":1137,"title":1138},"\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir","Factory Method ve Abstract Factory Farkı Nedir?",{"path":85,"title":1140},"RestApi ve HATEOAS Kavramı",[1142,1144,1145,1146],{"path":85,"title":1140,"date":1143},"2021-02-24",{"path":115,"title":1020,"date":1000},{"path":103,"title":1022,"date":1000},{"path":97,"title":1147,"date":1148},"REST Api Hata Yönetimi","2021-02-15",[1150,1151,1153],{"path":91,"title":1072,"date":1148},{"path":1025,"title":1026,"date":1152},"2021-10-09",{"path":1095,"title":1096,"date":1154},"2021-07-24",1782142032328]