
Γλώσσα 🇬🇷 Ελληνικά
Επισκόπηση
Υλοποίηση
Πίσω από τα Παρασκήνια
Με το FastComments είναι δυνατό να κληθεί ένα API endpoint κάθε φορά που ένα σχόλιο προστίθεται, ενημερώνεται ή αφαιρείται από το σύστημά μας.
Αυτό το επιτυγχάνουμε με ασύγχρονα webhooks μέσω HTTP/HTTPS.
Τι είναι τα Webhooks 
Ένα Webhook είναι ένας μηχανισμός, ή μια ενσωμάτωση, μεταξύ δύο συστημάτων όπου ο "παραγωγός" (FastComments) πυροδοτεί ένα συμβάν που ο "καταναλωτής" (Εσείς) καταναλώνει μέσω κλήσης API.
Υποστηριζόμενα Γεγονότα και Πόροι 
FastComments υποστηρίζει webhooks μόνο για το resource Comment.
Υποστηρίζουμε webhooks για τη δημιουργία σχολίου, την αφαίρεση και την ενημέρωση.
Κάθε ένα από αυτά θεωρείται ξεχωριστό συμβάν στο σύστημά μας και ως εκ τούτου έχουν διαφορετική σημασιολογία και δομή για τα συμβάντα webhook.
Ρύθμιση τοπικής ανάπτυξης 
Για τοπική ανάπτυξη, χρησιμοποιήστε ένα εργαλείο όπως το ngrok.
Προκειμένου να απλοποιηθεί η διατήρηση του συστήματος ασφαλούς, η τοπική ανάπτυξη ακολουθεί την ίδια διαδικασία με τη ρύθμιση και την ασφάλιση άλλων περιβαλλόντων.
Step 1: Add "localhost" to domains in your account.
Προσθέστε το "localhost" ως τομέα εδώ.
Step 2: Pick an API Key
Θα προσθέσουμε ρύθμιση webhook για τον τομέα σας, οπότε θα χρειαστούμε ένα κλειδί API. Μπορείτε να το κάνετε εδώ.
Under "Associate with domain" - select your "localhost" domain.
ΣΗΜΕΙΩΣΗ: Εναλλακτικά, μπορείτε να χρησιμοποιήσετε ένα API Secret για όλη τη δραστηριότητα δοκιμών και τα staging περιβάλλοντα. Απλά προσθέστε ένα API Secret για "All Domains", και δώστε του ένα όνομα όπως "test".
Βεβαιωθείτε ότι έχετε ορίσει ένα API Secret για τους παραγωγικούς τομείς σας. Τα συμβάντα για όλους τους άλλους τομείς θα χρησιμοποιήσουν το wildcard (testing) secret.
Step 3: Add Your Webhook
Ενώ τρέχετε το ngrok ή παρόμοιο εργαλείο, ορίστε την τιμή για το "localhost" εδώ.
When clicking Send Test Payload, we will send two test events to check that you validate the API key.
Μόλις επικυρωθεί, πατήστε Save.
Step 4: Add A Comment
Τώρα μπορείτε να προσθέσετε, να επεξεργαστείτε ή να διαγράψετε σχόλια και θα πρέπει να δείτε να καλούμε τον τοπικό σας υπολογιστή ανάπτυξης με τα συμβάντα, χρησιμοποιώντας το δοκιμαστικό κλειδί API σας. Υπάρχει πιθανότητα να υπάρξει καθυστέρηση έως και 30 δευτερολέπτων για να φτάσουν τα συμβάντα στη μηχανή σας.
Ρύθμιση 
Ακολουθήστε τα ίδια βήματα για το localhost όπως θα κάνατε στο production. Βεβαιωθείτε ότι έχετε ρυθμίσει production domains και API Secrets.
Πρώτα, μεταβείτε στο Διαχείριση Webhooks. Αυτό είναι προσβάσιμο μέσω Διαχείριση Δεδομένων -> Webhooks.
Η σελίδα διαμόρφωσης εμφανίζεται ως εξής:
Σε αυτή τη σελίδα μπορείτε να καθορίσετε endpoints για κάθε τύπο γεγονότος σχολίου.
Για κάθε τύπο γεγονότος, βεβαιωθείτε ότι κάνετε κλικ στο Send Test Payload για να διασφαλίσετε ότι έχετε ρυθμίσει σωστά την ενσωμάτωσή σας. Δείτε την επόμενη ενότητα, "Testing", για λεπτομέρειες.
Δοκιμές 
Στο διαχειριστικό των Webhooks υπάρχουν κουμπιά Send Test Payload για κάθε τύπο συμβάντος (Create, Update, Delete). Τα συμβάντα Create και Update στέλνουν ένα δοκιμαστικό αντικείμενο WebhookComment, ενώ η δοκιμή του Delete θα στείλει ένα δοκιμαστικό σώμα αιτήματος με μόνο ένα ID.
Επαλήθευση Payloads
Όταν δοκιμάζετε την ενσωμάτωση webhook σας, επαληθεύστε ότι τα εισερχόμενα αιτήματα περιλαμβάνουν τις ακόλουθες κεφαλίδες:
token- Το API Secret σαςX-FastComments-Timestamp- Χρονική σήμανση Unix (δευτερόλεπτα)X-FastComments-Signature- υπογραφή HMAC-SHA256
Χρησιμοποιήστε την επαλήθευση υπογραφής HMAC για να εξασφαλίσετε ότι τα payloads είναι γνήσια.
Εργαλεία δοκιμών
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως webhook.site ή ngrok για να επιθεωρήσετε τα εισερχόμενα webhook payloads κατά την ανάπτυξη.
Τύποι συμβάντων
- Create Event: Προκαλείται όταν δημιουργείται ένα νέο σχόλιο. Προεπιλεγμένη μέθοδος: PUT
- Update Event: Προκαλείται όταν ένα σχόλιο γίνει επεξεργασία. Προεπιλεγμένη μέθοδος: PUT
- Delete Event: Προκαλείται όταν διαγραφεί ένα σχόλιο. Προεπιλεγμένη μέθοδος: DELETE
Κάθε συμβάν περιλαμβάνει τα πλήρη δεδομένα του σχολίου στο σώμα του αιτήματος (δείτε τις Δομές δεδομένων για το μορφότυπο του payload).
Δομές δεδομένων 
Η μόνη δομή που αποστέλλεται μέσω webhooks είναι το αντικείμενο WebhookComment, που περιγράφεται σε TypeScript παρακάτω.
Δομή του αντικειμένου WebhookComment
Δομή του συμβάντος "create"
Το σώμα του αιτήματος για το συμβάν "create" είναι ένα αντικείμενο WebhookComment.
Δομή του συμβάντος "update"
Το σώμα του αιτήματος για το συμβάν "update" είναι ένα αντικείμενο WebhookComment.
Δομή του συμβάντος "delete"
Το σώμα του αιτήματος για το συμβάν "delete" είναι ένα αντικείμενο 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 
Όταν χρήστες επισημαίνονται σε ένα σχόλιο, οι πληροφορίες αποθηκεύονται σε μια λίστα που ονομάζεται mentions. Κάθε αντικείμενο σε αυτή τη λίστα
έχει την ακόλουθη δομή.
Run 
Μέθοδοι HTTP
Μπορείτε να ρυθμίσετε τη μέθοδο HTTP για κάθε τύπο συμβάντος webhook στον πίνακα διαχείρισης:
- Συμβάν Create: POST ή PUT (προεπιλογή: PUT)
- Συμβάν Update: POST ή PUT (προεπιλογή: PUT)
- Συμβάν Delete: DELETE, POST, ή PUT (προεπιλογή: DELETE)
Εφόσον όλα τα αιτήματα περιέχουν ένα ID, οι λειτουργίες Create και Update είναι idempotent από προεπιλογή (PUT). Η επανάληψη του ίδιου αιτήματος Create ή Update δεν θα πρέπει να δημιουργεί διπλότυπα αντικείμενα από την πλευρά σας.
Επικεφαλίδες Αιτήματος
Κάθε αίτημα webhook περιλαμβάνει τις ακόλουθες επικεφαλίδες:
| Header | Περιγραφή |
|---|---|
Content-Type |
application/json |
token |
Το API Secret σας |
X-FastComments-Timestamp |
Unix timestamp (δευτερόλεπτα) όταν υπογράφηκε το αίτημα |
X-FastComments-Signature |
Υπογραφή HMAC-SHA256 (sha256=<hex>) |
Δείτε Security & API Tokens για πληροφορίες σχετικά με την επαλήθευση της υπογραφής HMAC.
Ασφάλεια και Διακριτικά API 
Τα αιτήματα webhook του FastComments περιλαμβάνουν πολλούς μηχανισμούς πιστοποίησης για λόγους ασφάλειας.
Κεφαλίδες που αποστέλλονται
| Κεφαλίδα | Περιγραφή |
|---|---|
token |
Το API Secret σας (για συμβατότητα προς τα πίσω) |
X-FastComments-Timestamp |
Unix timestamp (δευτερόλεπτα) όταν υπογράφηκε το αίτημα |
X-FastComments-Signature |
HMAC-SHA256 υπογραφή του payload |
Επαλήθευση Υπογραφής HMAC (Συνιστάται)
Συνιστούμε θερμά την επαλήθευση της υπογραφής HMAC για να διασφαλίσετε ότι τα payloads των webhook είναι αυθεντικά και δεν έχουν παραποιηθεί.
Signature Format: sha256=<hex-encoded-signature>
Πώς υπολογίζεται η υπογραφή:
- Concatenate:
timestamp + "." + JSON_payload_body - Compute HMAC-SHA256 using your API Secret as the key
- Hex-encode the result
Παράδειγμα Επαλήθευσης (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;
}
// Επαλήθευση ότι το timestamp είναι πρόσφατο (εντός 5 λεπτών)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Πρόληψη επίθεσης επανάληψης
}
// Επαλήθευση υπογραφής
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Παράδειγμα Επαλήθευσης (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
# Επαλήθευση ότι το timestamp είναι πρόσφατο
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Επαλήθευση υπογραφής
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}"
Παράδειγμα Επαλήθευσης (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Επαλήθευση ότι το timestamp είναι πρόσφατο (εντός 5 λεπτών)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// Επαλήθευση υπογραφής
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Παλιός Τρόπος Πιστοποίησης
Η κεφαλίδα token που περιέχει το API Secret σας εξακολουθεί να αποστέλλεται για συμβατότητα προς τα πίσω. Ωστόσο, συνιστούμε τη μετάβαση στην επαλήθευση HMAC για βελτιωμένη ασφάλεια καθώς προστατεύει από επιθέσεις επανάληψης.
Πώς λειτουργεί και χειρισμός επαναπροσπαθειών 
Όλες οι αλλαγές στο αντικείμενο Comment στο σύστημα πυροδοτούν ένα συμβάν που καταλήγει σε μια ουρά.
Το αρχικό συμβάν webhook αποστέλλεται συνήθως εντός έξι δευτερολέπτων από τη στιγμή που συμβαίνει η πηγή του συμβάντος.
Μπορείτε να παρακολουθήσετε αυτήν την ουρά στη διαχείριση Webhooks σε περίπτωση που το API σας διακοπεί.
Εάν ένα αίτημα προς το API σας αποτύχει, θα το επανατοποθετήσουμε στην ουρά σύμφωνα με ένα χρονοδιάγραμμα.
Αυτό το χρονοδιάγραμμα είναι 1 Minute * the retry count. Εάν η κλήση αποτύχει μία φορά, θα προσπαθήσει ξανά σε
ένα λεπτό. Εάν αποτύχει δύο φορές, τότε θα περιμένει δύο λεπτά, και ούτω καθεξής. Αυτό γίνεται ώστε να
μην υπερφορτώσουμε το API σας σε περίπτωση που παρουσιάζει προβλήματα λόγω φόρτου.
Τα Webhooks μπορούν να ακυρωθούν από τη σελίδα καταγραφών.
Συμπερασματικά
Με αυτό ολοκληρώνεται η τεκμηρίωση των Webhooks.
Ελπίζουμε να βρείτε την ενσωμάτωση Webhook του FastComments εύκολη στην κατανόηση και γρήγορη στη ρύθμιση.
Εάν πιστεύετε ότι έχετε εντοπίσει κενά στην τεκμηρίωσή μας, ενημερώστε μας παρακάτω.