MyID SDK — Rust Client
⚠️ Diqqat: Ushbu kutubxona hozirda faol ishlab chiqilish jarayonida (Work in Progress). API o'zgarishi mumkin. Production muhitida hali tayor emas. Xatolar va takliflar uchun GitHub Issues orqali murojaat qiling.
O'zbekiston Respublikasi MyID identifikatsiya tizimi uchun rasmiy bo'lmagan Rust SDK kutubxonasi.
Imkoniyatlar
- OAuth 2.0 — MyID API bilan autentifikatsiya, token avtomatik cache'lanadi
- Type-safe — PINFL, passport, telefon raqam va boshqa qiymatlar compile-time'da tekshiriladi
- Async/await —
tokioruntime bilan to'liq asinxron ishlash - Xavfsizlik —
client_secretdebug output'da avtomatik<redacted>sifatida ko'rsatiladi - Thread-safe —
Send + Synccompile-time kafolati,Arcorqali klon qilish xavfsiz
O'rnatish
[]
= "0.1.4"
= { = "1", = ["full"] }
Featurelar
| Feature | Default | Tavsif |
|---|---|---|
dotenvy |
✅ yoqilgan | .env fayldan konfiguratsiya yuklash |
.env qo'llab-quvvatlash kerak bo'lmasa:
[]
= { = "0.1.3", = false }
Tez boshlash
use *;
use BirthDate;
async
Konfiguratsiya
To'g'ridan-to'g'ri kod orqali
use Duration;
use Config;
let config = new?
.with_timeout // HTTP so'rov timeout
.with_connect_timeout // TCP/TLS ulanish timeout
.with_user_agent // Custom User-Agent
.with_proxy?; // Korporativ proxy
Environment o'zgaruvchilari orqali
.env fayl yarating yoki environment'ni to'g'ridan-to'g'ri o'rnating:
MYID_BASE_URL=https://myid.uz
MYID_CLIENT_ID=your_client_id
MYID_CLIENT_SECRET=your_client_secret
# Ixtiyoriy
MYID_TIMEOUT_MS=30000
MYID_CONNECT_TIMEOUT_MS=5000
MYID_USER_AGENT=my-backend/1.0
MYID_PROXY_URL=http://proxy.corp.local:8080
use Config;
let config = from_env?; // MYID_ prefiksi
let config = from_env?; // APP_ prefiksi
Default qiymatlar
| Parametr | Default | O'zgartirish |
|---|---|---|
| HTTP timeout | 15 soniya | with_timeout() |
| Connection timeout | 2 soniya | with_connect_timeout() |
| User-Agent | myid-client-rust/0.1 |
with_user_agent() |
| Proxy | yo'q | with_proxy() |
Session yaratish usullari
MyID 3 xil identifikatsiya usulini qo'llab-quvvatlaydi:
PINFL orqali
use *;
use BirthDate;
let request = WithPinfl;
Passport orqali
use *;
use BirthDate;
let request = WithPassport;
REUID orqali (secondary flow)
use *;
let request = WithReuid;
Xatolarni boshqarish
Barcha xatolar MyIdError enum orqali qaytariladi:
| Variant | Sababi |
|---|---|
Config { message } |
Noto'g'ri URL, bo'sh credentials, proxy xatosi |
Validation { message } |
PINFL, passport, telefon raqam format xatosi |
Http(_) |
Tarmoq xatosi — timeout, DNS, TLS |
Api { status, message } |
Server 4xx/5xx javobi — 401, 403, 429, 500 |
Internal { message } |
SDK ichki xatosi (odatda yuz bermaydi) |
use Config;
use MyIdError;
match new
API xatosini tekshirish:
use ;
async
Xavfsizlik
client_secretfaqat backend muhitida saqlang — frontend'ga bermangDebugoutput'da secret avtomatik<redacted>sifatida ko'rsatiladi- Production'da credential'larni environment variable orqali bering, kodni hardcode qilmang
use Config;
let config = new?;
let debug = format!;
assert!; // ✅ Secret yashirilgan
assert!; // ✅ Hech qachon ko'rinmaydi
Misollar ishga tushirish
# Config yaratish va xatolarni ko'rish
# Client va session misollari (.env fayl kerak)
# Tezkor ishga tushirish misoli
.env fayl namunasi:
MYID_BASE_URL=https://myid.uz
MYID_CLIENT_ID=your_id
MYID_CLIENT_SECRET=your_secret
Minimal Rust versiyasi (MSRV)
Rust 1.93.0 yoki undan yuqori talab qilinadi.
Litsenziya
Ushbu loyiha ikki litsenziya ostida tarqatiladi — o'zingizga qulayini tanlang: