Axum ile Rust'ta yüksek performanslı webhook doğrulaması. Rust uygulamanıza dakikalar içinde ziyaretçi tanımlama, bot tespiti ve smart signals ekleyin.
Tercih ettiğiniz paket yöneticisiyle SDK'yı projenize ekleyin.
npm install axumyarn add axumpnpm add axumMinimal kurulumla çalışmaya başlayın.
use axum::{body::Bytes, http::HeaderMap, routing::post, Router};async fn webhook(headers: HeaderMap, body: Bytes) -> &'static str { // verify headers["x-tracio-signature"] against body, then act println!("{}", String::from_utf8_lossy(&body)); "OK"}#[tokio::main]async fn main() { let app = Router::new().route("/webhook/tracio", post(webhook)); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); axum::serve(listener, app).await.unwrap();}Hata işleme, yükleme durumları ve gelişmiş yapılandırma içeren üretime hazır kalıplar.
use axum::{body::Bytes, http::{HeaderMap, StatusCode}, routing::post, Router};use hmac::{Hmac, Mac};use sha2::Sha256;use serde::Deserialize;type HmacSha256 = Hmac<Sha256>;#[derive(Deserialize)]struct Bot { result: String,}#[derive(Deserialize)]struct Event { #[serde(rename = "visitorId")] visitor_id: String, bot: Bot,}// Recompute the HMAC-SHA256 over "<t>.<rawBody>" and compare it.fn verify(body: &[u8], header: &str, secret: &[u8]) -> bool { let (mut t, mut v1) = ("", ""); for kv in header.split(',') { match kv.split_once('=') { Some(("t", val)) => t = val, Some(("v1", val)) => v1 = val, _ => {} } } let mut mac = HmacSha256::new_from_slice(secret).unwrap(); mac.update(t.as_bytes()); mac.update(b"."); mac.update(body); match hex::decode(v1) { Ok(sig) => mac.verify_slice(&sig).is_ok(), Err(_) => false, }}async fn webhook(headers: HeaderMap, body: Bytes) -> Result<&'static str, StatusCode> { let secret = std::env::var("TRACIO_WEBHOOK_SECRET").unwrap_or_default(); let sig = headers .get("x-tracio-signature") .and_then(|v| v.to_str().ok()) .unwrap_or(""); if !verify(&body, sig, secret.as_bytes()) { return Err(StatusCode::UNAUTHORIZED); } let event: Event = serde_json::from_slice(&body).map_err(|_| StatusCode::BAD_REQUEST)?; if event.bot.result == "bot" { println!("flagging bot visitor {}", event.visitor_id); } Ok("OK")}#[tokio::main]async fn main() { let app = Router::new().route("/webhook/tracio", post(webhook)); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); axum::serve(listener, app).await.unwrap();}SDK'yı başlatmak ve yapılandırmak için mevcut tüm seçenekler.
publicKeystringPanodaki genel anahtarınız — tarayıcıya göndermek güvenlidirendpointstringProxy üzerinden yönlendirilen dağıtımlar için özel uç nokta URL'si — açık bir URL, region'a göre önceliklidirregionstringVeri bölgesi: us veya eutimeoutMsnumberTüm getResult() çağrısı için milisaniye cinsinden zaman aşımılinkedIdstringOturum açmış kullanıcı için dahili hesap kimliğiniz; böylece aynı cihazı paylaşan ziyaretler ilişkilendirilebilirtagstringTanımlama isteğine eklenen serbest biçimli etiket, örn. checkout veya logindebugbooleanBetik yaşam döngüsünü ve ağ etkinliğini tarayıcı konsoluna kaydederscriptUrlstringAjan betiği URL'sini tamamen geçersiz kılar — kendi barındırma veya Subresource Integrity içinTam API referansı, webhook yapılandırması ve gelişmiş kılavuzlarla daha derine inin.
Tam API referansı, entegrasyon kılavuzları ve en iyi uygulamalar.
Gerçek zamanlı olay teslimi, yük şeması ve imza doğrulaması.
Her cihaz tanımlaması için gerçek zamanlı olay bildirimlerini yapılandırın.
Rust uygulamanıza 5 dakikadan kısa sürede cihaz parmak izi ekleyin.