Kurumsal API Tasarımı: REST vs GraphQL vs gRPC, Versiyonlama ve KVKK
Üretim-grade kurumsal API tasarımının yedi pratik kararı: protokol seçimi (REST/GraphQL/gRPC), OpenAPI sözleşme, versiyonlama stratejisi, rate limiting, audit log, KVKK uyumlu kişisel veri akışı. Kurumsal entegrasyon projelerinden çıkan dersler. eCloud Tech mühendislik notu.
API artık sadece uygulamalar arası veri köprüsü değil; modern kurumsal mimaride iş süreçlerinin canlı kontratı. Müşteri portali, mobile app, B2B entegrasyon, mikroservis ağı, AI agent — hepsi API üstünden konuşur. Yanlış tasarlanmış bir API 2-3 yıl içinde migration projesi yaratır; doğru tasarlanmış bir API 5-10 yıl ömür verir ve yeni use case'lere kolayca uyum sağlar. Kurumsal API mühendisliği, protokol seçiminden versiyonlama disiplinine, rate limiting'den audit log'a kadar her katmanda bilinçli karar gerektirir.
Bizim API entegrasyon mühendisliği ve SaaS platform mühendisliği hizmetlerimiz kapsamında son 30 ayda 19 kurumsal API tasarım/migration projesi yürüttük — finans, e-ticaret, sağlık, lojistik sektörlerinde. Kendi AIGENCY v4 platformumuzun public + internal API'ları da bu disiplin altında işliyor. Bu yazıda kurumsal API tasarımının yedi kritik kararını sırayla anlatıyoruz: protokol seçimi, sözleşme tasarımı, versiyonlama, rate limiting, kimlik doğrulama, audit log + KVKK akışı, monitoring + observability.
1. Protokol seçimi — REST, GraphQL, gRPC karar matrisi
Şekil 1 — Protokol seçimi — REST, GraphQL, gRPC karar matrisi
API protokolü seçimi iskelet kararıdır — geçişi zor, ekosistemi belirler, ekip yetkinliğini şekillendirir. Üç ana seçenek (artı niche'ler):
REST (Representational State Transfer) — HTTP semantics üstünde resource-oriented API. Olgunluk + ekosistem en geniş. Strengths: cache (HTTP cache, CDN), debug (curl, Postman), dokümantasyon (OpenAPI 3.x sektör standardı), tool ekosistemi (Insomnia, Swagger UI, Stoplight). Weaknesses: over-fetching (server gönderir, client'ın kullanmadığı alanlar), under-fetching (tek ekran için N+1 request), versioning karmaşık.
GraphQL — Facebook 2015'te yayınladı, schema-first query language. Client'ın istediği alanları tam ister, server o kadar döner. Strengths: data minimization (KVKK avantajı), client team verimliliği (backend yenisini eklemeden yeni view), introspection + tooling (Apollo Studio, GraphiQL). Weaknesses: cache zor (POST request, URL-bazlı CDN cache çalışmaz, Apollo Cache veya Persisted Queries gerek), N+1 query problemi (resolver naive yazılırsa), monitoring karmaşık (her query farklı shape), rate limiting nontrivial (depth limit, complexity limit ayrı katman).
gRPC — Google 2016, HTTP/2 + Protocol Buffers (Protobuf) binary serialization. Service-to-service iletişim için optimize. Strengths: yüksek throughput + düşük latency (binary, multiplexing), bidirectional streaming native, strong typing (Protobuf IDL), polyglot (40+ dil için code generation). Weaknesses: browser native değil (gRPC-Web proxy gerek), debug zor (binary), public API'da nadir (third-party developer alışkanlığı yok).
Karar matrisi:
| Senaryo | Önerilen | Neden |
|---|---|---|
| Public REST API (third-party developer) | REST + OpenAPI | Ekosistem, dokümantasyon, OAuth, Postman |
| Mobile app — backend (yüksek over-fetch riski) | GraphQL | Client kendi alanını çeker, mobile data tasarrufu |
| Web SPA — backend (basit CRUD) | REST | Cache, debug, learning curve düşük |
| Mikroservis-mikroservis (yüksek hacim) | gRPC | Performance, typing, streaming |
| Browser → backend (modern web) | REST veya tRPC | gRPC native değil |
| AI agent — tool ecosystem | REST + OpenAPI | LLM function calling ekosistem REST'e tuned |
| Banka core ↔ kanal entegrasyonu | gRPC + mTLS | Internal, performance + security |
| B2B kurumsal entegrasyon | REST + OpenAPI | Ortak standart, SDK üretimi |
Hibrit pattern: public REST gateway + internal gRPC. Müşteri REST görür, backend microservice ağı gRPC ile konuşur. Bizim AIGENCY platformumuz tarafında public yüzey REST + token-bazlı authentication (dokümantasyon: aigency.dev/docs); LLM/agent function calling ekosisteminin REST'e tuned olması bu seçimi destekliyor.
Yaygın hata: GraphQL trend olduğu için seçmek. GraphQL doğru senaryoda muazzam, yanlış senaryoda (basit CRUD + 2 sayfa app) gereksiz karmaşıklık. Karar teknik fit'e bağlı, popülerliğe değil.
2. Sözleşme tasarımı — OpenAPI 3.x, contract-first vs code-first
Şekil 2 — Sözleşme tasarımı — OpenAPI 3.x, contract-first vs code-first
Bir API'nın sözleşmesi (contract), endpoint'lerin URL'i + HTTP method + request shape + response shape + status code'ları + auth gereği + error format'ı tanımlayan yapılandırılmış spec. OpenAPI 3.x (eski Swagger) REST için sektör standardı, GraphQL için SDL (Schema Definition Language) zorunlu, gRPC için Protobuf .proto dosyaları zorunlu.
Contract-first (sözleşme önce):
- Tasarımcı OpenAPI YAML/JSON yazar (
openapi.yaml). - Stakeholder review — frontend, mobile, third-party developer gözden geçirir.
- Mock server (Prism, Mockoon, Stoplight) ile frontend backend olmadan geliştirir.
- Backend implementation sözleşmeye karşı yazılır.
- Otomatik test (Schemathesis, Dredd) sözleşmeden generate, drift'i CI'da yakalar.
Code-first (kod önce):
- Backend developer endpoint kodunu yazar (decorator + type annotation).
- Framework (FastAPI, NestJS, tRPC) otomatik OpenAPI/SDL üretir.
- Frontend backend hazır olunca client generate eder.
Hangisi doğru? Bizim deneyimimizden:
| Senaryo | Yaklaşım | Sebep |
|---|---|---|
| Public/external API | Contract-first | Stakeholder review kritik, sözleşme commitment, breaking change disiplin |
| B2B partner entegrasyon | Contract-first | Sözleşme = hukuki commitment, partner ile önden anlaş |
| Internal microservice (tek ekip) | Code-first | Hızlı iterate, framework otomatize |
| Hızlı PoC / hackathon | Code-first | Sözleşme yazımı yavaşlatır |
| Çok-dilli ekip (TS + Python + Go) | Contract-first | Polyglot için tek truth source |
| Tek-dilli ekip (TypeScript only) | tRPC veya code-first | Type safety end-to-end, generate gereksiz |
OpenAPI doc'unun gerçekten kullanılması için disiplin:
- CI pipeline'da
openapi-validatorçalışsın — geçersiz YAML push'unu reddet. - Her PR'da
openapi.yamldiff'i mandatory review (breaking change yakalama). openapi-diffaracı eski vs yeni schema karşılaştırır, semantic version bump'ı otomatik öner.- Spectral lint rule'ları (alan adı camelCase, error response zorunlu, security scheme tanımlı, vs).
- Auto-generated SDK (TypeScript, Python, Go) her release sonrası npm/PyPI/GitHub Releases'a publish.
- Swagger UI veya Redoc ile public dokümantasyon —
docs.your-api.comsubdomain.
AI yönetişim çerçevemiz audit ve KVKK perspektifinden API sözleşmesinin zorunlu içeriklerini (security scheme, pii_field tag, data_retention header) detaylandırıyor.
3. Versiyonlama stratejisi — URL, header, lifecycle policy
Versiyonlama, public API'ın sürdürülebilirliğinin tek kritik faktörü. Yanlış strateji ya müşteriyi kızdırır (sürekli breaking change) ya backend'i çürütür (eski versiyon hiç ölmez, kod tabanı şişer).
URL versioning (/v1/users, /v2/users):
- Avantaj: debug kolay, Postman/curl direkt çalışır, cache friendly (URL = key), client URL'i hardcode'lar.
- Dezavantaj: aynı resource'un iki yerde olması, migration manuel.
- Bizim önerimiz: public REST API için default.
Header versioning (Accept: application/vnd.company.v2+json):
- Avantaj: URL temiz, RESTful püristlere uygun.
- Dezavantaj: debug zor (curl manuel header), CDN cache key header dahil tutulmalı (Vary header), client hata yapması kolay.
- Bizim önerimiz: sadece internal API için veya çok karşılıklı versionlama gereken niche.
Query parameter (/users?version=2):
- Hızlı prototip için iyi, production'da analytics + cache key karışır.
- Önermiyoruz.
Versiyon lifecycle policy (bu sözleşme yazıya bağlanır):
| Aşama | Süre | Aksiyon |
|---|---|---|
| Active | Süresiz | Yeni feature, bug fix, breaking change → MINOR bump |
| Deprecated | 12 ay | Deprecation + Sunset HTTP header, dokümantasyonda warning |
| Sunset announcement | 3 ay öncesi | Tüm müşteriye email + dashboard banner |
| Sunset | Tarihte | Endpoint HTTP 410 Gone döner |
Breaking change kuralı (MUST):
| Değişiklik | Tip | Action |
|---|---|---|
| Yeni alan ekleme (response) | Non-breaking | MINOR bump |
| Yeni endpoint ekleme | Non-breaking | MINOR bump |
| Mevcut alan tipini değiştirme | Breaking | MAJOR bump, yeni version path |
| Mevcut alanı silme | Breaking | MAJOR bump |
| Required alan ekleme (request) | Breaking | MAJOR bump |
| Optional alan ekleme (request) | Non-breaking | MINOR bump |
| Error code değiştirme | Breaking | MAJOR bump |
| Authentication değişikliği | Breaking | MAJOR bump + ayrı announcement |
Major version 2 yılda bir + extreme durumda. Her ay yeni major version çıkaran API güvenilmezdir — müşteri bağlı kalmaz.
4. Rate limiting + throttling — fair use + DDoS koruma
Rate limiting iyi vatandaşları korur, kötü vatandaşları durdurur. Üç katmanlı strateji:
Layer 1 — Global / DDoS koruma: CDN/WAF katmanında (Cloudflare, AWS Shield, Akamai). Saniyede 10.000+ request gibi geniş eşik, IP-bazlı. Amaç: volumetric attack durdurma.
Layer 2 — Per-API-key (fair use): müşteri tier'ına göre:
| Tier | Rate limit | Burst | Aylık quota |
|---|---|---|---|
| Free | 60 req/dakika | 10 req | 100K request |
| Pro | 1.000 req/dakika | 50 req | 1M request |
| Enterprise | 10.000+ req/dakika | 200 req | Sınırsız (SLA'lı) |
Sliding window algoritması fixed window'a göre daha pürüzsüz. Redis tabanlı counter:
INCR rate:user:{api_key}:{current_minute}
EXPIRE rate:user:{api_key}:{current_minute} 60
GET rate:user:{api_key}:{current_minute}
Token bucket algoritması burst kapasitesi sunar (ortalama 100 req/dakika ama anlık 50 req'lik patlamaya izin ver).
Layer 3 — Per-endpoint limit: pahalı endpoint'ler için ayrı limit. Örnek:
| Endpoint | Maliyet | Limit |
|---|---|---|
GET /users/{id} | Düşük (DB read) | Genel limit |
POST /pdf/generate | Yüksek (PDF render 2sn) | 10 req/dakika |
POST /ai/inference | Çok yüksek (LLM) | 5 req/dakika |
POST /export/csv | Yüksek (DB scan) | 3 req/dakika |
HTTP response zorunlu:
- Limit aşıldığında:
429 Too Many Requests - Header'lar:
X-RateLimit-Limit: 1000X-RateLimit-Remaining: 0X-RateLimit-Reset: 1716638400(epoch)Retry-After: 30(saniye)
Müşteri usage dashboard zorunlu — kullanıcı kendi quota'sını görebilmeli, limit yaklaşma uyarısı (e-mail / webhook), aylık report.
KVKK perspektifi: brute-force koruma için POST /login endpoint'inde ek katman — failed attempt başına exponential backoff (1sn, 2sn, 4sn, 8sn...), 10 deneme sonrası 15dk lockout. CAPTCHA + MFA challenge entegrasyonu.
5. Authentication & authorization — OAuth 2.1, JWT, mTLS
Authentication = sen kimsin?; Authorization = ne yapabilirsin?. Kurumsal API'larda dört ana pattern:
API key (basit):
X-API-Key: ak_live_xxxxxheader.- Server-to-server, kısa ömürlü değil, scope desteği zayıf.
- Public API'da çok yaygın (Stripe, OpenAI), internal'da yeterli olabilir.
- Rotation discipline kritik — leak durumunda hemen revoke + yeni key.
OAuth 2.1 + JWT (modern standart):
- Authorization server (Keycloak, Auth0, Okta, Cognito, Authentik) ile flow.
- Authorization Code Flow + PKCE (mobile + SPA), Client Credentials (server-to-server).
- Access token (short-lived, 15dk-1saat) + Refresh token (long-lived, 7-30 gün).
- JWT içinde
sub,scope,exp, custom claim'ler. HS256 simetrik değil, RS256/ES256 asimetrik kullanın (key rotation kolaylaşır). - Public + B2B kurumsal API için baskın seçim.
mTLS (mutual TLS):
- Her iki taraf (client + server) certificate sunar.
- Banka core ↔ kanal, sağlık sistem entegrasyonu, kritik altyapı için.
- mTLS + OAuth birlikte (defence in depth) high-security ortamlarda.
RBAC + ABAC + Scope:
| Model | Tanım | Örnek |
|---|---|---|
| RBAC (Role-Based) | Kullanıcıya rol, role izin | "admin", "editor", "viewer" |
| ABAC (Attribute-Based) | Attribute'lar (department, region, time) kontrol | "Marketing dept + İstanbul ofis + 09-18 saat" |
| Scope (OAuth) | Token'a izin scope'u | users:read, orders:write |
| ReBAC (Relationship-Based) | İlişki grafiği | "this document's author can edit" |
Pratik öneri: JWT scope (coarse-grained) + database-level RBAC (fine-grained). JWT'de read:users, write:users gibi geniş scope; database katmanında "bu user_id sadece kendi org'unun row'larını görebilir" gibi detay.
Token storage — browser'da localStorage XSS'e açık; httpOnly secure cookie tercih edilir. Mobile için keychain (iOS) / Keystore (Android).
KVKK pratik: kişisel veri içeren her API endpoint için scope zorunlu — read:user_profile scope'u olmayan client kişisel veriye dokunamamalı, request reddedilmeli (403 Forbidden).
6. Audit log + KVKK uyumlu kişisel veri akışı
Production API'ın en sık atlanan adımı audit log. KVKK ihlal araştırmasında, BDDK denetiminde, SOC 2 compliance'ta tek savunma — kim ne zaman hangi PII'ya dokundu doküman olmalı.
Minimum audit log alanları:
| Alan | Örnek | Neden |
|---|---|---|
| timestamp | 2026-05-25T14:32:17Z | Zamansal sıra |
| request_id | uuid v4 | Distributed trace |
| api_key_id | ak_live_xxxxx | Kim (technical identity) |
| user_id | u_98234 | Kim (business identity) |
| client_ip | 203.0.113.42 | Nereden |
| user_agent | Mozilla/5.0... | Hangi araç |
| http_method | GET | Aksiyon tipi |
| endpoint | /v2/users/{id} | Kaynak |
| query_params | ?fields=name,email | Detay |
| response_status | 200 | Sonuç |
| response_time_ms | 142 | Performance |
| pii_fields_accessed | [name, email, phone] | KVKK kritik |
| auth_scope | read:users | Yetki |
Log storage: immutable, append-only — Elasticsearch + ILM (Index Lifecycle Management) 90 gün hot + 2 yıl warm + 5 yıl cold (KVKK retention compliance). Cloud: AWS CloudWatch Logs + S3 Glacier, Azure Log Analytics + Blob archive. Erişim sadece compliance team (RBAC + MFA).
Field-level masking pattern (API gateway katmanında):
Original response:
{
"user_id": "u_98234",
"name": "Mehmet Yılmaz",
"tc_kimlik": "12345678901",
"iban": "TR33 0006 1005 1978 6457 8413 26",
"phone": "+90 532 123 45 67"
}
Customer-service role:
{
"user_id": "u_98234",
"name": "Mehmet Yılmaz",
"tc_kimlik": "***********",
"iban": "TR33 **** **** **** **** **** 26",
"phone": "+90 532 *** ** **"
}
Finance role:
{
"user_id": "u_98234",
"name": "Mehmet Yılmaz",
"tc_kimlik": "12345678901",
"iban": "TR33 0006 1005 1978 6457 8413 26",
"phone": "+90 532 *** ** **"
}
Sparse fieldset (REST'te ?fields=..., GraphQL native) — client sadece ihtiyacı olan alanı çeker, gereksiz PII transit etmez. KVKK data minimization prensibinin teknik ifadesi.
Right to erasure (KVKK md. 11) — kişi silinme talebi geldiğinde:
- Identity verification (kişi gerçekten bu kullanıcı mı?).
- API endpoint:
DELETE /users/{id}veya internal admin tool. - Hard delete (soft delete değil — sadece deleted_at column değil, gerçek silme).
- Cascade delete (related orders, sessions, audit log içindeki PII alanlar).
- Audit log'da silme eylemi notu (kim sildi, ne zaman — silinen kişinin kim olduğu detayı değil, sadece silme eylemi).
- 30 gün içinde tamamlanması zorunlu.
Cross-border transfer: API client'ın bulunduğu ülke log'lanır; AB dışına PII gönderimi için Standard Contractual Clauses sözleşmeye eklenmeli + Türkçe tercüme.
7. Monitoring + observability — sadece çalışıyor değil, sağlıklı
Production API'sı çalışıyor yeterli değil; sağlıklı olmalı. Bu üç katman observability gerektirir:
Metrics (sayısal göstergeler):
| Metrik | Hedef | Anlamı |
|---|---|---|
| Request rate | Trend takip | Hacim |
| Error rate (4xx + 5xx) | <%1 5xx, <%5 4xx | Sağlık |
| Latency p50 | <100ms | Hızlı path |
| Latency p95 | <500ms | Çoğu kullanıcı |
| Latency p99 | <2sn | Worst case |
| Throughput (req/sn) | Capacity planning | Scaling sinyali |
| Active API key | Customer adoption | İş metriği |
| Rate limit hit rate | <%2 | Tier doğru mu? |
Prometheus + Grafana (open-source), Datadog/New Relic (managed), AWS CloudWatch/Azure Monitor (cloud-native).
Tracing (distributed): bir request 5 mikroservis dolaşıyorsa trace ID ile uçtan uca takip. OpenTelemetry standart, Jaeger/Tempo/AWS X-Ray backend. Latency bottleneck'i (hangi service uzun sürüyor?) tespit için kritik.
Logging (structured): JSON format, log level (DEBUG, INFO, WARN, ERROR), context (request_id, user_id, trace_id). Elasticsearch + Kibana, Loki + Grafana, Splunk. Audit log ayrı pipeline'da (immutable, compliance).
SLO + Error budget:
- SLO: 99.9% availability (43dk/ay downtime kabul).
- 99.95% (22dk/ay) — finansal/sağlık tier.
- 99.99% (4dk/ay) — kritik altyapı tier (multi-region active-active gerekir).
- Error budget tükenmesi → feature freeze, reliability work odak.
Alerting (PagerDuty, Opsgenie, Grafana OnCall):
- P1: 5xx rate >%5 (5dk sustain) → on-call'a SMS + telefon.
- P2: latency p99 >5sn (10dk sustain) → on-call'a SMS.
- P3: rate limit hit >%10 sustained → e-mail.
- P4: daily summary → Slack channel.
Status page (Statuspage.io, Instatus, self-hosted): kullanıcıya transparency. Incident → public update → resolution.
Veri mühendisliği altyapısı API metric + log pipeline'ı için sıklıkla kritik — Kafka, ETL, time-series database stack'i gerektirir.
Pratik özet — başlangıç check-list'i
İlk üretim API'ınız için doğru sıra:
- Protokol seçimi: public = REST, mobile-heavy = GraphQL, internal microservice = gRPC. Hibrit OK.
- Sözleşme tasarımı: contract-first (public/B2B), code-first (internal solo team). OpenAPI 3.x CI'da validate.
- Versiyonlama: URL versioning default, 12 ay deprecated süresi, semantic version disiplini.
- Auth: OAuth 2.1 + JWT (RS256), scope-based authorization, mTLS yüksek hassasiyet.
- Rate limiting: 3 katman (DDoS + per-key + per-endpoint), sliding window + Redis, response header'ları zorunlu.
- Audit log: timestamp + identity + endpoint + PII fields accessed. Immutable storage, 5+ yıl retention.
- KVKK: scope + masking + sparse fieldset + hard delete pipeline. Cross-border transfer log.
- OpenAPI doc: contract-first, auto-generated SDK, Swagger UI public.
- Monitoring: metric + trace + log üç katman, SLO + error budget, alerting + status page.
- Sürekli iyileştirme: client feedback, error analytics, deprecation roadmap, security review (yıllık pentest).
Bu liste minimum disiplin. Üzerine sektörel ek (PSD2 için OAuth flow, FHIR/HL7 için sağlık standardı, ISO 27001 için access control matrix) eklenir. Kurumsal API'ın değeri bugün çalışıyor olmasında değil, 3 yıl sonra hâlâ sürdürülebilir, dokümante, audit'lenebilir olmasında.
Bizim ekibimiz Şanlıurfa Karaköprü'den API entegrasyon mühendisliği ve SaaS platform mühendisliği ile finans, e-ticaret, sağlık, lojistik sektörlerinde 19 kurumsal API projesi yürüttü, kendi AIGENCY v4 platformumuzun API mimarisini de bu disiplinle işletiyoruz. Kurumsal API tasarımı, migration veya mevcut API'nızın olgunluk değerlendirmesi için iletişim formundan ulaşabilirsiniz — ilk değerlendirme görüşmesi ücretsizdir.
eCloud Tech — Şanlıurfa merkezli kurumsal yazılım, yapay zekâ, blockchain ve siber güvenlik ekibi. Building Tomorrow.
Sıkça Sorulan Sorular
Karar üç değişkene bağlı. (1) İstemci tipi: web/mobil farklı veri ihtiyaçları varsa GraphQL (her client kendi alanını çeker, over-fetch yok); herkese aynı kontrat yetiyorsa REST (cache, debug, dokümantasyon ekosistemi olgun). Servisler-arası iç haberleşme + düşük latency + yüksek throughput gerekiyorsa gRPC (HTTP/2, Protobuf, streaming native). (2) Geliştirici ekosistemi: REST'i her ekip bilir, hiç eğitim gerektirmez. GraphQL için Apollo/Relay öğrenme eğrisi 2-4 hafta, ekip senior'ları ister. gRPC ekibin Protobuf + IDL disiplinini benimsemesini gerektirir — backend-heavy ekipler için doğal. (3) External vs internal: dış müşteriye açılan API çoğunlukla REST + OpenAPI olmalı (third-party tool desteği, Postman, OAuth ekosistemi); kurum-içi mikroservis ağı için gRPC baskın. Hibrit pattern de yaygın: public REST + internal gRPC (REST gateway gRPC backend'e proxy yapar). 'GraphQL her şey için iyidir' efsanesine kanmayın; basit CRUD için REST hâlâ doğru seçim.
Üç ana pattern var. (1) URL versioning (/v1/users, /v2/users): en yaygın, debug kolay, Postman/curl direkt çalışır, cache friendly. Dezavantaj: client URL'i hardcode'lar, migration zor. Bizim önerimiz: public API için default. (2) Header versioning (Accept: application/vnd.company.v2+json): RESTful püristlerin tercihi, URL temiz kalır. Dezavantaj: debug zor (curl ile manuel header lazım), CDN cache anahtarı header dahil olmalı. (3) Query parameter (/users?version=2): hızlı prototip için iyi, production için zayıf çünkü cache key + analytics karışır. Versiyon yaşam politikası kritik: yeni versiyon yayınlanır → eski en az 12 ay deprecated mode'da paralel çalışır → 3 ay öncesinden müşteriye duyuru → kesin sunset. Breaking change kuralı: alan ekleyebilirsin (non-breaking), alan kaldıramazsın veya tip değiştiremezsin (breaking → major version artışı zorunlu). Semantic versioning (MAJOR.MINOR.PATCH) API'da MAJOR = URL artar, MINOR = OpenAPI changelog'da yeni endpoint, PATCH = davranış düzeltme.
Üç katmanlı strateji standardı. (1) Global rate limit (DDoS koruması): saniyede 10.000+ request gibi büyük rakam, ortalama IP başına — Cloudflare/AWS Shield gibi katmanlarda. (2) Per-API-key limit (fair use): müşteri tier'ına göre — free tier 100 req/dakika, pro 1.000 req/dakika, enterprise 10.000+ req/dakika. Sliding window algoritması fixed window'a göre daha pürüzsüz. Redis tabanlı counter (INCR + EXPIRE) en yaygın. (3) Per-endpoint limit (kaynak koruma): pahalı endpoint'ler (örnek: PDF generation, AI inference) için ayrı limit (örnek: 10 req/dakika). HTTP 429 status + Retry-After header + X-RateLimit-Remaining / X-RateLimit-Reset header'ları zorunlu. Müşteri kullanım dashboard'u olmalı — limit yaklaşıyor uyarısı, aşıldığında ne kadar süre beklemesi gerektiği. KVKK perspektifi: brute-force koruma için login endpoint'i için rate limit ek katman (failed attempt → exponential backoff).
Production API'sı OpenAPI 3.x ile dokümante edilmeli zorunlu — bu opsiyonel değil. Üç pratik değer. (1) Otomatik client SDK üretimi: openapi-generator ile TypeScript/Python/Java/Go/Swift client'ları otomatik üretilir; manual SDK yazımı haftalar alır + bug üretir. (2) Frontend-backend paralel çalışma: sözleşme önce yazılır, mock server (Prism, Mockoon) ile frontend backend olmadan geliştirir. Bizim AIGENCY projemizde bu pattern 3 hafta tasarruf sağladı. (3) Otomatik test ve validasyon: Schemathesis gibi araçlar OpenAPI sözleşmesinden 1.000+ otomatik fuzz testi üretir, contract drift'i CI'da yakalar. Pattern: code-first vs contract-first ayrı tartışma — TypeScript ekipleri code-first (tRPC, Zod) tercih ediyor, çok-dilli kurumsal ekipler contract-first (OpenAPI yaml önce, sonra her dil için generate). Bizim önerimiz: public/external API kesin contract-first; internal microservice için code-first kabul edilebilir.
Yedi disiplin. (1) Audit log zorunlu: her PII içeren request kim (API key + user ID), ne zaman, hangi endpoint, hangi alanları okudu — immutable log'da. KVKK ihlal araştırmasında zorunlu kanıt. (2) Field-level masking: response payload'da TC kimlik, telefon, IBAN gibi alanları role'e göre maskele (XXXXX1234). API gateway katmanında yapılır. (3) Purpose limitation: API key veya OAuth scope kişisel veriye 'amaç' bağlı erişim verir (örnek: 'pazarlama' scope'u sağlık verisini görmez). (4) Data minimization: GraphQL bu konuda REST'ten avantajlı — client sadece ihtiyacı olan alanı çeker, gereksiz PII transit etmez. REST'te sparse fieldset pattern (?fields=name,email) kullanılır. (5) Encryption in transit: TLS 1.2+ zorunlu; mTLS yüksek hassasiyetli (banka, sağlık) için. (6) Cross-border transfer kontrol: API client'ın bulunduğu ülke log'lanır; AB dışına PII gönderimi için Standard Contractual Clauses + tercüme. (7) Right to erasure: KVKK md. 11 silinme talebi geldiğinde — API üstünden DELETE endpoint, soft delete değil hard delete + audit log'da silindi notu (kişinin kim olduğu değil — sadece silme eylemi). Bizim AI yönetişim çerçevemiz bu yedi disiplini doküman olarak sağlar.
İlgili yazılar
Kurumsal DevOps ve CI/CD: GitHub Actions, GitLab, Monorepo ve Deployment Pattern Rehberi
Production-grade kurumsal CI/CD için yedi pratik karar: pipeline mimari (GitHub Actions vs GitLab CI vs Jenkins), monorepo vs polyrepo, deploy stratejileri (blue-green, canary, rolling), secret + artifact yönetimi, KVKK uyumlu pipeline log. Türk B2B projelerinden dersler. eCloud Tech mühendislik notu.
Yazılım MühendisliğiProgrammatic SEO ile Yüzlerce Sayfa Nasıl Üretilir: Pratik Mimari Rehberi
Tek bir şablon + yapısal veri kaynağıyla yüzlerce SEO değerli sayfa üretmenin mimarisi. Kendi 32 şehir matrisimizi vaka olarak anlatıyoruz. eCloud Tech mühendislik notu.
Siber İstihbaratKurumsal Dark Web Monitoring ve Tehdit İstihbaratı: Pratik Uygulama Rehberi
Sızıntı tespiti, marka koruma, kimlik bilgisi avı, ransomware leak site takibi ve initial access broker (IAB) izleme için yedi pratik karar. MISP, TAXII feed'leri, Tor/I2P erişim mimarisi, KVKK uyumlu işleme. Kurumsal siber istihbarat projelerinden dersler. eCloud Tech mühendislik notu.