RESTful API best practice 2026 itibarıyla artık “Roy Fielding doktorasını okudum” tartışmasından çıkıp; sürüm yönetimi, idempotency, rate-limit, hata kontratı ve OpenAPI sözleşmesi gibi operasyonel beklentilerin standardize edildiği bir mühendislik disiplinine dönüştü. Postman’in 2024 State of the API raporuna göre kuruluşların yaklaşık %74’ü “API-first” yaklaşımı benimsediğini beyan ediyor; Stack Overflow 2024 Developer Survey’de profesyonel geliştiricilerin %57.5’i hâlâ REST’i birincil entegrasyon stili olarak kullanıyor. Bu yazıda, gerçek üretim sistemlerinde uygulanan kontrat tasarımı, kaynak modelleme, hata yönetimi ve sürümleme kalıplarını; sık karşılaşılan anti-pattern’lerle birlikte 2400+ kelimelik somut bir referans olarak ele alacağız. Hedef kitle: orta-büyük ölçekli platformlarda backend, platform engineering veya çözüm mimarisi yapan ekipler.

REST, RESTful ve HTTP API: 2026’da Doğru Tanım

Pratikte üç kavram sıklıkla karıştırılıyor. REST, Fielding’in 2000 tezindeki mimari kısıtlardır (uniform interface, stateless, cacheable, layered, code-on-demand opsiyonel, client-server). RESTful, bu kısıtlara “yeterince” uyan bir tasarımı; HTTP API ise sadece HTTP üzerinden çalışan, REST iddiası olmayan endpoint kümesini ifade eder. Richardson Maturity Model’in 3. seviyesi (HATEOAS) endüstride neredeyse yok denecek kadar nadir benimseniyor; Microsoft Azure REST API Guidelines ve Google AIP rehberleri de Level 2 (HTTP fiilleri + kaynak URI + status code) üzerinde duruyor. Yani 2026’da pragmatik hedef, HATEOAS değil; tutarlı kontrat + makine okunabilir şema + operasyonel olgunluk.

Bu pragmatik konsolidasyon, mikroservislerin yaygınlaşmasıyla daha da hızlandı. Servis sınırlarını netleştirmek için Domain-Driven Design ile bounded context çıkardıktan sonra, her bounded context’in dışa açık yüzünü REST sözleşmesi olarak ifade etmek artık endüstri standardı. Bu sözleşmenin iç implementasyondan bağımsız kalması için katmanların ayrıştırılmasında benimsenen tasarım disiplini de aynı derecede belirleyici. Aşağıdaki tablo, dört yaygın API stilini operasyonel kriterlerle karşılaştırıyor.

KriterRESTGraphQLgRPCWebHook/Event
Sözleşme formatıOpenAPI 3.1SDL schemaProtobuf .protoAsyncAPI 3.0
Tipik latency (p50)20-80 ms30-120 ms5-25 msasenkron
Tarayıcı desteğiTamTamSınırlı (gRPC-Web)Sunucu push gerekir
Caching (HTTP)Yerel destekliManuelYokKonu dışı
Public API uygunluğuYüksekOrtaDüşükOrta
Tooling olgunluğuÇok yüksekYüksekYüksekOrta

REST’in hâlâ baskın olmasının nedeni teknik üstünlük değil, ekosistem: tarayıcılar, CDN’ler, proxy’ler, API gateway’ler, monitoring araçları HTTP semantiklerini varsayar. Yeni bir entegrasyon kanalı açarken bu uyumun değerini hafife alan ekipler, sonradan WAF kurallarından TLS terminasyonuna kadar her katmanda manuel iş yapmak zorunda kalıyor. Daha geniş entegrasyon stratejisi için API entegrasyon: REST, GraphQL ve webhook rehberini inceleyebilirsin.

Kaynak URI hiyerarsi agaci bronz koyu gri 3D render
Kaynak URI hiyerarsi agaci bronz koyu gri 3D render

