Referenz
Idempotenz
E-Mail-Sendungen mit dem Header Idempotency-Key sicher wiederholen. Welche Endpunkte ihn unterstützen, Format und Geltungsbereich des Schlüssels, das 24-Stunden-Fenster für Wiederholungen und die zugehörigen Fehler.
Bei Netzwerkfehlern und Timeouts wissen Sie nicht, ob eine Sendung durchgegangen ist. Mit einem Idempotenzschlüssel lässt sich die Sendung gefahrlos wiederholen: Hat Emailit bereits eine Anfrage mit demselben Schlüssel angenommen, gibt es die ursprüngliche Antwort zurück, statt die E-Mail erneut zu senden. Diese Seite ist die Referenz für den Header Idempotency-Key. Eine Schritt-für-Schritt-Anleitung finden Sie unter Idempotente Anfragen.
Unterstützte Endpunkte
| Endpunkt | |
|---|---|
POST /emails |
E-Mail senden |
POST /emails/{id}/forward |
E-Mail weiterleiten |
Andere Endpunkte ignorieren den Header. Das Erstellen einer Domain, eines API-Schlüssels, einer Kontaktliste oder eines Kontakts lässt sich ohnehin gefahrlos wiederholen: Eine zweite Anfrage mit demselben Namen oder derselben E-Mail-Adresse gibt 409 und das vorhandene Objekt in existing zurück, statt ein Duplikat zu erstellen.
Schlüssel senden
Fügen Sie einen Header Idempotency-Key hinzu, dessen Wert für die zu sendende E-Mail eindeutig ist, etwa eine UUID oder eine ID aus Ihrem eigenen System:
curl https://api.emailit.com/v2/emails \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1042-confirmation" \
-d '{
"from": "Acme <orders@acme.com>",
"to": "ada@example.com",
"subject": "Your order #1042",
"html": "<p>Thanks for your order.</p>"
}'const response = await fetch('https://api.emailit.com/v2/emails', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.EMAILIT_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': `order-${order.id}-confirmation`,
},
body: JSON.stringify({
from: 'Acme <orders@acme.com>',
to: order.email,
subject: `Your order #${order.id}`,
html: '<p>Thanks for your order.</p>',
}),
});import os
import requests
response = requests.post(
"https://api.emailit.com/v2/emails",
headers={
"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}",
"Idempotency-Key": f"order-{order['id']}-confirmation",
},
json={
"from": "Acme <orders@acme.com>",
"to": order["email"],
"subject": f"Your order #{order['id']}",
"html": "<p>Thanks for your order.</p>",
},
timeout=30,
)Erzeugen Sie den Schlüssel einmal pro E-Mail, vor dem ersten Versuch, und senden Sie bei jeder Wiederholung dieser E-Mail denselben Schlüssel.
So funktionieren Schlüssel
| Regel | Details |
|---|---|
| Format | 1 bis 256 Zeichen. Nur Buchstaben, Ziffern, Bindestriche (-) und Unterstriche (_). |
| Geltungsbereich | Pro Workspace. Schlüssel aus verschiedenen Workspaces kollidieren nie, aber beide Endpunkte teilen sich einen Namensraum. Verwenden Sie den Schlüssel einer Sendung deshalb nicht für eine Weiterleitung. |
| Lebensdauer | Die Antwort auf eine erfolgreiche Anfrage wird nach deren Abschluss 24 Stunden lang gespeichert. |
| Wiederholte Anfragen | Eine Anfrage mit einem gespeicherten Schlüssel gibt die gespeicherte Antwort mit dem Status 200 zurück. Es wird keine E-Mail gesendet, es werden keine Credits verbraucht, und die Versandlimits werden nicht belastet. |
| Abgleich | Nur der Schlüssel wird verglichen, nicht der Anfrage-Body. Eine andere Anfrage mit einem bereits verwendeten Schlüssel gibt die erste Antwort zurück. |
| Fehlschläge | Schlägt eine Anfrage mit einem beliebigen Fehler fehl, wird nichts gespeichert und der Schlüssel wird freigegeben. Sie können die Anfrage also korrigieren und mit demselben Schlüssel wiederholen. |
| Nebenläufigkeit | Solange eine Anfrage mit einem Schlüssel noch läuft, gibt eine weitere Anfrage mit demselben Schlüssel 409 zurück. Die Sperre wird freigegeben, wenn die erste Anfrage abgeschlossen ist, und läuft nach höchstens 15 Minuten ab. |
Eine wiederholte Anfrage durchläuft trotzdem die Authentifizierung und die Prüfung der Versandlimits pro Sekunde und pro Tag. Sie kann also 401 oder 429 zurückgeben. Weiterleitungen zählen außerdem zum stündlichen Limit für Weiterleitungen, auch wenn die gespeicherte Antwort zurückgegeben wird.
Fehler
{
"error": "Invalid Idempotency-Key"
}{
"error": "Idempotency key in progress",
"message": "A request with this Idempotency-Key is already being processed. Retry shortly with the same key."
}{
"error": "Idempotency unavailable",
"message": "Unable to process Idempotency-Key right now. Retry the request with the same key."
}| Status | error |
Ursache | Was zu tun ist |
|---|---|---|---|
400 |
Invalid Idempotency-Key |
Der Schlüssel ist leer, länger als 256 Zeichen oder enthält andere Zeichen als Buchstaben, Ziffern, - und _. |
Verwenden Sie eine UUID oder einen anderen sicheren Wert. |
409 |
Idempotency key in progress |
Eine Anfrage mit demselben Schlüssel wird noch verarbeitet. | Warten Sie eine Sekunde und wiederholen Sie die Anfrage mit demselben Schlüssel. Sobald die erste Anfrage abgeschlossen ist, erhalten Sie die gespeicherte Antwort. |
503 |
Idempotency unavailable |
Emailit kann den Schlüssel gerade nicht prüfen. Die Anfrage wurde nicht verarbeitet. | Wiederholen Sie die Anfrage nach kurzer Wartezeit mit demselben Schlüssel. |
Emailit führt eine Anfrage nie ohne Idempotenzprüfung aus: Lässt sich der Schlüssel nicht prüfen, schlägt die Anfrage mit 503 fehl, statt ein Duplikat zu riskieren.
Gute Schlüssel wählen
- Leiten Sie den Schlüssel von dem ab, worüber Sie benachrichtigen, etwa
order-1042-confirmationoderpassword-reset-<token-id>. So verwendet auch eine Wiederholung durch einen anderen Worker oder nach einem Neustart denselben Schlüssel. - Verwenden Sie nur dann eine neue UUID, wenn die E-Mail keine natürliche ID hat, und speichern Sie sie vor dem ersten Versuch zusammen mit dem Job.
- Verwenden Sie einen Schlüssel innerhalb von 24 Stunden nicht für eine andere E-Mail. Sie würden die Antwort der ersten E-Mail erhalten, und die zweite E-Mail würde nicht gesendet.