CodeWorlds
Powrót do kolekcji
Przewodnik16 min czytaniaZespół CodeWorlds

Hookdeck, brama zdarzeń dla webhooków

Hookdeck kolejkuje webhooki, ponawia dostarczenie i przekierowuje je na localhost. CLI 2.5.0 żyje, SDK stoi na 0.4.0 z 2024 roku. Cennik i limity.

Hookdeck, brama zdarzeń dla webhooków

Hookdeck to hostowana brama zdarzeń: przyjmuje webhooki od dostawców, kolejkuje je, ponawia dostarczenie według reguł i przechowuje ładunek każdego żądania do wglądu. Usługa i narzędzie wiersza polecenia są rozwijane aktywnie, ale oficjalne biblioteki dla języków stoją od dwóch lat, więc zalecana droga integracji prowadzi dziś przez zwykłe wywołania HTTP.

Co Hookdeck daje ponad własny endpoint

Odbieranie webhooków wygląda na jeden kontroler z jednym POST. Problemy zaczynają się później i wszystkie są tego samego rodzaju: dostawca zdarzeń nie interesuje się tym, w jakim stanie jest Twoja aplikacja.

Pierwszy to powtórzenia. Stripe, Shopify czy GitHub wyślą to samo zdarzenie ponownie, jeśli nie odpowiesz w ich oknie czasowym, a Twoja odpowiedź może się spóźnić z powodu zupełnie niezwiązanej migracji bazy. Drugi to kolejność: zdarzenia order.updated potrafią dotrzeć przed order.created, bo poszły przez inne ścieżki sieciowe. Trzeci to nagły ruch. Kampania sprzedażowa generuje tysiąc webhooków w minutę, Twój serwer obsługuje sto na minutę, a dostawca po serii błędów wyłącza endpoint. Czwarty to weryfikacja podpisu, którą trzeba napisać osobno dla każdego dostawcy, każdy z innym nagłówkiem i innym sposobem liczenia skrótu.

Hookdeck wstawia się pomiędzy dostawcę a Twoje API. Przyjmuje żądanie i natychmiast odpowiada dostawcy, więc ten nigdy nie widzi Twojej awarii. Zdarzenie ląduje w kolejce i jest dostarczane do celu z limitem tempa, który sam ustawiasz. Jeśli cel nie odpowie w ciągu 60 sekund, zwróci kod spoza zakresu 2xx albo będzie nieosiągalny, uruchamia się reguła ponawiania. Ładunek żądania zostaje zapisany na czas retencji, więc możesz go obejrzeć, odtworzyć albo wysłać ponownie po naprawie błędu.

Do tego dochodzą rzeczy, których własny endpoint zwykle nie ma: filtrowanie zdarzeń przed dostarczeniem, deduplikacja po wybranych polach ładunku, transformacje w JavaScripcie oraz przekierowanie ruchu produkcyjnego na localhost w czasie pracy nad kodem. Ostatnia funkcja bywa jedynym powodem, dla którego zespoły w ogóle zakładają konto.

Stan projektu: usługa żyje, biblioteki stoją

Rozbieżność między tempem rozwoju usługi a stanem bibliotek jest tutaj wyraźna i musisz ją znać przed wpięciem Hookdecka w produkt.

Narzędzie wiersza polecenia jest rozwijane. Pakiet npm hookdeck-cli ma wersję 2.5.0 z 13 sierpnia 2026 roku, poprzednia 2.4.0 wyszła 7 sierpnia, a znacznik beta wskazuje na 3.0.0-beta.1 opublikowaną 21 sierpnia 2026 roku. Repozytorium hookdeck/hookdeck-cli odpowiada kodem 200 i nie przekierowuje gdzie indziej. Sama usługa też działa: hookdeck.com odpowiada kodem 200, w stopce widnieje Hookdeck Technologies Inc. z rokiem 2026.

