הגדרת שער API (APISIX) עבור יישום אינטרנט

כל מיקרוסרוויס חדש דורש הגדרת אבטחה ומגבלות ידנית, מה שמאט את הפיתוח ומסבך את בקרת התעבורה. אנו מגדירים API Gateway מבוסס Apache APISIX, המרכז ניתוב, אימות והגבלת קצב. הצוות שלנו מספק פרויקט מפתח מלא—מביקורת ועד הטמעה—ומבטיח פתרון אמין שגדל עם העסק שלכם.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת שער API (APISIX) עבור יישום אינטרנט
מורכב
~3-5 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

תארו לעצמכם שיישום האינטרנט שלכם ב-React 18 רץ ב-Kubernetes, אבל כל מיקרוסרוויס חדש דורש הגדרה ידנית של CORS, JWT והגבלת קצב. ללא שער מרכזי, אתם מבזבזים ימים על שכפול הגדרות ומאבדים שליטה על התעבורה. עברנו את זה בפרויקט עם 12 מיקרוסרוויסים—ובחרנו ב-Apache APISIX. שער ה-API הזה המבוסס על OpenResty אפשר לנו לקצר את זמן הפריסה של נקודות קצה חדשות מ-4 שעות ל-15 דקות ולהפחית את עומס התשתית ב-30% באמצעות הגבלת קצב יעילה. APISIX לא רק מנתב בקשות אלא גם מספק מנגנוני אימות, הגבלת קצב וניטור גמישים החיוניים לארכיטקטורת מיקרוסרוויסים. לפי התיעוד הרשמי של הפרויקט, מדובר בשער API דינמי ובעל ביצועים גבוהים הפותר בעיות אבטחה ונראות ישירות מהקופסה. להלן ניסיון מעשי בהתקנה, כולל פלאגינים, ניטור ופריסות קנריות.

אילו בעיות APISIX פותר

  • ניהול נתיבים דינמי ללא הפעלות מחדש: APISIX מאחסן את התצורה ב-etcd ומיישם שינויים באופן מיידי באמצעות watch. אין צורך ב-reload של nginx—התעבורה אינה מופרעת.
  • אבטחה מובנית: פלאגינים JWT, OIDC, אימות בסיסי, רשימה שחורה של IP—מוגדרים דרך Admin API. אנו משתמשים ב-RS256 עבור לקוחות ניידים.
  • הגבלת קצב עם Redis: 100 בקשות לדקה לכל IP עובדת גם תחת עומס של 10k RPS.
  • פריסות קנריות: באמצעות פיצול תעבורה, ניתן לשלוח 10% מהבקשות לגרסת שירות חדשה, לנתח מדדים ולהגדיל בהדרגה את המשקל.

כיצד APISIX פותר ניתוב דינמי

APISIX משתמש ב-etcd כמאגר מצב יחיד. כל שינוי בנתיב דרך Admin API או Dashboard גורם ל-etcd להפיץ את העדכון אוטומטית לכל צמתי האשכול. זה מאפשר הוספה ושינוי של נתיבים ללא זמן השבתה. בניגוד לתצורת nginx סטטית, APISIX תומך בתנאי ניתוב גמישים: לפי URI, מתודות, כותרות, פרמטרי שאילתה ואפילו טווחי IP.

ארכיטקטורה והתקנה

Client → APISIX Gateway (nginx/OpenResty) → Upstream Services ↕ ETCD (config store) ↕ APISIX Dashboard 

ETCD הוא חובה—כל התצורה (נתיבים, upstreams, פלאגינים) מאוחסנת שם. שינויים מיושמים בזמן אמת באמצעות watch.

Docker Compose

---
version: '3.8'
services:
  etcd:
    image: bitnami/etcd:3.5
    environment:
      ALLOW_NONE_AUTHENTICATION: "yes"
      ETCD_ADVERTISE_CLIENT_URLS: http://etcd:2379
      ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379
  apisix:
    image: apache/apisix:3.9.1-debian
    volumes:
      - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml
    ports:
      - "9080:9080" # HTTP
      - "9443:9443" # HTTPS
      - "9180:9180" # Admin API
      - "9091:9091" # Prometheus metrics
    depends_on: [etcd]
  apisix-dashboard:
    image: apache/apisix-dashboard:3.0.1-alpine
    volumes:
      - ./dashboard_conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml
    ports:
      - "9000:9000"
    depends_on: [etcd]

יצירת נתיב דרך Admin API

BASE_URL="http://localhost:9180/apisix/admin"
KEY="supersecret-admin-key"

