Skracacze, którego kod źródłowy możesz przeczytać.
Mierzysz opóźnienia, wskaźniki błędów i czas do MTTR. Elido to skracacz, którego źródło możesz czytać.
- REST + gRPC: wybierz interfejs preferowany przez Twój service mesh
- Spany OpenTelemetry przy każdym przekierowaniu i każdym wywołaniu API
- Sześć SDK: TypeScript, Go, Python, Ruby, PHP, .NET
- Self-host Apache 2.0 z jednokomendowym wykresem Helm
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" }
Obserwowalność - wbudowana, nie doklejona
Każde przekierowanie emituje span OpenTelemetry. Każdy span trafia do Twojego kolektora.
Serwis krawędziowy jest instrumentowany od końca do końca za pomocą OTel. Wskaż kolektor OTLP na warstwę przekierowań i uzyskujesz pełny waterfall - wyszukiwanie w pamięci podręcznej, ewaluacja reguł, odpowiedź oraz asynchroniczna publikacja zdarzenia kliknięcia - bez pisania ani jednej linii instrumentacji.
SDK
To samo kanoniczne wywołanie. Sześć języków. Wszystkie generowane z jednej specyfikacji.
Każde SDK jest generowane z tej samej specyfikacji OpenAPI 3.1. Dodano nowy endpoint na serwerze? Uruchom generator, wyślij SDK - gotowe. Żadnego ręcznie utrzymywanego klienta, który dryfuje od API. Klucze idempotentności, ponowne próby z wykładniczym cofnięciem i typowane odpowiedzi błędów są udostępniane spójnie we wszystkich sześciu językach.
- OpenAPI 3.1 jako źródło prawdySpecyfikacja sprawdzana w repozytorium. SDK regenerowane przy każdym wydaniu.
- Typowane odpowiedzi błędówLimit szybkości, walidacja, konflikt - wszystkie typowane, nigdy catch jako string.
- Klucze idempotentnościOparte na nagłówkach przy każdym endpoincie zapisu, odtwarzane przy ponowieniu.
- Wbudowane ponowne próbyWykładnicze cofnięcie z respektowaniem Retry-After per język.
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)
Kontrakt gRPC
Ten sam interfejs w protobuf - dla natywnych użytkowników service mesh.
Nasze API obsługuje zarówno REST, jak i gRPC z tych samych handlerów. Jeśli Twoja platforma mówi natywnie w proto (Envoy, Istio, Linkerd, Connect-Go), pomiń warstwę JSON. Pliki .proto są opublikowane; generuj klientów w dowolnym języku obsługiwanym przez buf lub 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.
Co dostajesz od razu
- REST + gRPC: wybierz interfejs preferowany przez Twój service mesh
- Spany OpenTelemetry przy każdym przekierowaniu i każdym wywołaniu API
- Sześć SDK: TypeScript, Go, Python, Ruby, PHP, .NET
- Self-host Apache 2.0 z jednokomendowym wykresem Helm
- Firehose webhooków z podpisywaniem HMAC-SHA256
- Endpoint Prometheus /metrics w każdym serwisie
Co tak naprawdę oferuje API Elido
Specyfikacja OpenAPI i token Bearer to standard. Poniższe funkcje odróżniają skracacz, na którym można budować, od takiego, z którym będziesz walczyć o 2 rano.
OpenAPI 3.1 z 44 udokumentowanymi punktami końcowymi - brak niejawnych interfejsów
Każdy punkt końcowy w środowisku produkcyjnym jest opisany w specyfikacji OpenAPI 3.1. Brak ukrytych tras czy nieudokumentowanych parametrów, o których zapomniał zespół dokumentacji. Specyfikacja jest sprawdzana w repozytorium i wersjonowana wraz z API; zmiany przełamujące są zgodne z SemVer i mają co najmniej 90-dniowy okres przejściowy. Specyfikacja jest renderowana interaktywnie za pomocą Scalar w dokumentacji - wklej swój klucz API i testuj wywołania bez opuszczania przeglądarki. Trzy oficjalne SDK (TypeScript, Python, Go) są generowane z tej samej specyfikacji przy każdym wydaniu, więc nie mogą odbiegać od tego, co faktycznie akceptuje serwer. Metody SDK przyjmują typowane obiekty żądań i zwracają typowane obiekty odpowiedzi; błędy są typowane, a nie przechwytywane jako ciągi znaków. Klucze idempotencji są obsługiwane w punktach zapisu - przekaż nagłówek `Idempotency-Key`, a odpowiedź zostanie powtórzona przy ponownej próbie bez tworzenia duplikatu.
Deterministyczne slugi, masowe tworzenie i idempotencja dla potoków CI
POST /v1/workspaces/{ws}/links akceptuje pole slug - otrzymujesz taki slug, o jaki prosiłeś, lub błąd konfliktu z ID istniejącego linku, aby Twój potok mógł zdecydować, co zrobić. Masowe tworzenie (POST .../links/bulk) akceptuje do 100 specyfikacji linków na wywołanie; odpowiedź zawiera jeden wynik dla każdego wiersza wejściowego z utworzonym linkiem lub błędem, więc częściowe niepowodzenia nie są ukryte. Oba punkty końcowe akceptują klucze idempotencji: wyślij ponownie to samo żądanie z tym samym kluczem, a otrzymasz tę samą odpowiedź, bez duplikowania rekordów. To wzorzec dla potoków CI/CD, które generują krótkie linki podczas wdrożenia - deterministyczny, bezpieczny przy powtórzeniach i spójny między środowiskami. Przestrzeń nazw slugów jest definiowana dla każdej domeny niestandardowej: ten sam slug w dwóch różnych domenach to dwa różne linki, a nie konflikt.
Webhooki podpisane HMAC z automatycznymi ponowieniami i kolejką dead-letter
Każde zdarzenie w przestrzeni roboczej (utworzenie linku, kliknięcie, usunięcie, wpis w audycie, atrybucja konwersji) jest dostępne jako webhook. Dane są podpisane HMAC-SHA256 przy użyciu rotacyjnego sekretu; klucz podpisu jest oddzielony od klucza API, więc rotacja jednego nie unieważnia drugiego. Semantyka dostarczania: co najmniej raz (at-least-once), z wykładniczym czasem oczekiwania (1s, 5s, 30s, 5m, 30m) i konfigurowalnym oknem ponowień (domyślnie 24h). Zdarzenia, które wyczerpią limity ponowień, trafiają do kolejki dead-letter widocznej w panelu; możesz je stamtąd ponowić. Dla potoków zdarzeń o dużej objętości firehose zgodny z Kafką całkowicie pomija dostarczanie przez HTTP - konsumuj zdarzenia kliknięć i logi audytowe bezpośrednio ze strumienia. Firehose jest funkcją planu Business; dostarczanie webhooków jest dostępne w planie Pro i wyższych.
Serwer Model Context Protocol: narzędzia Elido w każdym kliencie MCP
Serwer Elido MCP o otwartym kodzie źródłowym (licencja MIT) udostępnia punkty końcowe linków, QR i analityki jako typowane narzędzia MCP. Instalacja trwa 30 sekund: dodaj blok serwera do konfiguracji Claude Desktop lub Cursor, ustaw ELIDO_API_KEY i zrestartuj. Katalog narzędzi jest automatycznie wykrywany z serwera - brak ręcznie pisanych definicji, które mogą stać się nieaktualne. Domyślnym zakresem jest tylko odczyt; operacje zapisu wymagają wyraźnej zgody w ustawieniach przestrzeni roboczej. Każde wywołanie narzędzia pojawia się w logu audytu wraz z kluczem wywołującym i argumentami, dzięki czemu zmiany wprowadzane przez agentów są łatwe do śledzenia. Serwer komunikuje się przez stdio i SSE; stosuje te same limity zapytań i kody błędów co API REST, w tym nagłówek Retry-After przy błędzie 429, aby Twój agent mógł płynnie zwolnić tempo. Kod źródłowy jest dostępny na GitHub; popularne forki dodają specyficzne dla przestrzeni roboczej narzędzia lub wzbogacanie metadanych bez konieczności wprowadzania zmian w głównym projekcie Elido.
Helm chart (Apache 2.0): uruchom warstwę przekierowań we własnym VPC
Warstwa przekierowań jest jedynym komponentem na ścieżce krytycznej każdego przekierowania. To pojedynczy samodzielny plik binarny - bez zależności uruchomieniowych poza pamięcią podręczną hot cache dla warstwy L2. Helm chart dostarczany jest z optymalnymi ustawieniami dla horyzontalnego skalowania podów w Kubernetes; skaluje się na podstawie zużycia procesora i liczby żądań. Konfiguracja odbywa się za pomocą zmiennych środowiskowych; arkusz zawiera plik values.yaml z rozsądnymi domyślnymi wartościami i dokumentacją każdej zmiennej. Reszta stosu (API i dashboard) może pozostać w zarządzanym SaaS Elido - nie musisz hostować wszystkiego samodzielnie. Typowy podział to: warstwa przekierowań hostowana samodzielnie w Twoim VPC (niższe opóźnienia dla użytkowników, brak opłat za transfer wychodzący), a panel i analityka w chmurze Elido. Użyj własnego KMS do szyfrowania lokalnego hot cache w spoczynku, jeśli wymagają tego Twoje standardy bezpieczeństwa. W porównaniu do Bitly (brak opcji self-host) i budowania własnego rozwiązania, opcja Helm chart daje wydajność przekierowań i zarządzaną powierzchnię API bez konieczności budowania wszystkiego od zera.
Stos, z którym pracujesz
- TypeScript SDK
- Python SDK
- Go SDK
- Strumień webhooków
- Specyfikacja OpenAPI 3.1
- Wykres Helm do samodzielnego hostingu
Co będziesz mierzyć
- Opóźnienie przekierowania p50
- 5 ms trafienie w pamięć podręczną
- Uptime API SLA
- 99.95% na poziomie Business
- Samodzielny hosting RTO
- <1 godzina
Zespoły inżynierskie budujące na naszym rozwiązaniu
Nazwy są tymczasowe - prawdziwe nazwy klientów pojawią się wraz z publikacją studiów przypadku.
“Samodzielnie hostujemy warstwę przekierowań w naszym klastrze Kubernetes, a do wszystkiego innego używamy zarządzanego API. Opóźnienie przekierowania p50 spadło z 45ms do 6ms po przeniesieniu usługi edge do tego samego regionu, w którym są nasi użytkownicy. Helm chart był na tyle czytelny, że wdrożyliśmy go bez kontaktu ze wsparciem.”
“Serwer MCP był decydującym czynnikiem. Nasz zespół pracuje w Cursor przez cały dzień; możliwość tworzenia otagowanych krótkich linków do notatek z wydania bezpośrednio w IDE, bez przerywania pracy, to rodzaj wygranej w obszarze DX, która naprawdę robi różnicę.”
“Klucze idempotencji przy masowym tworzeniu pozwalają nam generować krótkie linki w CI bez obaw o duplikaty przy ponownych próbach. Typowane SDK Go sprawia, że nasz kod potoku albo się kompiluje, albo nie - brak cichych błędów żądań w czasie rzeczywistym.”
API Elido vs API Bitly vs budowa własnego skracacza
Dwie opcje zewnętrzne i alternatywa w postaci własnego rozwiązania. Szczerze o tym, gdzie API Bitly jest bardziej dojrzałe, a gdzie własny skracacz wygrywa pod względem kontroli.
| Możliwość | Elido | API Bitly | Własny skracacz |
|---|---|---|---|
| Format specyfikacji API | OpenAPI 3.1, sprawdzane w repo | Niestandardowa dokumentacja v4 (nie OpenAPI) | Taki, jaki napiszesz |
| Oficjalne SDK | TypeScript, Python, Go - generowane ze specyfikacji | JavaScript, Python, Ruby i Java | Musisz je zbudować |
| Klucze idempotencji przy zapisie | Tak - oparte na nagłówkach, wszystkie punkty zapisu | Brak dokumentacji | Musisz to zaimplementować |
| Masowe tworzenie | 100 na wywołanie, częściowe błędy dla wierszy | Brak udokumentowanego natywnego punktu masowego | Twój schemat, Twoje zasady |
| Dostarczanie webhooków | Co najmniej raz, HMAC-SHA256, DLQ | Dostępne w planie Enterprise | Musisz to zbudować |
| Serwer MCP | Open-source MIT, 30s instalacji | Niedostępne | Musisz to zbudować |
| Self-host warstwy przekierowań | Helm chart na licencji Apache 2.0 | Niedostępne | Pełna kontrola, pełny koszt |
| Opóźnienie przekierowania p50 | 5 ms (trafienie w cache) | Porównywalne (obsługiwane na brzegu sieci) | Zależy od Twojej infrastruktury |
Pytania programistów
Gdzie znajdę specyfikację OpenAPI?
Pod adresem /docs/api-reference - Scalar renderuje ją interaktywnie. Surowy plik YAML znajduje się pod /openapi.yaml. To ta sama specyfikacja, z której generowane są SDK, a nie oddzielnie utrzymywany dokument.
Jak uzyskać deterministyczny slug w CI?
Przekaż pole `slug` w treści żądania. Jeśli slug jest już zajęty przez inny link, API zwróci błąd 409 z ID kolidującego linku. Jeśli jest zajęty przez ten sam docelowy URL (idempotentne ponowne utworzenie), zwróci istniejący link. Użyj nagłówka Idempotency-Key, aby powtórzenia były bezpieczne.
Co zawiera Helm chart do samodzielnego hostowania?
Plik binarny warstwy przekierowań, konfigurację hot cache, ustawienia HPA oraz plik values.yaml z udokumentowanymi wszystkimi zmiennymi konfiguracyjnymi. Nie zawiera API ani dashboardu - te mogą pozostać w SaaS Elido. Licencja Apache 2.0; brak wymogu CLA dla forków.
Jak konsumować zdarzenia kliknięć bez odpytywania (polling)?
Dwie opcje: webhooki (HTTPS, podpisane HMAC, dostarczanie co najmniej raz) lub firehose zgodny z Kafką (bezpośredni konsument, plan Business). Webhooki są odpowiednie dla audytu i alertów; firehose to właściwa droga dla potoków danych o dużej objętości, gdzie narzut HTTP na każde zdarzenie ma znaczenie.
Jakie są limity zapytań (rate limits)?
Stałe 100 zap./sek., 200 w piku na klucz API, z błędem 429 i nagłówkiem Retry-After. Punkty końcowe zapisu są liczone oddzielnie od odczytów. Serwer MCP przekazuje błąd 429 jako błąd narzędzia; SDK udostępniają wartość Retry-After jako typowane pole w błędzie limitu zapytań.
Czy mogę używać serwera MCP w automatyzacji produkcyjnej, a nie tylko interaktywnie?
Tak - serwer MCP to standardowy proces stdio lub SSE. Możesz go wywołać ze skryptu, kroku CI lub potoku agenta. Domyślnie tylko do odczytu; zakres zapisu wymaga wyraźnego ustawienia w przestrzeni roboczej. Każde wywołanie podlega audytowi.
Jaką politykę wprowadzania zmian przełamujących stosujecie?
Używamy SemVer dla prefiksu wersji API (/v1/, /v2/). Zmiany przełamujące mają 90-dniowy okres przejściowy, w którym obie wersje są dostępne jednocześnie. Nieprzełamujące dodatki (nowe pola, nowe punkty końcowe) pojawiają się bez zmiany wersji. Changelog pod adresem /changelog dokumentuje każdą zmianę wraz z dotkniętym punktem końcowym.
Czy istnieje lokalny tryb programistyczny bez uderzania w prawdziwe API?
SDK TypeScript i Python akceptują nadpisanie baseUrl wskazujące na własną instancję - przydatne dla osób korzystających z self-host. Nie mamy jeszcze oficjalnego serwera mocków; dla testów lokalnych zalecanym wzorcem jest testowa przestrzeń robocza z oddzielnym kluczem API. Mamy to w planach rozwoju.
Lista lektur dla dewelopera
Specyfikacja OpenAPI 3.1, sześć oficjalnych SDK i co każde z nich oferuje.
Zdarzenia podpisane HMAC, polityka ponownych prób, kolejka martwych wiadomości, firehose Kafka.
Silnik reguł na krawędzi - przydatny, gdy logika routingu nie należy do Twojego serwisu.
Przewodniki, referencje i notatki architektoniczne - napisane przez zespół, który dostarcza kod.
Interaktywna specyfikacja OpenAPI renderowana przez Scalar, wszystkie 44 endpointy.
Slack, Zapier, Make, n8n i źródło każdego konektora.
Nie wiesz, która perspektywa pasuje?
Większość zespołów zaczyna od jednej, a potem rozszerza się na wszystkie cztery. Nasz zespół sprzedaży może omówić Twój konkretny stos w 20 minut.