Biblioteka dla TypeScriptu to inna historia. Pakiet @hookdeck/sdk stoi na wersji 0.4.0 opublikowanej 21 sierpnia 2024 roku, czyli dokładnie dwa lata temu. To wersja poniżej jedynki, więc autorzy nie deklarują stabilności interfejsu, a mimo to nie było od tego czasu żadnego wydania. Repozytorium nazywa się hookdeck/hookdeck-typescript-sdk i istnieje, natomiast warianty nazwy hookdeck-sdk-typescript i hookdeck-python-sdk zwracają 404. Kod SDK wygenerował Fern, a zależności są przypięte co do wersji łatki: node-fetch 2.7.0, qs 6.11.2, form-data 4.0.0, js-base64 3.7.2, url-join 4.0.1. Dwuletnie przypięcie oznacza, że żadna poprawka bezpieczeństwa w tych paczkach do Ciebie nie dotrze bez ręcznego nadpisania.

Pakiet @hookdeck/vercel, czyli integracja dla platformy Vercel opisanej w tekście o Next.js, ma wersję 0.3.1 z 29 października 2024 roku i zależy od @hookdeck/sdk w zakresie ^0.4.0. Tutaj akurat nie ma konfliktu zakresów: opublikowana wersja SDK mieści się w zakresie żądanym przez integrację. Oba pakiety zamarły w tym samym okresie.

Klienta dla Pythona nie ma. Nazwy hookdeck, hookdeck-sdk, hookdeck-python i hookdeck-cli zwracają na PyPI kod 404. Dostawca nie tłumaczy tego wprost w osobnym ogłoszeniu, ale odpowiedź widać w dokumentacji: nawigacja nie ma sekcji z bibliotekami, przykłady weryfikacji podpisu dla Pythona używają modułów hmac, hashlib i base64 ze standardowej biblioteki, a referencja API zawiera zdanie o tym, że ze schematów OpenAPI można wygenerować SDK dla wybranego języka. Schemat jest publiczny pod adresem https://api.hookdeck.com/2025-07-01/openapi, waży około 470 kilobajtów i opisuje 89 ścieżek.

Dla porządku: ta sama firma utrzymuje drugi produkt, Outpost, do wysyłania webhooków, i tam biblioteki żyją. Pakiet @hookdeck/outpost-sdk ma wersję 1.5.0 z 24 lipca 2026 roku, a odpowiednik dla Pythona istnieje na PyPI. Istnieje też dostawca dla Terraform w repozytorium hookdeck/terraform-provider-hookdeck. Nie jest więc tak, że firma nie umie utrzymywać bibliotek. Zamrożony jest konkretnie klient Event Gateway dla TypeScriptu.

Wniosek praktyczny: dziś integrujesz się z Hookdeckiem przez REST i przez CLI, nie przez SDK. Jeśli i tak sięgniesz po @hookdeck/sdk, przypnij dokładną wersję, sprawdź jego zależności własnym audytem i licz się z tym, że nowe pola API mogą w nim nie istnieć.

Licencja i zawartość opublikowanych paczek

Licencję sprawdziłem z trzech źródeł osobno dla każdego pakietu, bo deklaracja w rejestrze i plik w repozytorium nie zawsze się pokrywają.

Dla hookdeck-cli wszystkie trzy źródła się zgadzają. Pole license w rejestrze npm ma wartość Apache-2.0, plik LICENSE w repozytorium zawiera pełny tekst Apache License 2.0, a rozpakowana paczka 2.5.0 również zawiera plik LICENSE z tym samym tekstem. Wariantów pisowni w rodzaju LICENSE.md czy COPYING w tym repozytorium nie ma, istnieje wyłącznie LICENSE. Paczka zawiera realny kod: opakowanie bin/hookdeck.js oraz katalog binaries z gotowymi plikami wykonywalnymi dla sześciu platform, w tym darwin-arm64, linux-amd64 i win32-amd64. Zależności czasu wykonania nie ma żadnych.

