
Γλώσσα 🇬🇷 Ελληνικά
Επισκόπηση
Υλοποίηση
Πίσω από τα Παρασκήνια
Με το 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 admin υπάρχουν κουμπιά Send Test Payload για κάθε τύπο συμβάντος (Create, Update, Delete). Τα Create και Update συμβάντα στέλνουν ένα dummy αντικείμενο WebhookComment, ενώ η δοκιμή του Delete θα στείλει ένα dummy σώμα αιτήματος με μόνο ένα ID.
Verifying Payloads
Κατά τη δοκιμή της ενσωμάτωσης webhook, επαληθεύστε ότι τα εισερχόμενα αιτήματα περιλαμβάνουν τις ακόλουθες κεφαλίδες:
token- Το μυστικό API σαςX-FastComments-Timestamp- Unix χρονική σφραγίδα (δευτερόλεπτα)X-FastComments-Signature- HMAC-SHA256 υπογραφή
Χρησιμοποιήστε την επαλήθευση υπογραφής HMAC για να διασφαλίσετε ότι τα payloads είναι γνήσια.
Testing Tools
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως webhook.site ή ngrok για να εξετάσετε τα εισερχόμενα payloads webhook κατά την ανάπτυξη.
Event Types
- Create Event: Προκαλείται όταν δημιουργείται ένα νέο σχόλιο. Προεπιλεγμένη μέθοδος: PUT
- Update Event: Προκαλείται όταν επεξεργάζεται ένα σχόλιο. Προεπιλεγμένη μέθοδος: PUT
- Delete Event: Προκαλείται όταν διαγράφεται ένα σχόλιο. Προεπιλεγμένη μέθοδος: DELETE
Κάθε συμβάν περιλαμβάνει τα πλήρη δεδομένα του σχολίου στο σώμα του αιτήματος (βλέπε Data Structures για τη μορφή του payload).
Δομές δεδομένων 
Η μόνη δομή που αποστέλλεται μέσω webhooks είναι το αντικείμενο WebhookComment, περιγραφόμενο σε TypeScript παρακάτω.
Δομή του αντικειμένου WebhookComment
Δομή του συμβάντος "Create"
Το σώμα του αιτήματος για το συμβάν "create" είναι ένα αντικείμενο WebhookComment.
Δομή του συμβάντος "Update"
Το σώμα του αιτήματος για το συμβάν "update" είναι ένα αντικείμενο WebhookComment.
Δομή του συμβάντος "Delete"
Το σώμα του αιτήματος για το συμβάν "delete" είναι ένα αντικείμενο WebhookComment.
Αλλαγή από 14 Νοεμβρίου 2023
Προηγουμένως το σώμα του αιτήματος για το συμβάν "delete" περιείχε μόνο το id του σχολίου. Τώρα περιέχει ολόκληρο το σχόλιο κατά τη στιγμή της διαγραφής.
Run 
When users are tagged in a comment, the information is stored in a list called mentions. Each object in that list
has the following structure.
Run 
Μέθοδοι HTTP
Μπορείτε να ρυθμίσετε τη μέθοδο HTTP για κάθε τύπο συμβάντος webhook στο admin panel:
- Create Event: POST ή PUT (προεπιλογή: PUT)
- Update Event: POST ή PUT (προεπιλογή: PUT)
- Delete Event: DELETE, POST ή PUT (προεπιλογή: DELETE)
Εφόσον όλα τα αιτήματα περιέχουν ένα ID, οι λειτουργίες Create και Update είναι idempotent από προεπιλογή (PUT). Η επανάληψη του ίδιου αιτήματος Create ή Update δεν θα πρέπει να δημιουργεί διπλότυπα αντικείμενα στην πλευρά σας.
Κεφαλίδες Αιτήματος
Κάθε αίτημα webhook περιλαμβάνει τις ακόλουθες κεφαλίδες:
| Κεφαλίδα | Περιγραφή |
|---|---|
Content-Type |
application/json |
token |
Το API Secret σας |
X-FastComments-Timestamp |
Unix χρονοσφραγίδα (δευτερόλεπτα) όταν υπογράφηκε το αίτημα |
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 εύκολη στην κατανόηση και γρήγορη στη ρύθμιση.
Εάν πιστεύετε ότι έχετε εντοπίσει κενά στην τεκμηρίωσή μας, ενημερώστε μας παρακάτω.