Kaynak Modelleme ve URI Tasarımı

URI tasarımı görünüşte basit ama mali sonuçları olan bir karar. Microsoft Azure REST API Guidelines ve Google API Improvement Proposals (AIP) ortak bir dil sunuyor: kaynaklar isim (çoğul), fiiller HTTP metodu, hiyerarşi en fazla 2-3 seviye. Aşağıdaki tablo doğru ve yanlış örnekleri yan yana koyuyor.

AmaçAnti-patternDoğru RESTNeden
Sipariş listeleGET /getOrdersGET /ordersFiil URI’da olmaz
Tek siparişGET /order?id=42GET /orders/42ID path parametresi
Sipariş iptaliPOST /cancelOrder/42POST /orders/42/cancellationsSub-resource modeli
Alt kaynakGET /orderLines?orderId=42GET /orders/42/linesHiyerarşi netleşir
FiltreGET /orders/status/paidGET /orders?status=paidFiltre = query string
Toplu işlemPOST /deleteAllPOST /orders:batchDeleteAIP custom verb kalıbı

İki-üç seviyeden derin hiyerarşi (örn. /customers/12/orders/42/lines/3/taxes/2) bakım maliyetini patlatır; üst seviye kimliklerin alt seviyeden tekrar türetilmesi gerekir mi sorusu her endpoint’te ortaya çıkar. AIP-122 bu yüzden “alt kaynağı düz seviyede de erişilebilir kıl” der: GET /orderLines/{id} mümkün olsun, hiyerarşik sürüm sadece listeleme için kullanılsın.

  • İsimlendirme: İngilizce, snake_case yerine kebab-case path; payload’da snake_case veya camelCase tek bir konvansiyon — karıştırma.
  • Çoğul mu tekil mi: Koleksiyon her zaman çoğul (/orders), tekil kaynak sadece singleton ise tekil (/users/me/settings).
  • İlişkisel ID: İlişkiler için URI bağı (/orders/42/lines); body içindeki ID’leri minimumda tut.
  • Versiyon path’i: /v1/orders (URI versioning) en yaygın; header versioning daha temiz ama operasyonel tarafta debug daha zor.

Servis sınırı çıkarımı yaparken yalnız kaynak değil, kimin yazma yetkisi olduğu da önemli. Aynı sipariş kaynağına 3 servis yazıyorsa orada bir modüler monolit aşaması atlanmış demektir; REST endpoint çoğalmadan önce sınırları düzeltmek 6-12 ay sonra refactor maliyetinin onda biri kadar. Kaynak sahipliği ile servis sınırı çakışmadığında ortaya çıkan kontrat erozyonu, geç fark edildiğinde tüm istemci SDK’larını etkileyen breaking change zinciri yaratır.

HTTP Metodları, Status Code ve Idempotency

Üretimde en sık görülen hata sınıfı, HTTP metod semantiklerinin gevşek uygulanması. RFC 9110 (HTTP Semantics) GET, HEAD, PUT, DELETE’i idempotent, GET ve HEAD’i ayrıca safe olarak tanımlar. POST idempotent değildir; PATCH de değildir (resmî olarak). Bu, retry mantığını doğrudan etkiler: ağ kesintisinde otomatik yeniden deneme POST/PATCH için Idempotency-Key başlığı olmadan tehlikeli.

MetodSafeIdempotentTipik kullanımBeklenen 2xx
GETEvetEvetKaynak okuma200, 304
HEADEvetEvetMetadata kontrol200, 304
POSTHayırHayır*Kaynak oluşturma, RPC-vari aksiyon201, 202, 200
PUTHayırEvetTam yer değiştirme200, 204
PATCHHayırHayırKısmi güncelleme200, 204
DELETEHayırEvetSilme200, 202, 204

