GH GambleHub

API دروازه و مسیریابی

1) نقش دروازه API در معماری

دروازه API - جزء L7 در لبه، که:
  • ترافیک ورودی را می پذیرد (HTTP/HTTP2/HTTP3، WebSocket، gRPC)
  • مسیرها با توجه به قوانین (میزبان/مسیر/هدر/روش/پرس و جو/جغرافیایی/وزن/سلامت) ؛
  • سیاست های پایان دادن به پایان را اعمال می کند: احراز هویت/مجوز، محدود کردن نرخ، WAF، CORS، ذخیره سازی ؛
  • انجام تحولات (عادی سازی هدر/بدن، gRPC↔JSON، دوخت GraphQL) ؛
  • فراهم می کند ثبات (timeouts، rerits، قطع کننده مدار، تشخیص outlier) ؛
  • می دهد مشاهده و صدور صورت حساب (سیاهههای مربوط، معیارها، آثار، سهمیه) ؛
  • توپولوژی داخلی (مش سرویس، خدمات خصوصی) را جدا می کند.

اغلب در جفت استفاده می شود: Edge/API-Gateway + Ingress/Mesh (Envoy/Istio/Linkerd) - اولین سیاست خارجی را تصمیم می گیرد، دوم - شرق و غرب.

2) توپولوژی های معمولی

تنها دروازه جهانی (CDN/POP لبه → دروازه L7 → خدمات) - ساده، سیاست های متمرکز.
دروازه های منطقه ای (در هر منطقه) + مسیریابی جغرافیایی/تأخیر هوشمند.
چند مستاجر: مسیرهای اختصاصی/زیر دامنه ها/کلید ها، سهمیه ها و محدودیت های هر مستاجر.
ترکیبی: در prem + ابر، لینک خصوصی/peering، خصوصی پشت دروازه API.

3) قوانین مسیریابی L7

معیارها:
  • میزبان/مسیر: 'api. به عنوان مثال. com →/v1/سفارشات/'.
  • سرصفحه ها: «X-Client»، «X-Region»، «User-Agent»، «Accept».
  • روش/محتوا نوع: تشخیص JSON/Proto/GraphQL.
  • پرس و جو/قطعه: دقیق - تحت تاثیر قرار کش/انواع.
  • Geo/Latency: نزدیکترین POP/منطقه، شکست خورده تحت تخریب.
  • وزن/قناری: توزیع ترافیک 90/10، 50/50، چسبنده با کوکی.
  • وابستگی جلسه: هش مبتنی بر کلید/نشانه (مراقب باشید در هنگام پوسته پوسته شدن).
مثال (NGINX Ingress، وزن قناری):
yaml nginx. ingress. kubernetes. io/canary: "true"
nginx. ingress. kubernetes. io/canary-weight: "10" # 10% traffic to new backend
مثال (فرستاده، مسیریابی مبتنی بر هدر):
yaml match: { prefix: "/orders", headers: [{name: "X-Experiment", exact_match: "new"}] }
route: { cluster: orders-v2 }

4) پروتکل ها و سازگاری

REST/JSON - به طور پیش فرض، OpenAPI را برای اعتبار سنجی/تولید مشتری توصیف کنید.
gRPC - باینری پروتو بیش از HTTP/2 ؛ برای مشتریان خارجی، از رمزگذاری gRPC-JSON استفاده کنید.
GraphQL - جمع آوری خدمات ؛ در محیط، نظارت بر پیچیدگی/عمق نمایش داده شد.
WebSocket/SSE - دو طرفه/فشار ؛ در نظر بگیرید چسبنده و timeouts.
HTTP/2/3 (QUIC) - شروع چندگانه/سریع ؛ بررسی سازگاری WAF/پروکسی.

5) امنیت: احراز هویت و مجوز

5. 1 حمل و نقل

TLS 1. 2 + در محیط، HSTS، مهر و موم OCSP، PFS.
mTLS برای API B2B/internal و ماشین به ماشین.
IP allowlist/denylist، محدودیت های جغرافیایی.

5. 2 لایه کاربرد

OAuth2/OIDC: نشانه های حامل JWT، تایید امضا/انقضا/مخاطب.
NMAS/امضا: تاریخ + canonized خط + امضا (AWS مانند) - حفاظت در برابر جایگزینی، تکرار (پنجره nonce/زمان).
کلیدهای API: فقط به عنوان شناسه ؛ حقوق - از طریق RBAC/ABAC/حوزه.
CORS: صریح اجازه منشاء، کش قبل از پرواز.
WAF: signatures (OWASP API Top 10), anomaly, bot protection, recursive JSON fields.
DDoS/Abuse: محدود کردن اتصال، سطل token-bucket/Leaky، سرعت متوسط birst +، ممنوعیت پویا.