Dla @hookdeck/sdk jest rozjazd, choć łagodny. W metadanych npm wersji 0.4.0 pole license w ogóle nie istnieje, więc automat zbierający licencje zależności pokaże przy tym pakiecie pustkę albo słowo o nieznanej licencji. Rozpakowana paczka zawiera jednak plik LICENSE z tekstem Apache License 2.0, taki sam jak plik LICENSE w repozytorium. Treść zgadza się z tym, co deklaruje repozytorium, brakuje tylko pola w rejestrze. Kod w paczce jest, razem z katalogami api, core, serialization i webhooks oraz plikiem reference.md. Jeśli prowadzisz w firmie listę licencji zależności, ten pakiet trzeba uzupełnić ręcznie.

Pakiet @hookdeck/vercel deklaruje w rejestrze Apache-2.0. Pakiet @hookdeck/outpost-sdk powtarza wzorzec ze zgubionym polem: w metadanych npm licencji nie ma, choć kod pochodzi z repozytorium hookdeck/outpost.

Licencja otwarta obejmuje tu wyłącznie narzędzia klienckie. Sama brama zdarzeń jest usługą zamkniętą i hostowaną przez dostawcę, wersji do samodzielnego uruchomienia nie ma. Otwarty jest osobny produkt Outpost, który rozwiązuje odwrotny problem, czyli wysyłanie webhooków do Twoich klientów. Jeśli wymóg samodzielnego hostowania jest u Ciebie twardy, Event Gateway odpada niezależnie od reszty argumentów.

Narzędzie wiersza polecenia i praca na localhoście

To jest ta część, którą poznaje się najszybciej. CLI tworzy trwały adres URL dla źródła zdarzeń i przekazuje ruch na Twój port lokalny, bez zmiany konfiguracji u dostawcy przy każdym uruchomieniu.

Code
Bash
# instalacja przez npm, Homebrew albo Scoop
npm install hookdeck-cli -g

# logowanie, otwiera przeglądarkę; w terminalu bez przeglądarki dodaj --interactive
hookdeck login

# nasłuch na jednym źródle, ruch trafia na http://localhost:3000/webhooks/shopify
hookdeck listen 3000 shopify --path /webhooks/shopify

# nasłuch na wszystkich źródłach naraz, proste logi zamiast pełnego interfejsu
hookdeck listen 3000 '*' --output compact

# tylko zdarzenia pasujące do filtra po ciele żądania
hookdeck listen 3000 stripe --filter-body '{"type":"payment_intent.succeeded"}'

Drugi argument to alias źródła, można podać listę po przecinku albo '*'. Trzeci, opcjonalny, wybiera konkretne połączenie po nazwie, aliasie lub ścieżce, a jeśli takiego nie ma, tworzy nowe. Domyślny tryb interactive to pełnoekranowy interfejs z listą zdarzeń, w którym klawisz r ponawia zaznaczone zdarzenie, d pokazuje pełne żądanie i odpowiedź, a o otwiera je w panelu przeglądarkowym. Tryby compact i quiet przydają się, gdy proces działa w tle albo w potoku ciągłej integracji. Flaga --max-connections domyślnie ogranicza liczbę równoległych połączeń z lokalnym serwerem do 50.

Uwierzytelnienie na pojedyncze wywołanie załatwiają flagi --cli-key i --api-key. Pierwsza przyjmuje klucz przypisany do użytkownika i widzi wszystkie jego projekty, druga klucz przypisany do jednego projektu. Bez logowania CLI utworzy konto gościa, co jest wygodne, ale takie konto trudniej potem połączyć z właściwą organizacją.

CLI umie też zarządzać zasobami, nie tylko nasłuchiwać. Polecenia z grupy hookdeck gateway connection tworzą i aktualizują połączenia, hookdeck gateway transformation obsługuje transformacje, a hookdeck gateway mcp uruchamia serwer MCP, przez który agent w edytorze może obejrzeć zdarzenia bez wychodzenia do przeglądarki. Dostępny jest też obraz Dockera, przy którym trzeba pamiętać o adresie host.docker.internal zamiast localhost.

Reguły połączenia, filtry i weryfikacja podpisu