*Stripe, Square ve PayPal’ın yıllardır kullandığı Idempotency-Key kalıbı POST’u operasyonel olarak idempotent yapar. Stripe Idempotent Requests dokümantasyonu, anahtarın 24 saat saklandığını ve aynı anahtarla gelen sonraki isteklerin önceki yanıtı döndüğünü açıklar. Ödeme, sipariş oluşturma, e-posta gönderme gibi yan etkili tüm POST’larda bu kalıp 2026 sonrası beklenen standart hâline geldi.

  1. PUT vs PATCH: Tam payload gönderiyorsan PUT; sadece değişen alanları gönderiyorsan PATCH (JSON Merge Patch RFC 7396 veya JSON Patch RFC 6902).
  2. Avantaj — PUT: “Last writer wins” semantiği net, conditional If-Match ile optimistic locking kolay.
  3. Dezavantaj — PUT: Büyük kaynaklarda her güncelleme tüm payload’u taşır, mobil maliyeti yüksek.
  4. Ne zaman seç — PATCH: Mobil-first uygulama, dokümana benzer karmaşık kaynak, kısmi yetki senaryoları.

Status Code Kullanımı: 4xx vs 5xx Ayrımı

Yanlış status code, gözlemlenebilirlik (observability) açısından sessiz bir maliyet. SRE ekipleri 5xx oranını uyarıya bağlar; istemci hatasını 500 döndüren bir endpoint, gece 03:00’te boş yere on-call uyandırır. 4xx ve 5xx ayrımının doğru yapılması, bir API’nin operasyonel olgunluğunun en hızlı sinyalidir.

DurumStatusAnlamRetry?
Başarılı oluşturma201 CreatedLocation header eklenir
Asenkron kabul202 Acceptedİş kuyrukta
Geçersiz JSON400 Bad Requestİstemci formatı yanlışHayır
Auth yok401 UnauthorizedToken eksik/geçersizToken yenile
Yetki yok403 ForbiddenKullanıcı izinli değilHayır
Yok404 Not FoundKaynak bulunamadıHayır
Conflict409 ConflictState çakışması / ETag uyumsuzRefresh + retry
Doğrulama422 UnprocessableSemantik validasyon hatasıHayır
Rate-limit429 Too Many RequestsRetry-After zorunluBackoff retry
Sunucu hatası500 InternalBeklenmeyen exceptionBackoff retry
Bağımlılık502/503/504Upstream / overload / timeoutBackoff retry

Hata gövdesi için RFC 9457 Problem Details for HTTP APIs (eski RFC 7807) artık fiili standart. application/problem+json içeriği, type (URI), title, status, detail, instance ve isteğe bağlı domain-spesifik alanlar içerir. Bu format, istemcide hata sınıflandırma kodunu jenerikleştirir, dokümantasyon yükünü düşürür.

HTTP status code yelpazesi 3xx 4xx 5xx bronz kompozisyon
HTTP status code yelpazesi 3xx 4xx 5xx bronz kompozisyon

Versiyonlama: URI, Header, Content Negotiation

API versiyonlamada üç ana kalıp var; hiçbiri “doğru” değil, hepsinin operasyonel maliyeti farklı. Microsoft Azure rehberi URI versiyonlamayı (/v1/) öneriyor; Google AIP ise major sürüm path’te (/v1/), minor sürüm header’da. GitHub API X-GitHub-Api-Version başlığıyla tarih bazlı versiyon kullanıyor.

StratejiÖrnekAvantajDezavantaj
URI versioning/v1/ordersCache ayrımı net, debug kolayAynı kaynak için çoklu URI
Header versioningAccept-Version: 2Tek URI, temizCDN cache key custom yapılandırma
Content negotiationAccept: application/vnd.api+json;v=2HTTP doğalİstemci karmaşık
Date-basedX-Api-Version: 2026-03-01Stripe/GitHub kalıbı, breaking change yavaşTarih-versiyon eşlemesi gerekli
Query versioning?v=2Hızlı geçici çözümAnti-pattern: cache, log kirli