مثال (کنگ، OIDC و محدود کننده):
yaml plugins:
- name: oidc config: { issuer: "...", client_id: "...", client_secret: "...", scopes: ["orders. read"] }
- name: rate-limiting config: { minute: 600, policy: local }

6) اعتبار، تحول و سازگاری

طرح ها: اعتبار سنجی بدن/هدر/پارامترها با توجه به OpenAPI/JSON-Schema/Protobuf.
تبدیل: نرمال سازی میدان، پوشش PII، اضافه کردن هدر های همبستگی ('traceparent'، 'x-request-id').
نسخه بندی: 'Header: X-API-Version', prefixes '/v1 ', resource-versioning; سیاست تخفیف и غروب آفتاب.
کامپکت عقب: فقط اضافه کردن زمینه ؛ اجتناب از «شکستن» تغییرات بدون نسخه جدید.
Idempotency: «Idempotency-Key» для POST ؛ کلید فروشگاه های دروازه در Redis با TTL.

7) انعطاف پذیری: سیاست های اتصال

وقفه ها: اتصال/خواندن/نوشتن ؛ پیش فرض های معقول (به عنوان مثال،. 1s/5s/5s).
تکرار: فقط برای ایمن و بی نظیر ؛ jitter، عقب نشینی نمایشی، حداکثر تلاش.
قطع کننده مدار: باز در خطاها/تاخیر ؛ نیمه باز برای نمونه.
تشخیص پرت - موارد بد را از استخر حذف کنید.
Bulkhead/competition: محدودیت در درخواست های همزمان در هر مسیر.
شکست: فعال/منفعل، تخریب منطقه ای.
ترافیک سایه: V2 «خاکستری» به موازات V1 (بدون تاثیر بر پاسخ) برای مقایسه اجرا می شود.

مثال (نماینده قطع کننده مدار):
yaml circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 1024 max_pending_requests: 2048 max_retries: 3

8) ذخیره سازی و عملکرد

HTTP- кеш: «Cache-Control»، «ETag/If-None-Match»، «Vary»، «stale-while-revalidate».
ذخیره سازی لبه/POP: CDN ها برای API های استاتیک و ذخیره شده (GET های idempotent).
فشرده سازی: 'gzip/br' (فشرده سازی در حال حاضر فشرده نیست).
درخواست فروپاشی («coalescing»): ترکیب درخواست های موازی مشابه.
شکل دادن به پاسخ: فیلدها/فیلترها، محدودیت های اندازه مبتنی بر مکان نما.

9) قابلیت مشاهده و عملکرد

Метрики: 'l7 _ req _ total {route, method, code}', 'latency _ ms {p50, p95, p99}', 'upstream _ errors', 'retry _ count', 'cb _ state', '429 _ rate', 'quota _ usage {tenant}'.
سیاهههای مربوط: ساختاری، با 'trace _ id/span _ id'، 'user _ id/tenant _ id'، 'client _ ip'.
ردیابی: زمینه ردیابی W3C ('traceparent'، 'tracestate')، به بالادست گسترش می یابد.
حسابرسی: چه کسی باعث چه چیزی، با چه حقوقی ؛ فروشگاه های غیر قابل تغییر برای API های حساس.
SLO/SLA: هدف P99، بودجه خطا ؛ سطح ریشه بهتر از سطح جهانی است.

10) مدیریت ظرفیت برنامه

سهمیه در هر مستاجر/کلید/استخر مشتری، در دقیقه/ساعت/روز.
پشت سر هم + محدودیت های پایدار ؛ سطل نشتی برای صاف کردن.
عدالت: هنگامی که بیش از حد بارگذاری می شود - صف بندی عادلانه به جای «اولین برخورد».
اولویت ها: مسیرهای سیستم/بحرانی با اولویت و استخرهای اختصاصی.

11) تغییر مدیریت و انتشار

قناری/آبی سبز: مسیریابی وزن ؛ پیشرفت خودکار در SLO (خطاها/تاخیر).
دروازه ویژگی/پرچم باطن: فعال کردن توسط هدر/نشانه.
اعتبار سنج سایه/تفاوت: مقایسه بدن/وضعیت، تحمل دلتا.
Staging: دامنه ها/مسیرهای اختصاص داده شده ('staging. API... ')، کلید های فردی و سهمیه.

