
Język 🇵🇱 Polski
Przegląd
Implementacja
Kulisy
Z FastComments możliwe jest wywołanie punktu końcowego API za każdym razem, gdy komentarz zostanie dodany, zaktualizowany lub usunięty z naszego systemu.
Realizujemy to za pomocą asynchronicznych webhooków przez HTTP/HTTPS.
Czym są webhooki 
Webhook to mechanizm, lub integracja, pomiędzy dwoma systemami gdzie "producent" (FastComments) wyzwala zdarzenie które "konsument" (Ty) odbiera za pomocą wywołania API.
Obsługiwane zdarzenia i zasoby 
FastComments obsługuje webhooki tylko dla zasobu Comment.
Obsługujemy webhooki dla tworzenia komentarza, usuwania oraz aktualizacji.
Każde z nich jest w naszym systemie traktowane jako odrębne zdarzenie i w związku z tym ma inną semantykę i inną strukturę zdarzeń webhook.
Konfiguracja środowiska lokalnego 
Dla lokalnego rozwoju użyj narzędzia takiego jak ngrok.
Aby uprościć utrzymanie bezpieczeństwa systemu, lokalny rozwój stosuje taki sam proces jak konfiguracja i zabezpieczanie innych środowisk.
Krok 1: Dodaj "localhost" do domen w swoim koncie.
Dodaj "localhost" jako domenę tutaj.
Krok 2: Wybierz klucz API
Będziemy dodawać konfigurację webhooka dla Twojej domeny, więc potrzebny będzie klucz API. Możesz to zrobić tutaj.
Pod "Powiąż z domeną" - wybierz swoją domenę "localhost".
UWAGA: Alternatywnie możesz użyć jednego sekretu API dla całej aktywności testowej i środowisk staging. Po prostu dodaj sekret API dla "Wszystkie domeny", i nadaj mu nazwę, taką jak "test".
Upewnij się, że masz zdefiniowany sekret API dla swoich domen produkcyjnych. Zdarzenia dla wszystkich pozostałych domen będą korzystać z sekretu wildcard (testowego).
Krok 3: Dodaj swój webhook
Podczas uruchomienia ngrok lub podobnego narzędzia ustaw wartość dla "localhost" tutaj.
Po kliknięciu Send Test Payload wyślemy dwa testowe zdarzenia, aby sprawdzić, czy weryfikujesz klucz API.
Gdy zostanie zweryfikowany, kliknij Save.
Krok 4: Dodaj komentarz
Teraz możesz dodawać, edytować lub usuwać komentarze i powinieneś zobaczyć, że będziemy wywoływać Twoją maszynę deweloperską lokalnie z tymi zdarzeniami, używając testowego klucza API. Może wystąpić opóźnienie do 30 sekund zanim zdarzenia dotrą do Twojej maszyny.
Konfiguracja 
Wykonaj te same kroki dla localhost, co dla środowiska produkcyjnego. Upewnij się, że masz skonfigurowane domeny produkcyjne i API Secrets.
Najpierw przejdź do Administracja webhookami. Jest to dostępne przez Zarządzaj danymi -> Webhooki.
The configuration page appears as follows:
Na tej stronie możesz określić endpoints dla każdego typu zdarzenia komentarza.
Dla każdego typu zdarzenia kliknij Send Test Payload, aby upewnić się, że integracja została poprawnie skonfigurowana. Zobacz następną sekcję "Testowanie" po szczegóły.
Testowanie 
W panelu administracyjnym Webhooks znajdują się przyciski Send Test Payload dla każdego typu zdarzenia (Utworzenie, Aktualizacja, Usunięcie). Zdarzenia Utworzenia i Aktualizacji wysyłają przykładowy obiekt WebhookComment, natomiast testowanie Usunięcia wyśle przykładową treść żądania zawierającą tylko identyfikator.
Weryfikacja treści żądań
Podczas testowania integracji webhooków upewnij się, że przychodzące żądania zawierają następujące nagłówki:
token- Twój sekret APIX-FastComments-Timestamp- Znacznik czasu Unix (w sekundach)X-FastComments-Signature- Sygnatura HMAC-SHA256
Użyj weryfikacji sygnatury HMAC, aby upewnić się, że treści żądań są autentyczne.
Narzędzia testowe
Możesz użyć narzędzi takich jak webhook.site lub ngrok, aby przejrzeć przychodzące dane webhooków podczas tworzenia.
Typy zdarzeń
- Zdarzenie utworzenia: Wywoływane, gdy nowy komentarz zostanie utworzony. Domyślna metoda: PUT
- Zdarzenie aktualizacji: Wywoływane, gdy komentarz jest edytowany. Domyślna metoda: PUT
- Zdarzenie usunięcia: Wywoływane, gdy komentarz zostanie usunięty. Domyślna metoda: DELETE
Każde zdarzenie zawiera pełne dane komentarza w treści żądania (zobacz Struktury danych dla formatu danych).
Struktury danych 
Jedyną strukturą wysyłaną przez webhooki jest obiekt WebhookComment, przedstawiony poniżej w TypeScript.
Struktura obiektu WebhookComment
Struktura zdarzenia "create"
Ciało żądania zdarzenia "create" jest obiektem WebhookComment.
Struktura zdarzenia "update"
Ciało żądania zdarzenia "update" jest obiektem WebhookComment.
Struktura zdarzenia "delete"
Ciało żądania zdarzenia "delete" jest obiektem WebhookComment.
Zmiana od 14 listopada 2023
Wcześniej ciało żądania zdarzenia "delete" zawierało tylko identyfikator komentarza. Teraz zawiera pełny komentarz w momencie usunięcia.
Run 
Gdy użytkownicy są oznaczani w komentarzu, informacje są przechowywane w liście o nazwie mentions. Każdy obiekt w tej liście ma następującą strukturę.
Run 
Metody HTTP
Możesz skonfigurować metodę HTTP dla każdego typu zdarzenia webhook w panelu administracyjnym:
- Create Event: POST lub PUT (domyślnie: PUT)
- Update Event: POST lub PUT (domyślnie: PUT)
- Delete Event: DELETE, POST lub PUT (domyślnie: DELETE)
Ponieważ wszystkie żądania zawierają ID, operacje Create i Update są domyślnie idempotentne (PUT). Powtórzenie tego samego żądania Create lub Update nie powinno tworzyć zduplikowanych obiektów po Twojej stronie.
Nagłówki żądań
Każde żądanie webhook zawiera następujące nagłówki:
| Nagłówek | Opis |
|---|---|
Content-Type |
application/json |
token |
Twój sekret API |
X-FastComments-Timestamp |
Znacznik czasu Unix (sekundy) w momencie podpisania żądania |
X-FastComments-Signature |
Podpis HMAC-SHA256 (sha256=<hex>) |
Zobacz Security & API Tokens aby uzyskać informacje o weryfikacji podpisu HMAC.
Bezpieczeństwo i tokeny API 
FastComments webhook requests include multiple authentication mechanisms for security.
Wysyłane nagłówki
| Nagłówek | Opis |
|---|---|
token |
Twój API Secret (w celu zachowania zgodności wstecznej) |
X-FastComments-Timestamp |
Znacznik czasu Unix (sekundy), kiedy żądanie zostało podpisane |
X-FastComments-Signature |
Podpis HMAC-SHA256 ładunku |
Weryfikacja podpisu HMAC (zalecane)
Zdecydowanie zalecamy weryfikację podpisu HMAC, aby upewnić się, że ładunki webhooków są autentyczne i nie zostały zmienione.
Format podpisu: sha256=<hex-encoded-signature>
Jak obliczany jest podpis:
- Połącz:
timestamp + "." + JSON_payload_body - Oblicz HMAC-SHA256 używając swojego API Secret jako klucza
- Zakoduj wynik w hex
Przykład weryfikacji (Node.js)
const crypto = require('crypto');
function verifyWebhookSignature(req, apiSecret) {
const timestamp = req.headers['x-fastcomments-timestamp'];
const signature = req.headers['x-fastcomments-signature'];
if (!timestamp || !signature) {
return false;
}
// Zweryfikuj, że znacznik czasu jest aktualny (w ciągu 5 minut)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Zapobieganie atakom powtórzeniowym
}
// Verify signature
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Przykład weryfikacji (Python)
import hmac
import hashlib
import time
import json
def verify_webhook_signature(headers, body, api_secret):
timestamp = headers.get('X-FastComments-Timestamp')
signature = headers.get('X-FastComments-Signature')
if not timestamp or not signature:
return False
# Zweryfikuj, że znacznik czasu jest aktualny
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Zweryfikuj podpis
payload = json.dumps(body, separators=(',', ':'))
message = f"{timestamp}.{payload}"
expected = hmac.new(
api_secret.encode(),
message.encode(),
hashlib.sha256
).hexdigest()
return signature == f"sha256={expected}"
Przykład weryfikacji (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Zweryfikuj, że znacznik czasu jest aktualny (w ciągu 5 minut)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// Zweryfikuj podpis
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Starsze uwierzytelnianie
Nagłówek token zawierający Twój API Secret wciąż jest wysyłany dla zachowania zgodności wstecznej. Jednak zalecamy przejście na weryfikację HMAC dla lepszego bezpieczeństwa, ponieważ chroni ona przed atakami powtórzeniowymi.
Jak to działa i obsługa ponownych prób 
Wszystkie zmiany obiektu Comment w systemie wywołują zdarzenie, które trafia do kolejki.
Początkowe zdarzenie webhook jest zwykle wysyłane w ciągu sześciu sekund od wystąpienia źródła zdarzenia.
Możesz monitorować tę kolejkę w panelu administracyjnym Webhooks na wypadek, gdyby Twoje API przestało działać.
Jeśli żądanie do Twojego API się nie powiedzie, ponownie umieścimy je w kolejce zgodnie z harmonogramem.
Ten harmonogram to 1 Minute * the retry count. Jeśli wywołanie zakończy się niepowodzeniem raz, spróbuje ponownie za
minutę. Jeśli nie powiedzie się dwa razy, poczeka wtedy dwie minuty, i tak dalej. Dzięki temu
nie przeciążymy Twojego API, jeśli przestaje działać z powodów związanych z obciążeniem.
Webhooks można anulować z strony logów.
Podsumowanie
To kończy naszą dokumentację Webhooks.
Mamy nadzieję, że integracja FastComments Webhook jest łatwa do zrozumienia i szybka do skonfigurowania.
Jeśli uważasz, że zidentyfikowałeś jakiekolwiek luki w naszej dokumentacji, daj nam znać poniżej.