Major sürüm yükseltmesi mümkünse parallel run: yeni sürüm yayınla, eski sürümü minimum 6-12 ay yaşat, deprecation header’ı (Deprecation, Sunset — RFC 8594) ekle, müşteri telemetrisini takip et. Stripe’ın 2011’den bu yana yaklaşık 20 versiyonu eş zamanlı yaşatması bu yaklaşımın en iyi bilinen örneği. Public API’lar için pahalı ama müşteri güvenini koruyan tek yöntem.

Servis içi (internal) API’larda mikroservis mimarisi geçişi sırasında parallel run pahalı olur; bunun yerine consumer-driven contract testing (Pact) ile breaking change’leri build zamanında yakalamak daha verimli. Mikroservis ekosisteminde sürüm yönetimi tek başına yeterli değil; servis keşfi, mTLS ve trafik yönetimi gibi katmanların versiyonlama stratejisine eşlik etmesi, geriye dönük uyumluluğu operasyonel bir özellik hâline getirir.

Sayfalama, Filtreleme ve Sıralama

Liste endpoint’leri toplam yükün %50-70’ini taşır; tasarım hatası burada doğrudan veritabanı maliyetine yansır. Offset/limit sayfalama kolay görünür ama büyük tablolarda OFFSET 100000 tarama maliyeti taşır. Modern API’lar cursor-based pagination tercih eder.

  • Offset pagination: ?page=10&size=20 — basit, ama büyük offset O(N) maliyet. Ne zaman seç: küçük veri kümeleri, admin paneli.
  • Cursor pagination: ?cursor=eyJpZCI6NDJ9&limit=20 — index seek O(log N), sıralı veriler için ideal. Avantaj: stabil sonuç, sonsuz scroll. Dezavantaj: “5. sayfaya atla” mümkün değil.
  • Keyset pagination: ?after_id=42&limit=20 — cursor’ın açık hâli, gizlilik gerekmiyorsa daha okunabilir.
  • Time-based: ?since=2026-01-01T00:00:00Z — feed/event kaynakları için.

Sayfalama yanıtı zarflama biçimi de standardize edilmeli. Hem GitHub’ın Link header kalıbı (RFC 8288), hem de {"data": [...], "meta": {"next_cursor": "..."}} JSON zarfı yaygın. Tek seçim yapıp tüm endpoint’lerde sabitle. Filtreleme için “JSON:API” spesifikasyonunun ?filter[status]=paid formatı ile basit ?status=paid arasında karar verirken: karmaşık filtre kombinasyonu beklemiyorsan basit query parametre, sorgu DSL’ine ihtiyaç varsa filter+operatör kalıbı (örn. ?filter=amount:gte:100) tercih et.

SenaryoÖnerilenp99 latency hedefTipik sayfa boyutu
Mobil sonsuz scrollCursor< 300 ms20-30
Admin panel listesiOffset + total count< 800 ms50-100
Reporting / exportKeyset + async jobjob tabanlı500-1000
Event feedTime-based / cursor< 200 ms50-100
SearchCursor + scoring< 500 ms10-25

Güvenlik, Rate-Limit ve Auth Kalıpları

2024 yılında OWASP API Security Top 10 (2023) listesinde Broken Object Level Authorization (BOLA) hâlâ 1. sırada. Yani bir kullanıcının GET /orders/42 ile başka kullanıcının siparişini okuyabilmesi en sık zafiyet. Çözüm endpoint düzeyinde değil, her veritabanı sorgusunun bağlamsal user_id ile filtrelenmesi. Repository katmanı tasarımıyla bu kontrolü tek noktada zorlamak için Repository Pattern faydalıdır.

Auth tarafında 2026’da yaygın seçim OAuth 2.1 + PKCE + JWT access token (kısa ömürlü) + refresh token rotation. mTLS API gateway’de servis-to-servis ekseninde standardize ediliyor. Rate-limit ise kullanıcı bazında değil, çoklu boyutta: kullanıcı, IP, API key, endpoint paterni — Cloudflare, AWS API Gateway, Kong gibi platformlarda token bucket veya sliding window algoritmaları kullanılıyor.