Połączenie łączy źródło z celem i nosi tablicę reguł. Reguły są pięciu typów: retry, filter, transform, delay i deduplicate. Poniższe wywołanie tworzy połączenie z regułą ponawiania i regułą deduplikacji.

Code
Bash
curl -X PUT "https://api.hookdeck.com/2025-07-01/connections" \
  -H "Authorization: Bearer $HOOKDECK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "shopify-orders",
    "source": { "name": "shopify" },
    "destination": {
      "name": "orders-api",
      "config": {
        "url": "https://api.example.com/webhooks/shopify",
        "rate_limit": 100,
        "rate_limit_period": "minute"
      }
    },
    "rules": [
      {
        "type": "retry",
        "strategy": "exponential",
        "interval": 300000,
        "count": 5,
        "response_status_codes": [">=500", "!501"]
      },
      {
        "type": "deduplicate",
        "window": 60000,
        "include_fields": ["body.id", "body.order.number"]
      }
    ]
  }'

Pole strategy przyjmuje linear albo exponential. Przy strategii liniowej i interwale 600000 milisekund ponowienia wypadają w dziesiątej, dwudziestej i trzydziestej minucie po awarii. Przy wykładniczej z tym samym interwałem wypadają w dziesiątej, dwudziestej i czterdziestej. Pole response_status_codes przyjmuje zakresy w rodzaju 500-599, porównania >=500 i wykluczenia !501, przy czym w razie sprzeczności liczy się ostatnie dopasowanie. Limit twardy to 50 automatycznych ponowień na zdarzenie, ręcznych możesz wywołać dowolnie wiele, co dokumentacja ponowień opisuje razem z obsługą nagłówka Retry-After. Okno deduplikacji mieści się między 1000 a 3600000 milisekund, a include_fields obsługuje notację kropkową i indeksy tablic, na przykład body.items[*].sku.

Filtry to osobna reguła i osobna składnia. Przyjmują JSON dopasowywany do headers, body, query albo path, z operatorami $gte, $gt, $lt, $lte, $eq, $neq, $in, $nin, $startsWith, $endsWith, $or, $and, $ref, $exist i $not.

Code
JSON
{
  "type": "filter",
  "body": {
    "$or": [
      { "type": { "$startsWith": "payment_intent." } },
      { "data": { "object": { "amount": { "$gte": 10000 } } } }
    ]
  }
}

Filtry projektowano pod ładunki w formacie JSON. Dla XML zadziałają tylko proste dopasowania tekstowe, a poprawna droga prowadzi przez transformację konwertującą ładunek do JSON przed filtrem. Żądanie odrzucone przez filtr nie generuje zdarzenia, więc nie jest liczone jak zdarzenie, tylko jak żądanie odrzucone, co ma znaczenie przy rachunku za usługę.

Po stronie Twojego API zostaje jedna rzecz: sprawdzenie, że żądanie przyszło z Hookdecka, a nie z internetu. Domyślny tryb HOOKDECK_SIGNATURE dokłada nagłówek x-hookdeck-signature z podpisem HMAC SHA-256 surowego ciała, zakodowanym w base64. Przy rotacji sekretu z opóźnieniem pojawia się dodatkowo x-hookdeck-signature-2 ze starym kluczem.

Code
JavaScript
import crypto from 'node:crypto'

export function isFromHookdeck(rawBody, headers) {
  const digest = crypto
    .createHmac('sha256', process.env.HOOKDECK_WEBHOOK_SECRET)
    .update(rawBody)
    .digest('base64')

  const primary = headers['x-hookdeck-signature']
  const secondary = headers['x-hookdeck-signature-2']

  return digest === primary || (Boolean(secondary) && digest === secondary)
}

Kluczowy szczegół: rawBody musi być dokładnie tym ciągiem bajtów, który przyszedł. Framework, który sparsuje JSON i zserializuje go z powrotem, zmieni kolejność kluczy albo białe znaki i podpis przestanie pasować. W trybie uwierzytelnienia celu można też wybrać BASIC_AUTH, API_KEY, BEARER_TOKEN, CUSTOM_SIGNATURE, AWS_SIGNATURE lub jeden z dwóch wariantów OAuth2, jeśli Twoje API i tak ma własny mechanizm.

