
Jezik 🇸🇮 Slovenščina
Pregled
Implementacija
V ozadju
Z FastComments je mogoče poklicati API endpoint vsakič, ko je komentar dodan, posodobljen ali odstranjen iz našega sistema.
To dosežemo z asinhronimi webhooks prek HTTP/HTTPS.
Kaj so webhooki 
Webhook je mehanizem, ali integracija, med dvema sistemoma, kjer "producent" (FastComments) sproži dogodek ki ga "potrošnik" (Vi) prejme prek API klica.
Podprti dogodki in viri 
FastComments podpira webhooks le za vir Comment.
Podpiramo webhooks za ustvarjanje komentarjev, odstranjevanje in posodobitve.
Vsak od teh se v našem sistemu šteje kot ločen dogodek in kot tak ima različne semantike in strukture za dogodke webhooka.
Nastavitev za lokalni razvoj 
Za lokalni razvoj uporabite orodje, kot je ngrok.
Da bi poenostavili ohranjanje varnosti sistema, lokalni razvoj sledi istemu postopku kot nastavitev in zavarovanje drugih okolij.
Korak 1: Dodajte "localhost" med domene v vašem računu.
Dodajte "localhost" kot domeno tukaj.
Korak 2: Izberite API ključ
Dodali bomo konfiguracijo webhooka za vašo domeno, zato bomo potrebovali API ključ. To lahko naredite tukaj.
Under "Associate with domain" - select your "localhost" domain.
NOTE: Alternatively, you can use one API Secret for all testing activity and staging environments. Simply add an API Secret for "All Domains", and give it a name like "test".
Poskrbite, da imate za svoje produkcijske domene definirano API skrivnost. Dogodki za vse ostale domene bodo uporabili nadomestno (testno) skrivnost.
Korak 3: Dodajte svoj webhook
Med izvajanjem ngrok ali podobnega orodja nastavite vrednost za "localhost" tukaj.
When clicking Send Test Payload, we will send two test events to check that you validate the API key.
Once it validates, hit Save.
Korak 4: Dodajte komentar
Zdaj lahko dodajate, urejate ali brišete komentarje in morali bi videti, da bo sistem klical vašo lokalno razvojno napravo z dogodki, pri čemer bo uporabljen vaš testni API ključ. Lahko pride do zamude do 30 sekund za prihod dogodkov do vaše naprave.
Nastavitev 
Sledite enakim korakom za localhost, kot bi za produkcijsko okolje. Poskrbite, da imate nastavljene produkcijske domene in API skrivnosti.
First, navigate to the Webhooks admin. This is accessible via Manage Data -> Webhooks.
The configuration page appears as follows:
In this page you can specify endpoints for each type of comment event.
For each type of event, be sure to click Send Test Payload to ensure you've set up your integration correctly. See the next section, "Testing", for details.
Testiranje 
V skrbniku Webhooks so gumbi Send Test Payload za vsako vrsto dogodka (Create, Update, Delete). Dogodka Create in Update pošljeta lažen objekt WebhookComment, medtem ko bo pri testiranju Delete poslano lažno telo zahteve z le ID-jem.
Preverjanje payloadov
Ko testirate integracijo webhooka, preverite, da dohodne zahteve vsebujejo naslednje glave:
token- Vaš API skrivni ključX-FastComments-Timestamp- Unix časovni žig (sekunde)X-FastComments-Signature- HMAC-SHA256 podpis
Uporabite preverjanje HMAC podpisa, da zagotovite pristnost payloadov.
Orodja za testiranje
Med razvojem lahko uporabite orodja, kot so webhook.site ali ngrok, za pregled dohodnih webhook payloadov.
Vrste dogodkov
- Create Event: Sproži se, ko je ustvarjen nov komentar. Privzeta metoda: PUT
- Update Event: Sproži se, ko je komentar urejen. Privzeta metoda: PUT
- Delete Event: Sproži se, ko je komentar izbrisan. Privzeta metoda: DELETE
Vsak dogodek vključuje celotne podatke komentarja v telesu zahteve (glejte Strukture podatkov za format payloada).
Strukture podatkov 
Edina struktura, poslana prek webhookov, je objekt WebhookComment, opisan v TypeScriptu spodaj.
Struktura objekta WebhookComment
Struktura dogodka "Create"
Telo zahteve za dogodek "create" je objekt WebhookComment.
Struktura dogodka "Update"
Telo zahteve za dogodek "update" je objekt WebhookComment.
Struktura dogodka "Delete"
Telo zahteve za dogodek "delete" je objekt WebhookComment.
Change as of Nov 14th 2023
Previously the "delete" event request body only contained the comment id. It now contains the full comment at the time of deletion.
Run 
Ko so uporabniki omenjeni v komentarju, se informacije shranijo v seznam, imenovan mentions. Vsak objekt v tem seznamu ima naslednjo strukturo.
Run 
HTTP metode
V nadzorni plošči lahko nastavite HTTP metodo za vsako vrsto dogodka webhook:
- Dogodek "Create": POST ali PUT (privzeto: PUT)
- Dogodek "Update": POST ali PUT (privzeto: PUT)
- Dogodek "Delete": DELETE, POST ali PUT (privzeto: DELETE)
Ker vsi zahtevki vsebujejo ID, sta operaciji Create in Update privzeto idempotentni (PUT). Ponavljanje iste zahteve Create ali Update ne bi smelo ustvariti podvojenih objektov na vaši strani.
Glave zahtev
Vsak webhook zahtevek vključuje naslednje glave:
| Header | Description |
|---|---|
Content-Type |
application/json |
token |
Vaš API skrivni ključ |
X-FastComments-Timestamp |
Unix časovni žig (v sekundah), ko je bil zahtevek podpisan |
X-FastComments-Signature |
HMAC-SHA256 podpis (sha256=<hex>) |
Oglejte si Varnost in API žetoni za informacije o preverjanju HMAC podpisa.
Varnost in API žetoni 
FastComments webhook zahtevki vsebujejo več mehanizmov za overjanje za zagotavljanje varnosti.
Poslane glave
| Glava | Opis |
|---|---|
token |
Vaš API skrivni ključ (za združljivost z starejšimi različicami) |
X-FastComments-Timestamp |
Unix časovni žig (v sekundah), ko je bil zahtevek podpisan |
X-FastComments-Signature |
HMAC-SHA256 podpis vsebine |
Preverjanje HMAC podpisa (priporočeno)
Močno priporočamo preverjanje HMAC podpisa, da zagotovite, da so podatki webhooka avtentični in da z njimi ni bilo manipulirano.
Oblika podpisa: sha256=<hex-encoded-signature>
Kako se izračuna podpis:
- Združi:
timestamp + "." + JSON_payload_body - Izračunajte HMAC-SHA256 z vašim API skrivnim ključem kot ključem
- Hex-kodirajte rezultat
Primer preverjanja (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;
}
// Preveri, ali je časovni žig svež (v 5 minutah)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Preprečevanje ponovitvenega napada
}
// Preveri podpis
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Primer preverjanja (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
# Preveri, ali je časovni žig svež
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Preveri 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}"
Primer preverjanja (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Preveri, ali je časovni žig svež (v 5 minutah)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// Preveri podpis
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Zastarelo overjanje
Glava token, ki vsebuje vaš API skrivni ključ, se še vedno pošilja zaradi združljivosti z starejšimi različicami. Vendar priporočamo prehod na preverjanje preko HMAC zaradi boljše varnosti, saj ščiti pred ponovitvenimi napadi.
Kako deluje in obravnavanje ponovnih poizkusov 
Vse spremembe objekta Comment v sistemu sprožijo dogodek, ki se znajde v vrsti.
Prvotni webhook dogodek je običajno poslan v šestih sekundah po nastanku vira dogodka.
To vrsto lahko spremljate v Webhooks admin v primeru, da vaš API preneha delovati.
Če zahteva do vašega API ne uspe, jo bomo ponovno uvrstili v vrsto po urniku.
Ta urnik je 1 Minute * the retry count. Če klic ne uspe enkrat, bo poskus ponovljen čez
minuto. Če ne uspe dvakrat, bo nato počakal dve minuti, in tako naprej. To je zato, da ne
preobremenimo vašega API, če imate izpade zaradi obremenitve.
Webhooks je mogoče preklicati na stran z dnevniki.
Za zaključek
To zaključuje našo dokumentacijo o Webhookih.
Upamo, da boste integracijo FastComments Webhookov našli enostavno za razumevanje in hitro za nastavitev.
Če menite, da ste odkrili kakšne vrzeli v naši dokumentaciji, nam sporočite spodaj.