Bỏ qua để đến nội dung

Tổng quan API

Backend phơi bày hai bề mặt REST trên cổng 5000, cộng với một service gRPC và một hub SignalR:

Bề mặtĐường dẫn gốcXác thựcĐối tượng
API nội bộ/api/…JWT bearer (phiên đăng nhập)Giao diện bảng điều khiển; dùng được để scripting trên box
API bên ngoài/api/external/v1/…Header X-AiBoard-ApiKeyTích hợp bên thứ ba (SCADA, historian)
gRPC Inferencecổng 50051không (chỉ mạng nội bộ)Backend ↔ runtime suy luận
Hub SignalR/hub/realtimeJWT (?access_token=)Cập nhật bảng điều khiển trực tiếp

Mọi endpoint nội bộ đều yêu cầu xác thực theo mặc định (chính sách deny-by-default); chỉ POST /api/auth/loginGET /api/system/health là ẩn danh. Có hai vai trò: admin (toàn quyền) và viewer (bảng điều khiển chỉ-đọc). Tài liệu API tương tác (Swagger UI) được phục vụ tại http://<box>:5000/.

POST /api/auth/login

Đổi username/password lấy một JWT (thời hạn 8 giờ). Đăng nhập thất bại bị giới hạn tốc độ theo từng IP (5 lần / 60 giây).

Authorization: Bearer <jwt>

Không có refresh token — hãy đăng nhập lại khi token hết hạn. GET /api/auth/me trả về danh tính đằng sau một token. Tài khoản admin được tạo lúc cài đặt bởi trình cài đặt bundle (seed-admin); không có thông tin đăng nhập mặc định.

Các datasource đầu vào (đường đọc) và đầu ra (đường ghi) được quản lý riêng dưới /api/datasources/input/api/datasources/output — cả hai đều chỉ-admin. Mỗi loại hỗ trợ cùng vòng đời:

Verb + đường dẫn (tương đối)Mục đích
GET / · GET /{id}Liệt kê / chi tiết (các trường secret được che thành ***)
POST / · PUT /{id} · DELETE /{id}Tạo / cập nhật / xóa
GET /plugins · GET /plugins/{type}/schemaCác plugin giao thức khả dụng + schema biểu mẫu cấu hình của chúng
POST /test-connection · POST /{id}/test-connectionDò khả năng kết nối
POST /{id}/tags · POST /{id}/browse-tagsThay thế ánh xạ tag / hỏi thiết bị danh sách tag của nó

Datasource giờ thuần là quản lý kết nối: có những gì và kết nối tới ra sao. Mô hình nào chạy trên đầu vào nào, và pipeline nào đang sống, thuộc về luồng — xem bảng bên dưới. Datasource đầu ra còn hỗ trợ POST /{id}/test-write — xem Datasource đầu ra.

Đường dẫn gốc /api/flows. Một luồng gắn một datasource đầu vào, một phiên bản mô hình và bao nhiêu datasource đầu ra tuỳ ý. Luồng chính là phép ghép cặp, và bật luồng là hành động nạp sẵn pipeline.

Động từ + đường dẫn (tương đối)Mục đích
GET / · GET /{id}Danh sách / chi tiết
POST / · PUT /{id} · DELETE /{id}Tạo / sửa / xoá
POST /{id}/enableĐưa luồng này về Ready (thân { "enabled": true | false })

Tại một thời điểm chỉ một luồng được bật; bật luồng mới sẽ tắt luồng cũ. Sửa một luồng đang bật trả về 409 disable_flow_first — một pipeline đang chạy không bị đổi hướng ngay dưới chân nó.

Bật chỉ đưa luồng về Ready, không bắt đầu streaming. Việc bắt đầu vẫn là POST /api/inference/start, nên “luồng nào được chọn” và “có đang streaming không” là hai sự thật tách biệt.

GET /api/models

Liệt kê mọi phiên bản mô hình (bất kỳ người dùng đã xác thực nào).

POST /api/models/upload

Upload một file .onnx (admin). Được xác thực qua runtime suy luận; các phiên bản là bất biến.

POST /api/models/{modelId}/activate/{version}

Kích hoạt một phiên bản (admin).

POST /api/models/{modelId}/rollback

Kích hoạt lại phiên bản hợp lệ trước đó (admin).

Ngoài ra: GET /{modelId}/active, GET /{modelId}/history, DELETE /{modelId}/{version}, và DELETE /{modelId}/cleanup (cắt tỉa các phiên bản cũ, số lượng giữ lại có thể cấu hình).

GET /api/inference/status

Trạng thái hiện tại: idle / ready / running, datasource đang hoạt động, mô hình đã nạp.

POST /api/inference/start

Bắt đầu streaming (admin). 409 nếu datasource chưa Ready.

POST /api/inference/stop

Dừng streaming một cách nhẹ nhàng — các dự đoán đã đệm được xả tới sink đầu ra trước (admin).

GET /api/inference/stats

Tổng hợp độ trễ cấp dữ liệu cho trang Inference Stats.

GET /api/inference/backpressure

Bộ đếm đường nóng: số bỏ, chặn sink, độ sâu kênh. Đơn điệu kể từ khi khởi động.

Ngoài ra: GET /api/inference/predictions/recent, GET /api/inference/payloads/{requestId}, và các ngưỡng cảnh báo độ trễ theo từng mô hình dưới /api/inference/thresholds (PUT/DELETE admin).

EndpointMục đích
GET /api/system/health (ẩn danh)Liveness — dùng bởi healthcheck của Docker
GET /api/system/status · GET /api/system/metricsTrạng thái runtime; số liệu CPU/GPU/bộ nhớ
GET /api/logsLog tập trung phân trang (backend + suy luận)
GET/PUT /api/dashboard/layoutBố cục bảng điều khiển theo từng người dùng
GET/PUT/DELETE /api/me/preferencesBlob tùy chọn theo từng người dùng
GET /api/admin/inference-config/export

Xuất toàn bộ pipeline — datasource, ánh xạ tag và flow — thành một phong bì JSON có phiên bản (secret được che).

POST /api/admin/inference-config/import

Nhập một phong bì theo giao dịch — bất kỳ mục nào lỗi cũng roll back toàn bộ file. Chế độ: merge (mặc định) hoặc replace.

Được thiết kế cho hệ thống bên thứ ba. Bị vô hiệu về mặt xác thực cho đến khi tồn tại một API key; các key được cấp trên CLI của box (issue-api-key), hiển thị một lần, và có thể thu hồi (list-api-keys, revoke-api-key). Các request bị giới hạn tốc độ (100 lần / 60 giây mỗi client).

X-AiBoard-ApiKey: ak_<your-key>
GET /api/external/v1/predictions/latest

Dự đoán mới nhất: giá trị đầu ra, độ tin cậy, phiên bản mô hình, các timestamp cửa sổ.

GET /api/external/v1/predictions/history?limit=&offset=

Các dự đoán gần đây (trong bộ nhớ, giữ ~1 giờ, limit ≤ 1000). 503 khi suy luận đang dừng.

Các lỗi xác thực trả về HTTP 400 với mã máy-đọc-được (ví dụ name_already_exists, shape_mismatch, model_not_paired, config_invalid:port:range). Các xung đột vòng đời trả về 409 (not_ready, version_exists). Bảng điều khiển ánh xạ các mã này thành thông báo được bản địa hóa.