Cennik i rachunek na sto tysięcy zdarzeń

Jednostką rozliczeniową jest zdarzenie, czyli wiadomość dostarczona do celu. Żądanie przychodzące i zdarzenie to dwie różne rzeczy: jedno żądanie może wygenerować zero, jedno albo wiele zdarzeń, zależnie od liczby połączeń i od filtrów. Ponowienia są w cenie zdarzenia, dostawca stwierdza to wprost w sekcji pytań na stronie cennika.

Plany na 22 sierpnia 2026 roku wyglądają tak: Developer za 0 dolarów, Team od 39 dolarów miesięcznie, Growth od 499 dolarów miesięcznie oraz Enterprise z ceną negocjowaną. We wszystkich trzech nienegocjowanych planach limit wliczonych zdarzeń jest ten sam i wynosi 10 000 miesięcznie, wliczonych żądań odrzuconych 100 000, a nadmiar żądań odrzuconych kosztuje 2,50 dolara za milion. Różnice siedzą gdzie indziej: retencja to 3 dni, 7 dni i 30 dni, liczba użytkowników to jeden i dalej bez limitu, a SLA na dostępność 99,999 procent i na opóźnienie 99,99 procent pojawia się dopiero w planie Growth. Dodatek ze stałymi adresami IP kosztuje 100 dolarów w każdym planie.

Rachunek za sto tysięcy zdarzeń miesięcznie na planie Team wymaga ostrożności, bo dostawca podaje trzy różne stawki w tym samym miejscu. Nagłówek kalkulatora mówi o cenie „tak niskiej jak 0,33 dolara za 100 tysięcy”. Statyczna treść kalkulatora przy suwaku ustawionym na 10 000 pokazuje „1,00 dolara za każde kolejne 100 tysięcy”. Sekcja pytań podaje natomiast przykład wprost: naliczanie jest kwantowane co 10 tysięcy, 10 001 zdarzeń kosztuje 0,30 dolara, a 20 001 zdarzeń 0,60 dolara. Ta trzecia stawka daje 3,00 dolara za 100 tysięcy, czyli dziewięciokrotność pierwszej. Kalkulator jest suwakiem renderowanym w przeglądarce, więc z surowego kodu strony da się odczytać wyłącznie stan domyślny i nie potrafię ustalić, przy jakim wolumenie zaczyna obowiązywać stawka 0,33.

Licząc według jedynej stawki podanej wprost w przykładzie: 100 000 zdarzeń minus 10 000 wliczonych daje 90 000 zdarzeń dodatkowych, czyli 9 bloków po 10 tysięcy, czyli 2,70 dolara. Razem z abonamentem wychodzi 41,70 dolara miesięcznie. Według stawki z kalkulatora byłoby to około 39,90 dolara, a według stawki z nagłówka około 39,30. Widełki są więc wąskie i przy tym wolumenie to koszt rzędu czterdziestu dolarów, ale rozbieżność trzeba potwierdzić u dostawcy przed podpisaniem umowy na większy ruch, bo przy dziesięciu milionach zdarzeń różnica między 0,33 a 3,00 za sto tysięcy to różnica między 33 a 300 dolarami samego zużycia.

Do tego dochodzi przepustowość. W cenie jest 5 zdarzeń na sekundę na każdy cel w projekcie, co przy równomiernym rozłożeniu daje 432 000 zdarzeń dziennie i przy stu tysiącach miesięcznie nie jest żadnym ograniczeniem. Ograniczeniem staje się przy skokach: nadmiar ponad pułap nie jest odrzucany, tylko kolejkowany, więc płacisz opóźnieniem, a nie utratą zdarzeń. Żądania przychodzące są przyjmowane zawsze.