TierRPS limitBurstAylık çağrıTipik müşteri
Free510100KGeliştirici sandbox
Starter25501MKüçük startup
Growth10020010MSaaS scale-up
Business5001000100MKurumsal
EnterpriseÖzelÖzelSınırsızSLA müzakere

Rate-limit yanıtı için IETF RateLimit Headers draft kalıbı: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset başlıkları ile her yanıtta istemciyi bilgilendir. 429 dönerken Retry-After zorunlu. Bu, agresif retry loop’larının yan etkisiyle self-DoS oluşturmasını engelleyen birinci satır savunma. Header’ların yanı sıra, istemci SDK’larında jittered exponential backoff zorunlu kılınmalı; aksi takdirde rate-limit’in koruyucu işlevi paradoxal bir yoğunluk yaratır.

Idempotency anahtar ve rate limit kovasi bronz teal render
Idempotency anahtar ve rate limit kovasi bronz teal render

Sözleşme Önce Yaklaşımı: OpenAPI 3.1 ve Tooling

Postman 2024 raporundaki “API-first” benimseme oranı %74; bu pratikte OpenAPI sözleşmesi kod yazılmadan önce yazılır demek. OpenAPI 3.1 (Şubat 2021’de yayınlandı, JSON Schema 2020-12 uyumu getirdi) artık endüstri varsayılanı. Sözleşme şu zinciri besler: mock server (Prism), kod üretimi (openapi-generator, oapi-codegen), istemci SDK (Stripe, Twilio kalıbı), API gateway konfigürasyonu, contract test (Pact, Schemathesis), dokümantasyon (Redoc, Stoplight).

  • Sözleşme önce avantaj: Frontend ve backend paralel çalışır, mock üzerinden entegrasyon 2-3 hafta önden ilerler.
  • Sözleşme önce dezavantaj: Schema yazma disiplini yoksa “kod yazdık sonra dokümante ettik” haline döner — yarar kaybolur.
  • Schema lint: Spectral, Vacuum gibi araçlar Microsoft/Google rehberlerini otomatik kontrol eder, PR’de gate yapılabilir.
  • Breaking change tespiti: oasdiff aracı eski/yeni spec arasındaki breaking değişiklikleri tespit eder, CI’da merge engelleyici olarak kullanılır.

Kurumsal projelerde Ömer Önal olarak verdiğim API tasarımı danışmanlığında, üretim öncesi OpenAPI spec’i ekibin “tek kaynağı” olarak konumlandırmak, ileride 3-6 aylık entegrasyon hatalarını %40-60 aralığında azaltıyor. Tasarım disiplini için yazılım tasarım desenleri rehberini ekibin onboarding paketine eklemek; review sürecinde Spectral lint kurallarını CI’a entegre etmek; ve PR’da spec değişikliği gerekçesinin “neden” alanını zorunlu tutmak pratikte fark yaratıyor.

Anti-Pattern’ler: Üretimde Görülen 8 Yaygın Hata

Aşağıdaki anti-pattern’ler farklı sektörlerde gözlemlenen üretim sorunlarından derlendi. Hiçbiri “teorik” değil; her biri en az bir SEV-2 incident’a yol açmış kalıplardır.

  1. “Tunnel POST”: Her şeyi POST ile yapmak (örn. POST /api ve body içinde {"action": "getUser"}). HTTP cache, log, gateway tüm semantiği kaybeder.
  2. 200 OK + error body: Hata olduğunda 200 dönmek ama body’de {"success": false}. SDK ve monitoring kırılır.
  3. Soft delete ile DELETE karışıklığı: DELETE çağrısı kaynağı gizliyor ama listede görünmeye devam ediyorsa açıkça archived_at alanı eklenmeli, semantik ayrı tutulmalı.
  4. N+1 endpoint: İstemci her satır için ayrı endpoint çağırıyor. Bunun yerine batch endpoint veya ?include=lines,customer embedding.
  5. Snake-case + camelCase karışımı: Aynı API’da order_id ve orderId yan yana — SDK kullanımı kâbus.
  6. Pagination total count saplantısı: Her listede COUNT(*) sorgusu 1M satırlık tabloyu kilitler. Yaklaşık sayım veya materialized view ile çözülmeli.
  7. Hatasız 500: Tüm exception’lar generic 500 dönüyor, hata kodu yok. RFC 9457 problem details ile çözülür.
  8. Senkron uzun iş: 60+ saniyelik raporu HTTP isteğinde yapmak. 202 Accepted + job polling veya webhook callback gerekir.