12) نمونه های پیکربندی

12. 1 NGINX - محدودیت پایه و دروازه کش

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 نماینده - تعادل و مسیریابی مجدد

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 - میان افزار و هدر

yaml http:
middlewares:
secHeaders:
headers:
stsSeconds: 31536000 contentTypeNosniff: true routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1`)"
service: svc-orders middlewares: ["secHeaders"]

13) ضد الگوهای

یک محدودیت جهانی برای همه - «همسایگان خوب» به دلیل «پر سر و صدا» رنج می برند.
Retrays without idempotency → اثرات تکراری (پرداخت, ایجاد اشخاص).
نادیده گرفتن «اتمام وقت »/« حداکثر اندازه بدن» → آویزان/اگزوز کارگران.
مخلوط کردن سیاست های لبه و منطق کسب و کار در دروازه (وزن محیط).
عدم اعتبار طرح → شکنندگی مشتریان و «شکستن» منتشر شده است.
WebSocket برهنه به استثنای auth/limits/idle-time.

اسرار در سرفصل بدون چرخش ؛ عدم وجود mTLS در B2Bs داخلی

14) دفترچه های تست (روزهای بازی)

طوفان درخواست ها: محدود کننده/سهمیه بندی، رفتار 429، تخریب را بررسی کنید.

از دست دادن یک خوشه: توزیع مجدد شکست/وزن ؛ قناری های SLO

پاسخ های وزن: حداکثر بدن/زمان بندی ؛ قطع کردن مفاصل.
تزریق/ناهنجاری: قوانین WAF، مهار JSON بازگشتی، عمق GraphQL بزرگ.
ردیابی نتوانست انتشار و نمونه برداری «traceparent» را بررسی کند.
اسرار: چرخش کلید/JWKS، انقضای توکن، تحمل ساعت.

15) چک لیست پیاده سازی

  • دامنه ها/مسیرها/نسخه های تعریف شده، OpenAPI/Proto منتشر شده است.
  • TLS/mTLS، HSTS، مدیریت مخفی و چرخش پیکربندی شده اند.
  • احراز هویت (OIDC/HMAC)، RBAC/حوزه، CORS را فعال کنید.
  • محدودیت/سهمیه هر مستاجر، صف عادلانه، 429-UX.
  • مسیریابی وزن/هدر، برنامه قناری و برگشت.
  • سیاست های timeout/retry/circuit-breaker/outlier.
  • اعتبار سنجی طرح، تحولات، ماسک PII.
  • Edge- кеш/ETag، coalescing، gzip/br.
  • قابلیت مشاهده: معیارها، گزارش ها، آهنگ ها، داشبورد ها و هشدارها.
  • کتابهای اجرا: حوادث، چرخش کلیدی، لیست بلوک، جمعه سیاه.

16) سوالات متداول

س: دروازه API چگونه از مش سرویس متفاوت است ؟

A: دروازه - شمال-جنوب (محیط بیرونی، سیاست های پایان دادن به پایان). مش - شرق به غرب (اتصال داخل خوشه/MTLS/retrai). اغلب با هم استفاده می شود.

س: از کجا پیاده سازی auth: در دروازه یا خدمات ؟

A: هر دو سطح: دروازه - درشت دانه (احراز هویت، حقوق اساسی/سهمیه)، خدمات - ریز دانه (نقش دامنه/ویژگی).

س: چه زمانی رمزگذاری gRPC-JSON مورد نیاز است ؟

A: هنگامی که gRPC داخلی و خارج نیاز به REST/JSON و مشتریان/مرورگرهای ساده دارد.

س: چگونه یک استراتژی نسخه را انتخاب کنیم ؟

A: برای API های عمومی - مسیر '/vN '+ هدر محرومیت و همپوشانی طولانی. برای پرچم های داخلی/طرح سازگاری.

17) مجموع

دروازه API فقط یک پروکسی نیست، بلکه مرکز سیاست ها و انعطاف پذیری است. مسیریابی مناسب، امنیت، محدودیت ها، اعتبار سنجی و قابلیت مشاهده، قابلیت پیش بینی و سرعت انتشار را فراهم می کند. ترکیب دروازه لبه با مش سرویس، قناری خودکار و سهمیه بندی، شکست تست - و محیط تبدیل خواهد شد شتاب دهنده خود را، نه یک تنگنا.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.