راهنمای API
راهنمای کامل REST API و gRPC برای نود PasarGuard
معرفی API
نود PasarGuard هم REST API و هم gRPC رو در اختیارتون میذاره تا بتونید نود، کاربرا و آمارهها رو مدیریت کنید.
احراز هویت
برای همهی درخواستهای API باید از API_KEY
که تو فایل .env
تنظیم کردید استفاده کنید.
REST API:
Authorization: Bearer <api_key>
gRPC:
authorization: Bearer <api_key>
آدرس پایه
درخواستهای REST API باید به این آدرس فرستاده بشن:
https://your-node-address:port/
نوع محتوا
REST API از Protocol Buffers برای سریالسازی داده استفاده میکنه:
Content-Type: application/x-protobuf
ساختارهای داده
Backend
message Backend {
BackendType type; // نوع بکند (XRAY = 0)
string config; // پیکربندی بکند
repeated User users; // لیست کاربران
uint64 keepAlive; // مدت زمان keep alive به ثانیه
}
User
message User {
string email; // شناسه یکتای ایمیل کاربر
Proxy proxies; // پیکربندیهای پروکسی
repeated string inbounds; // لیست تگهای ورودی
}
StatRequest
message StatRequest {
string name; // ایمیل کاربر یا تگ ورودی/خروجی
bool reset; // بازنشانی آمار ترافیک پس از بازیابی
StatType type; // نوع آمار برای بازیابی
}
enum StatType {
Outbounds = 0; // تمام آمار خروجی
Outbound = 1; // آمار خروجی تکی
Inbounds = 2; // تمام آمار ورودی
Inbound = 3; // آمار ورودی تکی
UsersStat = 4; // تمام آمار کاربران
UserStat = 5; // آمار کاربر تکی
}
متدهای API
مدیریت نود
راهاندازی Backend
نود رو با کانفیگ موردنظر استارت بزنید.
POST /start
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf
Body: Backend (protobuf)
rpc Start(Backend) returns (BaseInfoResponse)
این تنها متدیه که قبل از برقراری ارتباط با نود صدا زده میشه.
خاموش کردن Backend
Backend رو متوقف کنید و کانکشنهای کاربرا رو قطع کنید.
PUT /stop
Authorization: Bearer <api_key>
rpc Stop(Empty) returns (Empty)
دریافت اطلاعات پایه
اطلاعات اولیه نود رو بگیرید و وضعیت اتصال رو چک کنید.
GET /info
Authorization: Bearer <api_key>
rpc GetBaseInfo(Empty) returns (BaseInfoResponse)
پاسخ:
message BaseInfoResponse {
string version;
string core_type;
bool running;
}
لاگگیری
دریافت لاگها
لاگهای لحظهای backend رو دریافت کنید.
GET /logs
Authorization: Bearer <api_key>
// Returns Server-Sent Events (SSE) stream
rpc GetLogs(Empty) returns (stream Log)
ساختار لاگ:
message Log {
string detail; // Log message
}
آمار و آمارگیری
دریافت آمار سیستم
آمار سطح سیستم رو دریافت کنید.
GET /stats/system
Authorization: Bearer <api_key>
rpc GetSystemStats(Empty) returns (SystemStatsResponse)
پاسخ:
message SystemStatsResponse {
uint64 mem_total; // Total memory
uint64 mem_used; // Used memory
uint64 cpu_cores; // CPU cores
double cpu_usage; // CPU usage %
uint64 incoming_bandwidth_speed; // Download speed
uint64 outgoing_bandwidth_speed; // Upload speed
}
دریافت آمار Backend
آمار اجرایی backend رو بگیرید.
GET /stats/backend
Authorization: Bearer <api_key>
rpc GetBackendStats(Empty) returns (BackendStatsResponse)
پاسخ:
message BackendStatsResponse {
uint32 num_goroutine; // Active goroutines
uint32 num_gc; // GC runs
uint64 alloc; // Allocated memory
uint64 total_alloc; // Total allocated
uint64 sys; // System memory
uint64 mallocs; // Malloc count
uint64 frees; // Free count
uint64 live_objects; // Live objects
uint64 pause_total_ns; // Total GC pause
uint32 uptime; // Uptime in seconds
}
دریافت آمار ترافیک
آمار ترافیک کاربرا، inbound یا outbound رو دریافت کنید.
GET /stats
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf
Body: StatRequest (protobuf)
rpc GetStats(StatRequest) returns (StatResponse)
مثالها:
دریافت آمار همه کاربرا:
StatRequest {
type: UsersStat,
reset: false
}
دریافت آمار یک کاربر خاص:
StatRequest {
name: "user@example.com",
type: UserStat,
reset: true // Reset after retrieval
}
پاسخ:
message StatResponse {
repeated Stat stats;
}
message Stat {
string name; // User email or tag
string type; // Stat type
string link; // Link identifier
int64 value; // Traffic value in bytes
}
دریافت آمار آنلاین بودن کاربر
تعداد کانکشنهای فعال یک کاربر رو بگیرید.
GET /stats/user/online
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf
Body: StatRequest (protobuf)
rpc GetUserOnlineStats(StatRequest) returns (OnlineStatResponse)
پاسخ:
message OnlineStatResponse {
string name; // User email
int64 value; // Online connection count
}
دریافت لیست IP های آنلاین کاربر
لیست IP های کانکشنهای فعال یک کاربر رو دریافت کنید.
GET /stats/user/online_ip
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf
Body: StatRequest (protobuf)
rpc GetUserOnlineIpListStats(StatRequest) returns (StatsOnlineIpListResponse)
مدیریت کاربرا
همگامسازی کاربر
یک کاربر رو اضافه، ویرایش یا حذف کنید.
PUT /user/sync
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf
Body: User (protobuf)
rpc SyncUser(stream User) returns (Empty)
برای حذف یک کاربر، یک آرایه خالی از inbounds بفرستید. gRPC یک اینترفیس stream داره، ولی REST برای هر کاربر نیاز به یک درخواست جداگانه داره.
همگامسازی همه کاربرا
همه کاربرا رو با یک لیست جدید جایگزین کنید.
PUT /users/sync
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf
Body: Users (protobuf)
rpc SyncUsers(Users) returns (Empty)
این متد همه کاربرای قبلی رو پاک میکنه و با لیست جدیدی که میدید جایگزین میکنه.
پاسخهای خطا
کدهای وضعیت HTTP
کد | معنی |
---|---|
200 | موفق |
400 | درخواست نامعتبر - داده اشتباه |
401 | عدم احراز هویت - API_KEY نامعتبره |
404 | پیدا نشد - endpoint وجود نداره |
500 | خطای داخلی سرور |
فرمت خطا
{
"error": "Error description",
"code": "ERROR_CODE"
}
محدودیت تعداد درخواست
الان محدودیت داخلی برای تعداد درخواستها نیست، ولی پیشنهاد میشه:
- تا جایی که میشه آپدیتهای کاربرا رو دستهجمعی انجام بدید
- آمارها رو به صورت محلی کش کنید
- از درخواستهای زیاد و مکرر خودداری کنید