Bu anti-pattern’lerin çoğu, takım büyürken servis sınırları net olmadığında ortaya çıkıyor. API kontratının iç implementasyondan bağımsızlaşması için, port/adapter ayrımı veren mimari yaklaşımlar ve Saga Pattern gibi dağıtık transaction kalıpları, REST yüzeyinde sızıntı oluşmadan iç refactoring’i mümkün kılar.

Anti-pattern uyari isaretleri ve dogru REST yol haritasi
Anti-pattern uyari isaretleri ve dogru REST yol haritasi

Performans, Caching ve Observability

HTTP caching, REST’in en güçlü ama en az kullanılan kozu. Cache-Control, ETag, If-None-Match, Last-Modified başlıkları doğru ayarlandığında, public CDN katmanı arkasında istek sayısının %60-90’ı origin’e gelmeden çözülebilir. Cloudflare 2024 trend raporuna göre cache hit oranı %85+ olan API’larda p95 latency 3-5x iyileşiyor.

BaşlıkAmaçTipik değerNe zaman kullanılır
Cache-ControlCache davranışıpublic, max-age=300Public, sık okunan kaynak
ETagİçerik hash"a1b2c3"Optimistic concurrency + cache
If-MatchConditional write"a1b2c3"PUT/PATCH, çakışma kontrol
If-None-MatchConditional read"a1b2c3"GET, 304 dönüş için
VaryCache key parçasıAccept-Encodingİçerik müzakeresi
X-Request-IdTrace korelasyonUUID v7Tüm istek/yanıt

Observability tarafında OpenTelemetry Semantic Conventions for HTTP 2024’te stable oldu. http.request.method, http.response.status_code, url.template gibi standart attribute’lar sayesinde vendor lock-in olmadan tracing, metrics ve loglar bağlanabiliyor. Modern API’da minimum üç sinyal: latency histogram (p50/p95/p99), error rate (4xx/5xx ayrı), throughput (RPS endpoint başına). Bu sinyallerin alarm eşiklerini “endpoint başına” değil “müşteri tier’ı başına” çekmek ise SRE oyunkitabının daha olgun düzeyini temsil eder.

Asenkron iş akışları için 202 + polling pahalı olabilir; modern alternatif webhook + signed payload veya server-sent events (SSE). Distributed iş akışlarında uzun yaşam döngülü asenkron süreçlerin durumunu istemciye sızdırmadan yönetmek; UI-specific aggregation katmanları (mobil için ayrı, web için ayrı backend-for-frontend) tasarlamak; ve event-driven yan kanalları (örn. Kafka, EventBridge) REST kontratının yan ürünü olarak yayınlamak, REST katmanının üzerine bina edilen yaygın yapı taşlarıdır.

Sık Sorulan Sorular (SSS)

REST mi GraphQL mı seçmeliyim?

Public API ve geniş ekosistem (CDN, gateway, monitoring) gerekliyse REST. Mobil ekipler tek endpoint üzerinden çoklu kaynak çekiyorsa, over-fetching problemi belirginse GraphQL. Aynı backend için ikisini birlikte sunmak ortak kalıp: REST resource API + GraphQL aggregation katmanı. Seçim, takımın tooling olgunluğu ve müşteri tipine bağlı; teknik üstünlük argümanı tek başına yeterli değil.

