Skip to content

API

بلاک api یک سطح مدیریتی gRPC را عرضه می‌کند که به ابزارهای بیرونی (xray api ...، داشبوردهای رصدپذیری، کلاینت‌های قاعدهٔ پویا) اجازه می‌دهد با یک نمونهٔ در حال اجرای Xray صحبت کنند. این بلاک یک ورودی داخلی را پیکربندی می‌کند که موتور مسیریابی سپس باید به آن مسیر دهد — معمولاً از طریق یک قاعدهٔ inboundTag.

گزینه‌ها

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
tagstring(required)<inbound tag>تگ مورد استفاده برای عرضهٔ ورودی API به موتور مسیریابی. یک مقدار ناتهی الزامی است؛ تگ خالی هنگام تجزیه رد می‌شود.
listenstring127.0.0.1:0<host:port>آدرسی که API ‏gRPC روی آن گوش می‌دهد. اگر تنظیم نشود، به جای یک شنوندهٔ TCP، یک ورودی داخلی درون‌فرایندی ثبت می‌شود.
services[]string[]HandlerService | LoggerService | StatsService | ObservatoryService | RoutingService | ReflectionServiceفهرست سرویس‌های API برای عرضه. مطابقت بدون توجه به بزرگی و کوچکی حروف انجام می‌شود؛ نام‌های ناشناخته به‌طور خاموش نادیده گرفته می‌شوند.

منبع: infra/conf/api.go:16-20 · ثابت‌شده در v1.260327.0 (d2758a0)

سرویس‌های مجاز

نام‌های موجود در آرایهٔ services به ثبت‌های سرویس gRPC در APIConfig.Build ‏(infra/conf/api.go:28-43) نگاشت می‌شوند. این نگاشت نسبت به بزرگی و کوچکی حروف حساس نیست — "HandlerService"، "handlerservice" و "HANDLERSERVICE" همگی پذیرفته می‌شوند.

سرویسهدف
HandlerServiceافزودن/حذف ورودی‌ها و خروجی‌ها در زمان اجرا.
LoggerServiceبازگشایی فایل‌های لاگ (مفید با logrotate).
StatsServiceخواندن شمارنده‌هایی که هنگام فعال بودن stats منتشر می‌شوند.
ObservatoryServiceپرس‌وجوی آخرین نتایج رصدگر تأخیر.
RoutingServiceآزمودن تصمیم‌های مسیریابی و بارگذاری مجدد قواعد.
ReflectionServiceبازتاب استاندارد gRPC تا کلاینت‌های عمومی بتوانند درون‌بینی کنند.

مثال‌ها

یک نقطه‌انتهایی مدیریتی کمینه با شمارنده‌های آمار در دسترس:

json
{
  "stats": {},
  "api": {
    "tag": "api",
    "listen": "127.0.0.1:10085",
    "services": ["HandlerService", "StatsService"]
  },
  "routing": {
    "rules": [
      { "type": "field", "inboundTag": ["api"], "outboundTag": "api" }
    ]
  }
}

نکات

  • tag نمی‌تواند خالی باشد — Build خطای "API tag can't be empty." را برمی‌گرداند (infra/conf/api.go:23-25).
  • api.services را با یک قاعدهٔ مسیریابی جفت کنید که inboundTag: ["api"] را می‌گیرد و آن را به یک خروجی درون‌فرایندی با همان تگ ارسال می‌کند. بدون آن، API روی پورت شنوایی قابل دسترسی است اما موتور مسیریابی هیچ قاعده‌ای برای ترافیک ندارد.
  • برای جمع‌آوری به سبک Prometheus، بلاک metrics را ترجیح دهید — یک نقطه‌انتهایی HTTP ساده را بدون ماشین‌آلات gRPC عرضه می‌کند.

منبع: infra/conf/api.go:16-20 · v1.260327.0 (d2758a0)

Core Tutorial اثر Argsment