Plan darmowy ma jeden zapis, który łatwo przeoczyć. Po przekroczeniu 10 000 zdarzeń zdarzenia nadal są przyjmowane, ale panel zostaje zablokowany do czasu zmiany planu albo nowego okresu rozliczeniowego, a przy rażącym przekroczeniu dostawca zastrzega sobie prawo do zaprzestania przetwarzania. Trzydniowa retencja na planie darmowym oznacza też, że po weekendzie nie odtworzysz zdarzeń z piątku.

Hookdeck a Inngest, Trigger.dev, Svix i Pipedream

Te nazwy pojawiają się w jednym zdaniu częściej, niż powinny, bo rozwiązują różne problemy.

NarzędzieRolaKierunek zdarzeńGdzie biegnie Twój kod
Hookdeck Event Gatewaybrama dla webhooków przychodzącychz zewnątrz do Twojego APIwyłącznie u Ciebie
Svixinfrastruktura wysyłki webhookówz Twojego API do klientówwyłącznie u Ciebie
Inngestkolejka zadań i przepływy sterowane zdarzeniamiwewnątrz Twojego systemufunkcje u Ciebie, sterowanie u dostawcy
Trigger.devdługo działające zadania w tlewewnątrz Twojego systemuzadania na infrastrukturze dostawcy
Pipedreamautomatyzacja z krokami i integracjamiz zewnątrz do zewnątrzkroki u dostawcy

Inngest i Trigger.dev to kolejki zadań. Punkt ciężkości leży u nich w tym, co dzieje się po odebraniu zdarzenia: kroki, wznawianie, opóźnienia, współbieżność. Hookdeck leży o jeden krok wcześniej i nie uruchamia Twojej logiki, tylko doprowadza do niej ruch. Te narzędzia nie wykluczają się: Hookdeck może przyjąć webhooka i przekazać go do endpointu, który wrzuca zadanie do Inngest.

Pipedream łączy odbiór zdarzenia z automatyzacją, podobnie jak opisany osobno Zapier, tylko z kodem zamiast klikania. Jeśli po odebraniu webhooka masz dopisać wiersz w arkuszu i wysłać wiadomość, Pipedream zrobi całość. Jeśli masz przekazać zdarzenie do własnego API z gwarancjami dostarczenia, Pipedream jest okrężną drogą.

Svix to bezpośredni konkurent, ale po drugiej stronie strzałki: buduje infrastrukturę do wysyłania webhooków Twoim klientom. Odpowiednikiem Svix w ofercie Hookdecka nie jest Event Gateway, tylko Outpost. Jeśli szukasz narzędzia do wysyłki, porównuj Svix z Outpostem, a nie z opisywaną tu bramą.

Typowe błędy

Pierwszy to sięganie po @hookdeck/sdk odruchowo, bo pakiet istnieje. Wersja 0.4.0 z sierpnia 2024 roku nie zna pól dodanych do API przez dwa lata, a przypięte zależności ciągną stary node-fetch. Zwykłe fetch z tokenem w nagłówku Authorization jest dziś krótsze i bardziej aktualne.

Drugi to parsowanie ciała przed weryfikacją podpisu. W Express oznacza to konieczność zachowania surowego ciała w polu rawBody, w Next.js sięgnięcie po await request.text() zamiast await request.json(). Podpis liczy się z bajtów, nie z obiektu.

Trzeci to traktowanie ponowień jak gwarancji, że zdarzenie zostanie przetworzone raz. Nie zostanie. Dedukplikacja w Hookdecku działa w oknie do godziny i po wybranych polach, a ponowienie po dwóch dniach dojdzie ponownie. Idempotencja po stronie odbiorcy, choćby przez unikalny indeks na identyfikatorze zdarzenia w PostgreSQL, zostaje Twoim zadaniem.

Czwarty to ustawienie reguły ponawiania na wykładniczą z dużym interwałem bez sprawdzenia retencji. Ponowienia rozłożone na dobę przy trzydniowej retencji planu darmowego dają wąskie okno na ręczną naprawę.