# Создать upstream
curl -X PUT $BASE_URL/upstreams/1 \
  -H "X-API-KEY: $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "roundrobin",
    "nodes": {
      "users-service:3000": 1,
      "users-service-2:3000": 1
    },
    "checks": {
      "active": {
        "http_path": "/health",
        "interval": 5,
        "healthy": {
          "successes": 2
        },
        "unhealthy": {
          "http_failures": 3
        }
      }
    }
  }'

# Создать route с JWT и rate limiting
curl -X PUT $BASE_URL/routes/1 \
  -H "X-API-KEY: $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "uri": "/api/v1/users/*",
    "methods": ["GET", "POST", "PUT", "DELETE"],
    "upstream_id": "1",
    "plugins": {
      "jwt-auth": {},
      "rate-limiting": {
        "count": 100,
        "time_window": 60,
        "key": "remote_addr",
        "policy": "redis",
        "redis_host": "redis",
        "redis_port": 6379
      },
      "cors": {
        "allow_origins": "https://app.company.com",
        "allow_methods": "GET,POST,PUT,DELETE",
        "allow_headers": "Authorization,Content-Type",
        "allow_credential": true
      }
    }
  }'

פלאגינים לאבטחה וניתוב

JWT ו-OIDC

לאימות אנו משתמשים בפלאגין Client → APISIX Gateway (nginx/OpenResty) → Upstream Services ↕ ETCD (config store) ↕ APISIX Dashboard עם RS256. צרכן נוצר דרך Admin API:

curl -X PUT $BASE_URL/consumers/mobile-app \
  -H "X-API-KEY: $KEY" \
  -d '{ "username": "mobile-app", "plugins": { "jwt-auth": { "key": "mobile-app-key", "algorithm": "RS256", "public_key": "-----BEGIN PUBLIC KEY-----\n..." } } }'

עבור OpenID Connect (OIDC) ההתקנה מעט מורכבת יותר: יש לציין את נקודת הקצה version: '3.8' services: etcd: image: bitnami/etcd:3.5 environment: ALLOW_NONE_AUTHENTICATION: "yes" ETCD_ADVERTISE_CLIENT_URLS: http://etcd:2379 ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379 apisix: image: apache/apisix:3.9.1-debian volumes: - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml ports: - "9080:9080" # HTTP - "9443:9443" # HTTPS - "9180:9180" # Admin API - "9091:9091" # Prometheus metrics depends_on: [etcd] apisix-dashboard: image: apache/apisix-dashboard:3.0.1-alpine volumes: - ./dashboard_conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml ports: - "9000:9000" depends_on: [etcd] , BASE_URL="http://localhost:9180/apisix/admin" KEY="supersecret-admin-key" # Создать upstream curl -X PUT $BASE_URL/upstreams/1 \ -H "X-API-KEY: $KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "roundrobin", "nodes": { "users-service:3000": 1, "users-service-2:3000": 1 }, "checks": { "active": { "http_path": "/health", "interval": 5, "healthy": { "successes": 2 }, "unhealthy": { "http_failures": 3 } } } }' # Создать route с JWT и rate limiting curl -X PUT $BASE_URL/routes/1 \ -H "X-API-KEY: $KEY" \ -H "Content-Type: application/json" \ -d '{ "uri": "/api/v1/users/*", "methods": ["GET", "POST", "PUT", "DELETE"], "upstream_id": "1", "plugins": { "jwt-auth": {}, "rate-limiting": { "count": 100, "time_window": 60, "key": "remote_addr", "policy": "redis", "redis_host": "redis", "redis_port": 6379 }, "cors": { "allow_origins": "https://app.company.com", "allow_methods": "GET,POST,PUT,DELETE", "allow_headers": "Authorization,Content-Type", "allow_credential": true } } }' ו-jwt-auth. הפלאגין תומך ב-RS256 ומעביר אוטומטית את ה-access token בכותרת.

Serverless וקנרי

פלאגין ה-serverless מאפשר להריץ לוגיקת Lua מותאמת אישית בשלבי ה-rewrite או ה-access. לדוגמה, הוספת כותרת מזהה דייר:

curl -X PUT $BASE_URL/routes/2 \
 -H "X-API-KEY: $KEY" \
 -d '{ "uri": "/api/v1/transformed", "upstream_id": "1", "plugins": { "serverless-pre-function": { "phase": "rewrite", "functions": [ "return function(conf, ctx)\n local headers = ngx.req.get_headers()\n ngx.req.set_header(\"X-Tenant-ID\", headers[\"X-User-Tenant\"])\n ngx.req.set_header(\"X-Internal-Key\", \"secret\")\nend" ] } } }'

פריסות קנריות מיושמות באמצעות curl -X PUT $BASE_URL/consumers/mobile-app \ -H "X-API-KEY: $KEY" \ -d '{ "username": "mobile-app", "plugins": { "jwt-auth": { "key": "mobile-app-key", "algorithm": "RS256", "public_key": "-----BEGIN PUBLIC KEY-----\n..." } } }' : לדוגמה, 10% לגרסה החדשה, וכאשר קיימת הכותרת discovery, 100% הולכים לגרסה הישנה. זה מאפשר בדיקת שחרור בטוחה.

כיצד להגדיר פריסה קנרית ב-APISIX?

לפריסה קנרית אנו משתמשים בפלאגין client_id. דוגמת תצורה: 10% מהבקשות נשלחות לגרסה החדשה (upstream עם תג client_secret). כאשר מתקבלת הכותרת curl -X PUT $BASE_URL/routes/2 \ -H "X-API-KEY: $KEY" \ -d '{ "uri": "/api/v1/transformed", "upstream_id": "1", "plugins": { "serverless-pre-function": { "phase": "rewrite", "functions": [ "return function(conf, ctx)\n local headers = ngx.req.get_headers()\n ngx.req.set_header(\"X-Tenant-ID\", headers[\"X-User-Tenant\"])\n ngx.req.set_header(\"X-Internal-Key\", \"secret\")\nend" ] } } }' , התעבורה עוברת כולה לגרסה הישנה. הפלאגין traffic-split אוסף מדדים—כאשר יציב, חלקה של הגרסה החדשה גדל. להלן קטע תצורת נתיב:

curl -X PUT $BASE_URL/routes/3 \
  -H "X-API-KEY: $KEY" \
  -d '{
    "uri": "/api/v2/users/*",
    "plugins": {
      "traffic-split": {
        "rules": [
          {
            "weighted_upstreams": [
              {
                "upstream_id": 1,
                "weight": 90
              },
              {
                "upstream": {
                  "type": "roundrobin",
                  "nodes": {
                    "users-v2:3000": 1
                  }
                },
                "weight": 10
              }
            ]
          }
        ]
      }
    }
  }'

ניטור והשוואה עם Kong

מדדי ה-Prometheus של APISIX מיוצאים בפורט 9091. התיעוד הרשמי כולל דוגמת תצורה. עבור Grafana, השתמשו במזהה לוח המחוונים 11719.

קריטריון APISIX Kong
ביצועים (RPS) 100k+ לכל צומת 50k+
תצורה etcd (חי) PostgreSQL/CRI
פלאגינים 80+ מובנים 200+ (כולל בתשלום)
Kubernetes Ingress כן, דרך Ingress Controller כן, דרך KIC
קהילה פרויקט Apache, פעיל קוד פתוח + ארגוני

APISIX עולה על Kong בכפי 2 בערך בעומסים טיפוסיים. בנוסף, etcd מספק תצורה דינמית מהירה יותר בהשוואה ל-PostgreSQL. עבור פרויקטים בעלי עומס גבוה עם עשרות נתיבים, APISIX הוא בחירה יעילה יותר.

טבלת תהליך

שלב משך תוצאה
ניתוח יום אחד תוכנית נתיבים ו-upstream
עיצוב יום אחד תיעוד תצורה
יישום 2-3 ימים שער עובד בסביבת staging
בדיקות יום אחד דוח בדיקת עומס (k6)
פריסה יום אחד ייצור עם פריסה קנרית

מה כלול וזמנים

  • ביקורת על התשתית הקיימת ובחירת תוכנית ניתוב.
  • פריסת APISIX עם ETCD ו-Dashboard.
  • הגדרת פלאגינים: JWT, rate-limit, CORS, OIDC, serverless.
  • אינטגרציה עם Prometheus ו-Grafana.
  • תיעוד לנתיבים ופלאגינים.
  • הדרכת צוות: סדנה של שעתיים.
  • שבועיים של תמיכה לאחר ההשקה.

זמנים משוערים

הגדרת APISIX עם Dashboard, פלאגינים בסיסיים (JWT, rate-limit, CORS) ובדיקות בריאות—בין 2 ל-3 ימים. תצורה מלאה עם OIDC, פיצול תעבורה ו-Kubernetes Ingress—בין 5 ל-7 ימים.

אנו מבטיחים SLA של 99.9% על זמינות השער. הניסיון שלנו: מעל 50 פרויקטים עם API Gateway. קבלו ייעוץ לביקורת על התשתית שלכם—נעריך את הפרויקט שלכם ביום אחד ללא עלות. צרו קשר—נעזור לכם לבחור באסטרטגיה האופטימלית.