API-shlyuz va yo’naltirish
1) Arxitekturada API-shlyuzning roli
API-shlyuz - chegaradagi (edge) L7-komponent, u:- kiruvchi trafikni qabul qiladi (HTTP/HTTP2/HTTP3, WebSocket, gRPC);
- qoidalar (host/path/headers/method/query/geo/og’irlik/salomatlik) bo’yicha yo’naltiriladi;
- uzluksiz siyosatni qo’llaydi: autentifikatsiya/avtorizatsiya, rate limiting, WAF, CORS, keshlash;
- transformatsiyalarni bajaradi (sarlavhalar/tel, gRPC, JSON, GraphQL stitching);
- barqarorlikni ta’minlaydi (timeouts, retries, circuit-breaker, outlier detection);
- kuzatish va billing (loglar, metriklar, trastirovkalar, kvotalar) ni aniqlaydi;
- ichki topologiyani (service mesh, xususiy xizmatlar) izolyatsiya qiladi.
Koʻpincha quyidagi juftlikda ishlatiladi: Edge/API-Gateway + Ingress/Mesh (Envoy/Istio/Linkerd) - birinchisi tashqi siyosatni hal qiladi, ikkinchisi - east-west.
2) Namunaviy topologiyalar
Yagona global shlyuz (CDN/edge POP → L7 gateway → services) - oddiy, markazlashgan siyosatchilar.
Mintaqaviy shlyuzlar (per-region) + geo/latentlik bo’yicha aqlli yo’naltirish.
Multi-tenant: ajratilgan yo’nalishlar/subdomenlar/kalitlar, ijarachiga kvotalar va limitlar.
Hybrid: on-prem + cloud, private link/peering, API-shlyuz orqasidagi xususiy bekendlar.
3) L7 yo’naltirish qoidalari
Mezonlar:- Host/Path: `api. example. com` → `/v1/orders/`.
- Headers: `X-Client`, `X-Region`, `User-Agent`, `Accept`.
- Method/Content-Type: JSON/Proto/GraphQL.
- Query/Fragment: ehtiyot boʻling - kesh/variantlarga taʼsir qiladi.
- Geo/Latency: eng yaqin XTR/mintaqa, degradatsiyada failover.
- Weighted/Canary: 90/10, 50/50, sticky cookies.
- Session affinity: hash-based (kattalashtirilganda ehtiyotkorlik bilan).
yaml nginx. ingress. kubernetes. io/canary: "true"
nginx. ingress. kubernetes. io/canary-weight: "10" # 10% traffic to new backend
Misol (Envoy, header-based routing):
yaml match: { prefix: "/orders", headers: [{name: "X-Experiment", exact_match: "new"}] }
route: { cluster: orders-v2 }
4) Bayonnomalar va muvofiqlik
REST/JSON - defolt, mijozlarni validatsiya qilish/ishlab chiqarish uchun OpenAPIni tavsiflang.
gRPC - HTTP/2 ustidagi binar Proto; tashqi mijozlar uchun gRPC-JSON transcoding dan foydalaning.
GraphQL - xizmatlarni yig’adi; Perimetrda so’rovlarning complexity/chuqurligini nazorat qiling.
WebSocket/SSE - ikki yo’nalishli/push; sticky va timeouts.
HTTP/2/3 (QUIC) - multiplekslash/tezkor boshlash; WAF/proxy mosligini tekshiring.
5) Xavfsizlik: autentifikatsiya va avtorizatsiya
5. 1 Transport
TLS 1. 2 + perimetrda, HSTS, OCSP stapling, PFS.
V2V/ichki API va mashina-mashinalar uchun mTLS.
IP allowlist/denylist, geo-cheklovlar.
5. 2 Amaliy daraja
OAuth2/OIDC: JWT bearer-tokenlari, imzoni/ekspiratsiyani/auditoriyani tekshirish.
NMAS/imzolar: sana + kanonizatsiyalangan satr + imzo (AWS-kabi) - almashtirish, takrorlashdan himoya qilish (nonce/taym-oyna).
API kalitlari: faqat identifikator sifatida; huquqlar - RBAC/ABAC/sotib olish orqali.
CORS: aniq allow-origin, pre-flight kesh.
WAF: signaturalar (OWASP API Top 10), anormallik, bot-himoya, rekursiv JSON maydonlari.
DDoS/Abuse: connection limiting, token-bucket/Leaky bucket, berst + o’rtacha tezlik, dinamik ban.
yaml plugins:
- name: oidc config: { issuer: "...", client_id: "...", client_secret: "...", scopes: ["orders. read"] }
- name: rate-limiting config: { minute: 600, policy: local }
6) Validatsiya, transformatsiya va muvofiqlik
Sxemalar: OpenAPI/JSON-Schema/Protobuf bo’yicha tana/sarlavha/parametrlarni validatsiya qilish.
Transformatsiyalar: maydonlarni normallashtirish, PIIni kamuflyaj qilish, korrelyatsiya sarlavhalarini qo’shish (’traceparent’,’x-request-id’).
Version:’Header: X-API-Version’, ’/v1’prefikslari, resurs-versiya; deprecation policy и Sunset.
Backward-compat: faqat add maydoni; yangi versiyasiz «buzuvchi» oʻzgarishlardan qoching.
Idempotency: `Idempotency-Key` для POST; gateway TTL bilan Redisda kalitlarni saqlaydi.
7) Barqarorlik: birikmalar siyosati
Timeouts: connect/read/write; oqilona defoltlar (masalan, 1s/5s/5s).
Retries: faqat xavfsiz va idempotent uchun; jitter, exponential backoff, maksimal urinishlar.
Circuit breaker: xato/yashirin boʻlganda ochish; namunalar uchun half-open.
Outlier detection: yomon holatlarni hovuzdan olib tashlash.
Bulkhead/raqobat: bir vaqtning o’zida per-route so’rovlariga limitlar.
Failover: faol/passiv, zonal degradatsiya.
Shadow traffic: taqqoslash uchun V1 parallel ravishda (javobga ta’sir qilmasdan) «kulrang» V2 pog’onasi.
yaml circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 1024 max_pending_requests: 2048 max_retries: 3
8) Keshlash va unumdorlik
HTTP-кеш: `Cache-Control`, `ETag/If-None-Match`, `Vary`, `stale-while-revalidate`.
Edge-keshi/ROR: Statika va «keshlanayotgan» API (idempotent GET) uchun CDN.
Compression:’gzip/br’(allaqachon siqilmagan).
Request collapsing («coalescing»): bir xil parallel soʻrovlarni birlashtirish.
Response shaping: maydonlar/filtrlar, paginatsiya (cursor-based), oʻlcham limitlari.
9) Kuzatish va foydalanish
Метрики: `l7_req_total{route,method,code}`, `latency_ms{p50,p95,p99}`, `upstream_errors`, `retry_count`, `cb_state`, `429_rate`, `quota_usage{tenant}`.
Loglar:’trace _ id/span _ id’,’user _ id/tenant _ id’,’client _ ip’.
Treyslar: W3C Trace Context (’traceparent’,’tracestate’).
Audit: kim nima, qanday huquqlar bilan chaqirgan; sezgir API uchun o’zgarmas saqlash joylari.
SLO/SLA: maqsadli p99, xato byudjeti; rout darajasi global darajadan yaxshiroqdir.
10) O’tkazish qobiliyati rejasini boshqarish
Quota per-tenant/kalit/mijozlar puli, min/soat/sutkada.
Burst + sustained limitlari; tekislash uchun leaky bucket.
Fairness: ortiqcha yuklashda - «birinchi uchrashgan» o’rniga fair queuing.
Ustuvorliklar: ustuvor va ajratilgan pullarga ega tizimli/tanqidiy yo’nalishlar.
11) O’zgartirishlarni boshqarish va relizlar
Canary/Blue-Green: og’irlik yo’nalishi; SLO bo’yicha avtomatik ravishda oldinga siljish (xato/yashirin).
Feature gates/backend bayroqlari: sarlavha/token boʻyicha qoʻshish.
Shadowing/diff-validatorlar: tel/statuslarni taqqoslash, delta bo’yicha cheklovlar.
Steyjinglar: tanlangan domen/yoʻllar (’staging. api...’), alohida kalitlar va kvotalar.
12) Konfiguratsiya namunalari
12. 1 NGINX - limitli va keshli bazaviy gateway
nginx map $http_x_request_id $reqid { default $request_id; }
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
server {
listen 443 ssl http2;
server_name api. example. com;
security add_header Strict-Transport-Security "max-age = 31536000" always;
location /v1/ {
limit_req zone=perip burst=30 nodelay;
proxy_set_header X-Request-ID $reqid;
proxy_set_header Authorization $http_authorization;
proxy_connect_timeout 1s;
proxy_read_timeout 5s;
proxy_cache api_cache;
proxy_cache_valid 200 10s;
proxy_cache_use_stale error timeout updating;
proxy_pass http://orders-v1;
}
}
12. 2 Envoy - tarozilar va retrajlar bo’yicha yo’naltirish
yaml routes:
- match: { prefix: "/orders" }
route:
weighted_clusters:
clusters:
- name: orders-v1 weight: 90
- name: orders-v2 weight: 10 retry_policy:
retry_on: "5xx,reset,connect-failure"
num_retries: 2 per_try_timeout: 2s
12. 3 Traefik - midlvari va xederlar
yaml http:
middlewares:
secHeaders:
headers:
stsSeconds: 31536000 contentTypeNosniff: true routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1`)"
service: svc-orders middlewares: ["secHeaders"]
13) Anti-patternlar
Hamma uchun bitta global limit - «yaxshi qo’shnilar» «shovqinlar» tufayli azob chekmoqda.
Idempotentsiz retraylar → ikki ta’sir (to’lovlar, mavjudotlarni yaratish).
’timeout ’/’ max body size’ → obʼektlarini eʼtiborsiz qoldirish
Shlyuzda edge-siyosat va biznes-mantiqni aralashtirish (perimetrni og’irlashtirish).
Sxemalar validatsiyasining yo’qligi → mijozlarning zaifligi va «buzuvchi» relizlar.
Auth/limitlar/idle-taymsiz yalang’och WebSocket.
Sarlavhalardagi sirlar rotatsiyasiz; ichki B2B da mTLS yo’qligi.
14) Test-pleybuklar (Game Days)
So’rovlar bo’roni: tekshirish limiter/quota, 429-xulq-atvor, degradatsiya.
Bitta klasterni yo’qotish: failover/og’irlikni qayta taqsimlash; SLO kanareya.
Og’irlashtirilgan javoblar: max body/timeouts; birikmalarni kesish.
Inyeksiya/anomaliyalar: WAF qoidalari, rekursiv JSON taqiqlari, GraphQLning katta chuqurliklari.
Trastirovka muvaffaqiyatsiz tugadi:’traceparent’va semplash targ’ibotini tekshirish.
Sirlar: kalitlarning rotatsiyasi/JWKS, tokenlarning tugashi, clock-skew ruxsatnomasi.
15) Joriy etish chek-varaqasi
- OpenAPI/Proto tomonidan nashr etilgan domenlar/yoʻllar/versiyalar aniqlandi.
- TLS/mTLS, HSTS, maxfiy menejment va rotatsiya sozlangan.
- Autentifikatsiya (OIDC/HMAC), RBAC/sotib olish, CORS kiritilgan.
- Per-tenant limitlari/kvotalari, adolatli navbatlar, 429-UX.
- Og’irlik/sarlavha yo’nalishi, kanareya va rollback rejasi.
- Timeout/retry/circuit-breaker/outlier siyosati.
- Sxemalarni validatsiya qilish, transformatsiya qilish, PIIni niqoblash.
- Edge-кеш/ETag, coalescing, gzip/br.
- Kuzatish darajasi: metrika, loglar, trassalar, dashbordlar va alertlar.
- Runbooks: hodisalar, kalitlarning rotatsiyasi, blok-varaqlar, «qora juma».
16) FAQ
Q: Xizmat qopidan API-shlyuz qanday farq qiladi?
A: Shlyuz - north-south (tashqi perimetri, o’tish siyosati). Mesh - east-west (klaster ichidagi bog’liqlik/MTLS/retray). Koʻpincha birgalikda ishlatiladi.
Q: auth qayerda sotiladi: shlyuzda yoki servislarda?
A: Ikkala daraja: shlyuz - coarse-grained (autentifikatsiya, bazaviy huquqlar/kvotalar), servis - fine-grained (domen rollari/atributlar).
Q: gRPC-JSON transcoding qachon kerak?
A: Ichki gRPC va tashqi REST/JSON va oddiy mijozlar/brauzerlar kerak bo’lganda.
Q: Versiyalash strategiyasini qanday tanlash mumkin?
A: Ommaviy API uchun - yo’l ’/vN’+ deprivatsiya sarlavhalari va uzoq overlap. Ichki uchun - capability bayroqlari/moslik sxemasi.
17) Yakunlar
API-shlyuz shunchaki «proksik» emas, balki siyosat va barqarorlik markazidir. To’g "ri yo’nalish, xavfsizlik, limitlar, validatsiya va kuzatish relizlarning bashorat qilinishi va tezligini ta’minlaydi. Edge-shlyuzni servis-mesh bilan birlashtiring, kanareykalar va kvotalarni avtomatlashtiring, nosozliklarni sinovdan o’tkazing - va perimetr shisha og’zingizga emas, balki tezlashtiruvchiga aylanadi.