Shortener-ul căruia îi poți citi sursa.
Măsori latența, ratele de eroare și timpul până la MTTR. Elido este shortener-ul căruia îi poți citi sursa - REST + gRPC, SDK-uri în patru limbaje (TypeScript, Go, Python, Ruby), spans OpenTelemetry la fiecare redirecționare și o cale de self-host sub licență Apache 2.0, pentru ziua în care decizi că SaaS nu mai e forma potrivită.
- REST + gRPC: alege suprafața preferată de service mesh-ul tău
- Spans OpenTelemetry la fiecare redirecționare, la fiecare apel API
- Șase SDK-uri: TypeScript, Go, Python, Ruby, PHP, .NET
- Self-host Apache 2.0 cu un Helm chart dintr-o singură comandă
curl -X POST https://api.elido.app/v1/links -H "Authorization: Bearer $ELIDO_API_KEY" -H "Idempotency-Key: ci-2026-05-08-build-4419" -d '{ "destination_url": "https://shop.example.com/launch", "slug": "q2-launch", "workspace_id": "ws_8f3c" }'
{ "id": "link_01HQ3X...", "short_url": "https://b.elido.me/q2-launch", "click_tracker": "https://api.elido.app/v1/links/link_01HQ3X/clicks", "expires_at": "2026-08-08T00:00:00Z", "created_at": "2026-05-08T11:24:01Z" }
Observabilitate - integrată din start, nu adăugată ulterior
Fiecare redirecționare emite un span OpenTelemetry. Fiecare span ajunge în colectorul tău.
Serviciul edge este instrumentat capăt-la-capăt cu OTel. Îndreaptă colectorul tău OTLP către nivelul de redirecționare și obții întregul waterfall - căutare în cache, evaluarea regulilor, răspunsul și publicarea asincronă a evenimentului de click - fără să scrii tu însuți nicio linie de instrumentare.
SDK-uri
Același apel canonic. Șase limbaje. Toate generate dintr-o singură specificație.
Fiecare SDK este generat din aceeași specificație OpenAPI 3.1. Un endpoint nou adăugat pe server? Rulezi generatorul, livrezi SDK-urile, gata. Niciun client întreținut manual care se abate de la API. Cheile de idempotență, reîncercările cu backoff exponențial și răspunsurile de eroare tipate apar consecvent în toate cele șase limbaje.
- OpenAPI 3.1 ca sursă unică de adevărSpecificație inclusă în repo. SDK-uri regenerate la fiecare lansare.
- Răspunsuri de eroare tipateLimitare de rată, validare, conflict - toate tipate, niciodată prinse prin șiruri de caractere.
- Chei de idempotențăBazate pe header pe fiecare endpoint de scriere, redate identic la reîncercare.
- Reîncercări integrateBackoff exponențial, cu Retry-After respectat pentru fiecare limbaj.
create-link.ts1import { Elido } from2 "@elido/sdk";34const elido = new Elido({5 apiKey: process.env.ELIDO_API_KEY!,6});78const link = await elido.links.create({9 destinationUrl: dest,10 slug: "q2-launch",11});
create-link.go1import "github.com/elido/sdk-go"23client := elido.NewClient(4 elido.WithAPIKey(key),5)67link, err := client.Links.Create(ctx,8 &elido.CreateLinkRequest{9 DestinationURL: dest,10 Slug: "q2-launch",11 })
create_link.py1from elido import Elido23elido = Elido(4 api_key=os.environ["ELIDO_API_KEY"],5)67link = elido.links.create(8 destination_url=dest,9 slug="q2-launch",10 idempotency_key=build_id,11)
Contract gRPC
Aceeași suprafață în protobuf - pentru cei nativi în service mesh.
Serviciul api-core servește atât REST, cât și gRPC din aceiași handleri. Dacă platforma ta vorbește proto nativ (Envoy, Istio, Linkerd, Connect-Go), sari peste nivelul JSON. Fișierele .proto sunt publicate; generezi clienți în orice limbaj suportat de buf sau protoc.
1syntax = "proto3";23package elido.api.v1;45option go_package = "github.com/elido/proto/api/v1;apiv1";67service LinkService {8 rpc Create(CreateLinkRequest) returns (Link);9 rpc Resolve(ResolveLinkRequest) returns (ResolveLinkResponse);10 rpc List(ListLinksRequest) returns (ListLinksResponse);11 rpc Delete(DeleteLinkRequest) returns (google.protobuf.Empty);12}1314message CreateLinkRequest {15 string workspace_id = 1;16 string destination_url = 2;17 optional string slug = 3;18 optional google.protobuf.Timestamp expires_at = 4;19 repeated KeyValue tags = 5;20}2122message Link {23 string id = 1;24 string short_url = 2;25 string destination_url = 3;26 google.protobuf.Timestamp created_at = 4;27}
Authenticate with workload identity via SPIFFE/SPIRE or your mesh's built-in mTLS. API keys still work for non-mesh callers.
One implementation in api-core. Connect-Go transcoding means the REST surface is generated, not separately maintained.
ResolveLinkResponse streams click events for hot links - useful for internal dashboards without webhook plumbing.
Ce primești din start
- REST + gRPC: alege suprafața preferată de service mesh-ul tău
- Spans OpenTelemetry la fiecare redirecționare, la fiecare apel API
- Șase SDK-uri: TypeScript, Go, Python, Ruby, PHP, .NET
- Self-host Apache 2.0 cu un Helm chart dintr-o singură comandă
- Firehose webhook cu semnare HMAC-SHA256
- Endpoint Prometheus /metrics pe fiecare serviciu
Ce livrează, de fapt, API-ul Elido
O specificație OpenAPI și un token Bearer sunt un standard minim. Funcționalitățile de mai jos sunt cele care deosebesc un shortener pe care poți construi de unul cu care te vei lupta la 2 dimineața.
OpenAPI 3.1 cu 44 de endpoint-uri documentate - nicio suprafață nedocumentată
Fiecare endpoint din producție este descris în specificația OpenAPI 3.1. Fără rute ascunse, fără parametri nedocumentați pe care echipa de documentație i-a uitat. Specificația este inclusă în repo și versionată alături de API; modificările incompatibile respectă SemVer și primesc o fereastră de depreciere de cel puțin 90 de zile. Specificația se redă interactiv cu Scalar în documentație - lipești cheia API și testezi apeluri fără să ieși din browser. Trei SDK-uri generate automat (TypeScript, Python, Go) sunt generate din aceeași specificație la fiecare lansare, astfel încât nu se pot abate de la ce acceptă efectiv serverul. Metodele SDK-ului acceptă obiecte de cerere tipate și returnează obiecte de răspuns tipate; erorile sunt tipate, nu prinse prin șiruri de caractere. Cheile de idempotență sunt acceptate pe endpoint-urile de scriere - trimiți un header `Idempotency-Key`, iar răspunsul este redat identic la reîncercare, fără o creare duplicată.
Slug-uri deterministe, creare în masă și idempotență pentru pipeline-uri CI
POST /v1/workspaces/{ws}/links acceptă un câmp slug - primești slug-ul cerut sau o eroare de conflict cu ID-ul linkului existent, astfel încât pipeline-ul tău poate decide ce să facă. Crearea în masă (POST .../links/bulk) acceptă până la 100 de specificații de link per apel; răspunsul include un rezultat pentru fiecare rând de intrare, fie un link creat, fie o eroare, astfel încât eșecurile parțiale nu rămân ascunse. Ambele endpoint-uri acceptă chei de idempotență: retrimiți aceeași cerere cu aceeași cheie și primești același răspuns, fără rânduri duplicate. Acesta este tiparul pentru pipeline-urile CI/CD care emit linkuri scurte la fiecare deploy - determinist, sigur la reîncercare, consecvent între medii. Spațiul de nume al slug-urilor este per domeniu personalizat: același slug pe două domenii diferite înseamnă două linkuri diferite, nu un conflict.
Webhook-uri semnate HMAC, cu reîncercare automată și o coadă dead-letter
Fiecare eveniment de workspace (link creat, link accesat, link șters, intrare de audit, conversie atribuită) este disponibil ca webhook. Payload-urile sunt semnate cu HMAC-SHA256 folosind un secret rotativ; cheia de semnare este separată de cheia ta API, astfel încât rotirea uneia nu o invalidează pe cealaltă. Semantica livrării: cel puțin o dată (at-least-once), cu backoff exponențial (1s, 5s, 30s, 5m, 30m) și o fereastră de reîncercare configurabilă (implicit 24h). Evenimentele care epuizează reîncercările ajung într-o coadă dead-letter vizibilă în dashboard; poți relua de acolo. Pentru pipeline-uri de evenimente cu volum mare, firehose-ul compatibil Kafka ocolește complet livrarea HTTP - consumi evenimentele de click și jurnalele de audit direct din flux. Firehose-ul este o funcționalitate Business; livrarea prin webhook este disponibilă de la Pro în sus.
Server Model Context Protocol: instrumentele Elido în orice client MCP
Serverul Elido MCP open-source (licență MIT) expune endpoint-urile de linkuri, QR și analiză ca instrumente MCP tipate. Instalarea durează 30 de secunde: adaugi blocul de server în configurația Claude Desktop sau Cursor, setezi ELIDO_API_KEY, repornești. Catalogul de instrumente este descoperit automat de pe server - fără definiții de instrumente scrise manual, care se abat în timp. Scope-ul implicit este doar-citire; operațiunile de scriere necesită acordare explicită în setările workspace-ului. Fiecare apel de instrument apare în jurnalul de audit al workspace-ului, cu cheia apelantă și argumentele, astfel încât mutațiile conduse de agent sunt trasabile. Serverul vorbește stdio și SSE; trece prin aceleași limite de rată și coduri de eroare ca API-ul REST, inclusiv Retry-After la 429, astfel încât agentul tău se poate retrage curat. Sursa este pe GitHub; fork-urile obișnuite adaugă instrumente specifice workspace-ului sau îmbogățire de metadate, fără să fie nevoie ca Elido să le integreze upstream.
Helm chart (Apache 2.0): rulează nivelul de redirecționare în propriul tău VPC
Nivelul de redirecționare este singura componentă aflată pe calea critică (hot path) a fiecărei redirecționări. Este un binar unic, autonom - fără dependențe de runtime, în afara unui cache activ în memorie pentru nivelul L2. Helm chart-ul vine cu valori implicite sensate pentru autoscalarea orizontală a pod-urilor Kubernetes; scalează în funcție de CPU și de rata cererilor. Configurarea se face prin variabile de mediu; chart-ul include un values.yaml cu valori implicite sensate și o listă documentată a fiecărei variabile. Restul stack-ului (API și dashboard) poate rămâne pe SaaS-ul gestionat de Elido - nu trebuie să faci self-host la tot. Împărțirea obișnuită este: nivelul de redirecționare în self-host, în propriul tău VPC (latență mai mică pentru utilizatorii tăi, fără facturare de egress), dashboard și analiză pe cloud-ul Elido. Adu-ți propriul KMS pentru criptarea la repaus a cache-ului activ local, dacă poziția ta de securitate o cere. Comparativ cu Bitly (fără opțiune de self-host) și cu construirea unui shortener personalizat, opțiunea Helm chart îți oferă performanța de redirecționare și suprafața de API gestionată, fără să pornești de la zero.
Stack-ul cu care vei lucra
- SDK TypeScript
- SDK Python
- SDK Go
- Firehose webhook
- Specificație OpenAPI 3.1
- Helm chart pentru self-host
Ce vei măsura
- Latență redirecționare p50
- 5 ms la cache HIT
- SLA de disponibilitate API
- 99,95% pe Business
- RTO pentru self-host
- <1 oră
Echipe de inginerie care construiesc pe această platformă
Numele sunt deocamdată substituenți - numele reale ale clienților vor apărea aici pe măsură ce studiile de caz sunt publicate.
“Facem self-host la nivelul de redirecționare în propriul nostru cluster Kubernetes și folosim API-ul gestionat pentru restul. Latența p50 de redirecționare a scăzut de la 45ms la 6ms după ce am mutat serviciul edge în aceeași regiune cu utilizatorii noștri. Helm chart-ul a fost suficient de lizibil încât am lansat fără să consultăm suportul.”
“Serverul MCP a fost factorul decisiv. Echipa noastră lucrează în Cursor toată ziua; posibilitatea de a crea linkuri scurte etichetate pentru note de lansare direct din IDE, fără să ieșim din flux, este genul de câștig de DX care rămâne cu adevărat.”
“Cheile de idempotență la crearea în masă ne permit să emitem linkuri scurte în CI fără paranoia că reîncercările vor crea duplicate. SDK-ul Go tipat înseamnă că codul nostru din pipeline fie compilează, fie eșuează - fără cereri greșite silențioase la runtime.”
Elido API vs Bitly API vs construirea propriului shortener
Două opțiuni externe și alternativa de a-l construi singur. Onești despre unde API-ul Bitly este mai matur și unde un shortener personalizat câștigă la control.
| Capabilitate | Elido | Bitly API | Shortener personalizat |
|---|---|---|---|
| Format specificație API | OpenAPI 3.1, inclusă în repo | Documentație v4 personalizată (nu OpenAPI) | Ce scrii tu |
| SDK-uri proprii | TypeScript, Python, Go - generate din specificație | JavaScript, Python, Ruby, Java | Tu le construiești |
| Chei de idempotență la scriere | Da - bazate pe header, pe toate endpoint-urile de scriere | Nedocumentat | Tu o implementezi |
| Creare în masă | 100 per apel, eșec parțial per rând | Niciun endpoint nativ de creare în masă documentat | Schema ta, regulile tale |
| Livrare webhook | Cel puțin o dată, HMAC-SHA256, DLQ | Disponibil pe Enterprise | Tu o construiești |
| Server MCP | Open-source MIT, instalare în 30s | Indisponibil | Tu îl construiești |
| Self-host pentru nivelul de redirecționare | Helm chart Apache 2.0 | Indisponibil | Control total, cost total |
| Latență redirecționare p50 | 5 ms la cache HIT | Comparabil (servit din edge) | Depinde de infrastructura ta |
Întrebări de dezvoltatori
Unde este specificația OpenAPI?
La /docs/api-reference - Scalar o redă interactiv. YAML-ul brut este la /openapi.yaml. Este aceeași specificație din care sunt generate SDK-urile, nu un document întreținut separat.
Cum obțin un slug determinist în CI?
Trimiți `slug` în corpul cererii. Dacă slug-ul este deja folosit de un alt link, API-ul returnează 409 cu ID-ul linkului aflat în conflict. Dacă este folosit de același URL de destinație (recreare idempotentă), returnează linkul existent. Folosește header-ul Idempotency-Key pentru a face reîncercările sigure.
Ce include Helm chart-ul pentru self-host?
Binarul nivelului de redirecționare, configurarea cache-ului activ, setările HPA și un values.yaml cu toate variabilele de configurare documentate. Nu include API-ul sau dashboard-ul - acestea pot rămâne pe SaaS-ul Elido. Licență Apache 2.0; niciun CLA necesar pentru fork-uri.
Cum consum evenimentele de click fără polling?
Două opțiuni: webhook-uri (HTTPS, semnate HMAC, cel puțin o dată) sau firehose-ul compatibil Kafka (consumator direct, plan Business). Webhook-urile sunt suficiente pentru audit și alertare; firehose-ul este calea potrivită pentru pipeline-uri de evenimente cu volum mare, unde contează overhead-ul livrării HTTP per eveniment.
Care este limita de rată?
100 cereri/sec susținute, 200 în burst per cheie API, cu un 429 și header Retry-After. Endpoint-urile de scriere se contorizează separat de cele de citire. Serverul MCP transmite 429 ca eroare de instrument; SDK-urile expun valoarea Retry-After ca un câmp tipat în eroarea de limitare a ratei.
Pot folosi serverul MCP în automatizări de producție, nu doar interactiv?
Da - serverul MCP este un proces standard stdio sau SSE. Îl poți invoca dintr-un script, un pas CI sau un pipeline de agent. Doar-citire în mod implicit; scope-ul de scriere necesită o setare explicită la nivel de workspace. Fiecare apel este auditat.
Ce politică de modificări incompatibile folosiți?
SemVer pe prefixul versiunii API (/v1/, /v2/). Modificările incompatibile primesc o fereastră de depreciere de 90 de zile, cu ambele versiuni active simultan. Adăugările compatibile (câmpuri noi, endpoint-uri noi) se fac fără o creștere de versiune. Changelog-ul de la /changelog documentează fiecare modificare, împreună cu endpoint-ul afectat.
Există un mod de dezvoltare locală, fără să apelezi API-ul real?
SDK-urile TypeScript și Python acceptă o suprascriere de baseUrl care indică spre propria ta instanță - util pentru cei care fac self-host. Nu există încă un server mock oficial; pentru testarea locală, tiparul este un workspace de test cu o cheie API separată, nu un mock. Este pe roadmap.
Lista de lectură pentru dezvoltatori
Specificație OpenAPI 3.1, șase SDK-uri proprii și ce oferă fiecare.
Evenimente semnate HMAC, politică de reîncercare, coadă dead-letter, firehose Kafka.
Motor de reguli la edge - util când logica ta de rutare nu ar trebui să stea în serviciul tău.
Ghiduri, referințe și note de arhitectură - scrise de echipa care livrează codul.
Specificație OpenAPI redată interactiv cu Scalar, toate cele 44 de endpoint-uri.
Slack, Zapier, Make, n8n și sursa fiecărui conector.
Nu ești sigur ce unghi ți se potrivește?
Majoritatea echipelor încep dintr-un singur unghi și cresc spre toate cele patru. Echipa noastră de vânzări poate trece prin stack-ul tău specific în 20 de minute.