Piąty to wpięcie bramy tam, gdzie jej nie potrzeba. Przy kilkuset zdarzeniach dziennie i jednym dostawcy tabela w bazie, kolumna ze statusem i zadanie cykliczne ponawiające nieudane wiersze załatwiają sprawę za darmo i bez zewnętrznej zależności. Hookdeck zaczyna się opłacać, gdy dostawców jest kilku, ruch bywa skokowy, a ktoś musi móc obejrzeć ładunek sprzed trzech dni bez wchodzenia do logów serwera.

Szósty to niedoszacowanie przywiązania do dostawcy. Adresy źródeł należą do Hookdecka i są wpisane w konfiguracji każdego dostawcy zdarzeń. Wyjście oznacza zmianę adresu w Stripe, Shopify i wszystkich pozostałych panelach, a transformacje napisane w JavaScripcie i przechowywane po stronie usługi trzeba przepisać. Konfigurację da się wyeksportować przez API i utrzymywać w dostawcy dla Terraform, i to jest rozsądny sposób na ograniczenie kosztu wyjścia.

FAQ

Czy Hookdeck ma oficjalną bibliotekę dla Pythona?

Nie. Na PyPI nie istnieje pakiet pod nazwami hookdeck, hookdeck-sdk ani hookdeck-python. Dokumentacja pokazuje przykłady na hmac, hashlib i base64 ze standardowej biblioteki oraz wskazuje na możliwość wygenerowania klienta ze schematu OpenAPI dostępnego pod adresem API.

Czy warto używać @hookdeck/sdk w nowym projekcie?

W większości przypadków nie. Pakiet stoi na wersji 0.4.0 z 21 sierpnia 2024 roku, jest poniżej jedynki i ma przypięte dwuletnie zależności. Wywołania REST z tokenem w nagłówku Authorization: Bearer dają dostęp do pełnego, bieżącego API. Wyjątkiem jest funkcja verifyWebhookSignature z modułu webhooks, ale ona sprowadza się do kilku linii z node:crypto, które równie dobrze napiszesz sam.

Czy Hookdeck można uruchomić na własnym serwerze?

Event Gateway nie. To usługa zamknięta i hostowana przez dostawcę, a licencja Apache 2.0 obejmuje tylko narzędzie wiersza polecenia i biblioteki klienckie. Otwarty jest osobny produkt Outpost w repozytorium hookdeck/outpost, ale rozwiązuje on odwrotny problem, czyli wysyłanie webhooków do Twoich klientów.

Ile kosztuje sto tysięcy zdarzeń miesięcznie?

Na planie Team około 41,70 dolara, licząc 39 dolarów abonamentu plus 2,70 dolara za 90 tysięcy zdarzeń ponad limit według stawki 0,30 dolara za każde 10 tysięcy podanej w sekcji pytań. Dostawca podaje w tym samym miejscu dwie inne stawki, 1,00 i 0,33 dolara za 100 tysięcy, więc przy większym wolumenie potwierdź cenę u niego.

Czy Hookdeck gwarantuje kolejność zdarzeń?

Nie w sensie ścisłej kolejności globalnej. Kolejkowanie z limitem tempa na cel wygładza ruch, ale ponowienie nieudanego zdarzenia dojdzie po zdarzeniach późniejszych. Jeśli kolejność ma znaczenie, potrzebujesz w ładunku znacznika wersji albo czasu i odrzucania stanów starszych niż zapisany.

Kiedy własna kolejka wystarczy zamiast bramy?

Gdy masz jednego dostawcę, kilkaset zdarzeń dziennie i przewidywalny ruch. Tabela zdarzeń w bazie, kolumna ze statusem, indeks unikalny na identyfikatorze i zadanie cykliczne ponawiające nieudane wiersze to jeden wieczór pracy. Argument za bramą pojawia się przy wielu dostawcach, skokach ruchu i potrzebie oglądania ładunków przez osoby spoza zespołu.

Czytaj dalej

Używamy cookies, żeby zwiększyć Twoje doświadczenia na stronie