HATEOAS gerçekten gerekli mi?

Endüstri pratiğinde nadir benimseniyor. Google AIP, Microsoft Guidelines ve büyük public API’lar (Stripe, GitHub) Level 2 ile yetiniyor. HATEOAS’ın değer kattığı senaryo: çok sayıda istemci tipinin koordineli evrilmesi gereken büyük kamu/finans platformları. Standart B2B veya SaaS API’ları için ekstra kompleksite ROI’yi negatife çekiyor.

API versiyonlamada path mi header mı?

Operasyonel olarak path versiyonlama (/v1/) daha kolay: CDN cache key netlenir, log/trace okunur, debug rahat. Header versiyonlama mimarî olarak temiz ama her CDN/gateway konfigürasyonunda custom cache key tanımlamak gerekir. Public API başlıyorsan path; mevcut bir API’yı temizliyorsan ve gateway disiplini varsa header tercih edilebilir.

Idempotency-Key nasıl saklanmalı?

Yaygın kalıp: Redis veya Postgres’te 24-72 saat TTL ile {key, request_hash, response_body, status_code} kaydı. Aynı anahtarla farklı body geldiğinde 422 dönmek (request_hash mismatch). Stripe’ın kalıbı 24 saat. Anahtar üretimi istemci tarafında UUID v4/v7; sunucu sadece doğrular. Bu kalıp, ağ retry’larında double-charge gibi finansal hataların 1 numaralı önleyicisi.

OpenAPI spec’i otomatik mi yazılmalı yoksa elle mi?

“Design-first” yaklaşımında spec elle yazılır, kod ondan üretilir veya hizalanır. “Code-first” yaklaşımında ise kodun annotation’larından spec üretilir. Public API ve uzun yaşam beklentisi olan kontratlar için design-first daha sağlıklı; iç servisler veya hızlı prototip için code-first kabul edilebilir. Hibrit yaklaşım: design-first spec, code-first örnek payload’lar.

Sonuç

2026’da RESTful API tasarımı bir “doğru/yanlış” tartışması değil, operasyonel olgunluk meselesi. Karar çerçevesi şu sırayla işliyor: (1) Kaynak modelini domain sınırlarıyla hizala, (2) HTTP semantiğini katı uygula (idempotency, status code, RFC 9457 hata gövdesi), (3) OpenAPI 3.1 sözleşmesini ekibin tek kaynağı yap, (4) Sürümleme stratejisini erken sabitle ve dokümante et, (5) Caching + rate-limit + observability’yi ürünün ilk sürümünden itibaren kontrata dâhil et.

Bu beş adımı tamamlayan bir API, müşteri entegrasyon süresini haftalardan günlere düşürür; SDK üretimini, mock server’ı, contract test’i ücretsiz hediye olarak getirir. Bir adımı atlayan API ise 6-12 ay içinde “v2 migrasyonu” projesini kaçınılmaz hâle getirir — ki bu maliyet, baştan doğru kurmanın 5-10 katı.

Eğer mevcut bir REST API’sını yeniden tasarlamak, parallel run stratejisi kurmak veya OpenAPI tabanlı bir governance modeli oluşturmak istiyorsan iletişim sayfasından mevcut API kontratını ve hedef metrikleri (latency p95, error budget, müşteri sayısı) paylaşabilirsin; somut bir öncelik haritası çıkarmak için ilk değerlendirmeyi birlikte yapabiliriz.

OmerOnal

Yorum (1)

  1. Ömer ÖNAL
    Mayıs 16, 2026

    Yazılım mimarisi danışmanlığında sık karşılaştığım soru: “Monolit mi mikroservis mi?” Cevap genelde modüler monolit ile başlayıp ihtiyaç doğdukça parçalamak yönünde. İlk gün mikroservis ile çıkan ekiplerin %71’i ilk 18 ayda mimari refactor yapıyor. Sizin tecrübeniz ne yönde?

Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir