Die REST-API
So arbeiten die REST-Routen von Easy SVG Pro: Namespace, Anmeldung, Lizenz- und Feature-Sperren und curl-Beispiele für Sets, Pakete, Audit und Funktionen.
Jeder Bildschirm von Easy SVG Pro spricht über REST-Routen in einem Namespace mit WordPress. Dieselben Routen kannst du aus einem Skript, einer Deploy-Pipeline oder von einer anderen Seite aufrufen. Diese Seite erklärt, wie sie geschützt sind, welche Familien es gibt, und zeigt funktionierende curl-Aufrufe für die, die du am ehesten brauchst.
Die Grundlagen
| Basis-URL | https://example.com/wp-json/easy-svg-pro/v1/ |
| Format | JSON rein, JSON raus, außer bei Paket-Exporten (ZIP-Bytes) und Uploads (multipart) |
| Wer | Ein angemeldeter WordPress-Nutzer mit manage_options, für fast jede Route |
| Fehler | WordPress-Fehler: code, message und data.status |
Ein Fehler sieht immer so aus:
{
"code": "easy_svg_pro_no_set",
"message": "Set not found.",
"data": { "status": 404 }
}
Verzweige anhand von code, nicht anhand der Meldung: Meldungen werden in die Sprache des Nutzers übersetzt.
Anmeldung
Leg unter Benutzer → Profil → Anwendungspasswörter ein Anwendungspasswort für einen Administrator an und schick es per HTTP Basic Auth mit. WordPress bietet Anwendungspasswörter nur über HTTPS an, oder auf einer Seite mit dem Umgebungstyp local.
export WP_URL="https://example.com"
export WP_AUTH="admin:abcd efgh ijkl mnop qrst uvwx"
curl -s -u "$WP_AUTH" "$WP_URL/wp-json/easy-svg-pro/v1/features"
Nimm für Automatisierung einen eigenen Nutzer, dann kannst du sein Passwort widerrufen, ohne jemand anderen zu treffen.
In wp-admin ist ein angemeldeter Nutzer über das Cookie angemeldet. Schick bei jeder Anfrage die REST-Nonce mit.
const res = await fetch( '/wp-json/easy-svg-pro/v1/sets/list', {
headers: { 'X-WP-Nonce': wpApiSettings.nonce },
} );
wp.apiFetch hängt die Nonce für dich an.
Wer was aufrufen darf
Jede Route hat eine dieser Berechtigungsprüfungen. Eine gescheiterte Prüfung antwortet mit 401 (nicht angemeldet) oder 403 (angemeldet, aber nicht erlaubt).
| Prüfung | Braucht | Routen |
|---|---|---|
| Editor | manage_options, aktive Lizenz, Funktion Icon-Set-Editor | sets/*, media/markup, library/move, library/usage |
| Lizenziert | manage_options, aktive Lizenz | settings, features, packs/*, library/collections |
| Audit | manage_options, aktive Lizenz, Funktion SVG-Cleaner | audit/* |
| Eigenes Flag | manage_options, aktive Lizenz, diese Funktion | presets/*, history/*, styles/*, bulk/*, replace/*, repair/* und die anderen |
Die Lizenz zu aktivieren gehört nicht zu dieser API, das machst du unter Icons → Lizenz.
Funktionen: Dinge einschalten
Die meisten Routen brauchen ein Feature-Flag, also ist das meist der erste Aufruf.
# Flags lesen
curl -s -u "$WP_AUTH" "$WP_URL/wp-json/easy-svg-pro/v1/features"
# Set-Editor und SVG-Cleaner einschalten. Flags, die du nicht nennst, behalten ihren Wert.
curl -s -u "$WP_AUTH" -X POST "$WP_URL/wp-json/easy-svg-pro/v1/features" \
-H "Content-Type: application/json" \
-d '{"editor":true,"audit":true}'
Die Antwort enthält flags (Schlüssel auf Boolean) und meta (Bezeichnung und Beschreibung in der Sprache des Nutzers). GET liefert zusätzlich groups und available, das sagt, ob das Host-Plugin einer Integration installiert ist. Unbekannte Schlüssel fallen weg.
Icon-Sets
Ein Set ist eine benannte Sammlung von Icons, gespeichert als easy_svg_set-Post. Jedes Icon, das du schickst, wird vor dem Speichern bereinigt und gehärtet, und jeder Schreibvorgang löst easy_svg_pro_set_icons_written aus.
Sets auflisten
curl -s -u "$WP_AUTH" "$WP_URL/wp-json/easy-svg-pro/v1/sets/list?search=acme"
[
{ "id": 42, "title": "ACME", "slug": "acme", "status": "publish", "count": 12,
"template_call": "easy_svg_icon( 'acme/icon-slug' )" }
]
Entwürfe und private Sets sind dabei. slug ist der registrierte Slug der Sammlung, den Templates verwenden.
Ein Set anlegen
curl -s -u "$WP_AUTH" -X POST "$WP_URL/wp-json/easy-svg-pro/v1/sets/create" \
-H "Content-Type: application/json" \
-d '{"label":"ACME"}'
Die Antwort liefert id, label und collection. Der Slug entsteht einmal aus dem Namen und ändert sich bei einer Umbenennung nicht.
Icons hinzufügen, ohne den Rest anzufassen
curl -s -u "$WP_AUTH" -X POST "$WP_URL/wp-json/easy-svg-pro/v1/sets/42/icons/add" \
-H "Content-Type: application/json" \
-d '{
"icons": {
"phone": { "label": "Telefon", "markup": "<svg viewBox="0 0 24 24"><path d="M2 2h20v20H2z"/></svg>" }
}
}'
Schick höchstens 25 Icons pro Aufruf, die Route deklariert diese Grenze. Ein Icon, dessen Slug schon im Set ist, wird als exists gemeldet und bleibt unverändert. Schick "replace": true, um es zu überschreiben, dann meldet der Report replaced. Icons, die der Sanitizer ablehnt, fallen weg und stehen nicht im Report. Vergleich also, was du geschickt hast, mit dem, was zurückkommt.
Icons nach Namen entfernen
curl -s -u "$WP_AUTH" -X POST "$WP_URL/wp-json/easy-svg-pro/v1/sets/42/icons/remove" \
-H "Content-Type: application/json" \
-d '{"slugs":["phone","old-logo"]}'
Ein Name, den das Set nicht hat, wird als not_found gemeldet. Die anderen werden trotzdem entfernt.
GET /sets/42 liefert das ganze Set. POST /sets/42 ersetzt es: Jedes Icon, das im Body fehlt, wird gelöscht. Nimm icons/add und icons/remove, außer du hast wirklich das komplette Set in der Hand.
# Ein Set lesen
curl -s -u "$WP_AUTH" "$WP_URL/wp-json/easy-svg-pro/v1/sets/42"
Pakete
Ein Paket ist eine Sammlung als ZIP: manifest.json plus eine SVG pro Icon. Diese Routen brauchen eine Lizenz, aber kein Feature-Flag.
# Jede Sammlung der Seite, mit Herkunft, Lizenzangaben und Problemen
curl -s -u "$WP_AUTH" "$WP_URL/wp-json/easy-svg-pro/v1/packs/collections"
# Eine Sammlung exportieren. Die Antwort ist das ZIP selbst, kein JSON.
curl -s -u "$WP_AUTH" -o acme.zip \
"$WP_URL/wp-json/easy-svg-pro/v1/packs/export?collection=acme"
Der Import ist ein Multipart-Upload im Feld file. Das Paket wird ein neues, veröffentlichtes Icon-Set und wird nie in eine vorhandene Sammlung gemischt.
curl -s -u "$WP_AUTH" -X POST "$WP_URL/wp-json/easy-svg-pro/v1/packs/import" \
-F "file=@acme.zip"
Ist der Slug des Pakets vergeben, wird noch nichts gespeichert. Die Antwort hat "collision": true, "imported": 0 und einen freien slug. Schick diesen Slug zur Bestätigung zurück:
curl -s -u "$WP_AUTH" -X POST "$WP_URL/wp-json/easy-svg-pro/v1/packs/import" \
-F "file=@acme.zip" -F "slug=acme-2"
Fehler, die dir begegnen: 422 easy_svg_pro_empty_pack (kein Icon hat den Sanitizer überstanden), 409 easy_svg_pro_no_slug, 400 easy_svg_pro_no_file. Das Archiv wird mit denselben Grenzen gelesen wie jeder Import, siehe easy_svg_pro_import_max_entries.
SVG-Cleaner (Audit)
Das Audit findet SVGs in der Mediathek, die der Sanitizer verändern würde, und bereinigt sie einzeln. Es braucht die Funktion SVG-Cleaner.
# 1. In Abschnitten scannen. Bei Offset 0 anfangen und "next" folgen, bis es null ist.
next=0
while [ "$next" != "null" ]; do
answer=$(curl -s -u "$WP_AUTH" -X POST "$WP_URL/wp-json/easy-svg-pro/v1/audit/scan" \
-H "Content-Type: application/json" -d "{"offset":$next}")
next=$(echo "$answer" | jq '.next')
done
# 2. Den gespeicherten Bericht lesen, ohne neu zu scannen
curl -s -u "$WP_AUTH" "$WP_URL/wp-json/easy-svg-pro/v1/audit/report" | jq '.rows'
# 3. Einen Anhang bereinigen. Das Original wird vorher gesichert.
curl -s -u "$WP_AUTH" -X POST "$WP_URL/wp-json/easy-svg-pro/v1/audit/clean" \
-H "Content-Type: application/json" -d '{"attachment":101}'
Ein Scan-Aufruf, dessen offset nicht zum gespeicherten next passt, antwortet mit 409 easy_svg_pro_stale_scan: Jemand hat in der Zwischenzeit einen anderen Scan gestartet. Fang wieder bei 0 an. Die Clean-Route antwortet mit einem state wie cleaned, already_clean oder backup_failed. Nichts wird umgeschrieben, bevor das Original gespeichert und zurückgelesen wurde.
Weitere Familien
| Familie | Was sie tut | Funktion |
|---|---|---|
settings | Konfigurator: zusätzliche erlaubte Tags und Attribute | keine |
library/* | Das Icon-Raster, Icons verschieben, wo ein Icon genutzt wird | Lizenziert oder Icon-Set-Editor |
presets, presets/install | Preset-Katalog und Installation | Vorgefertigte Icon-Sets |
history/* | Frühere Zeichnungen eines Icons, wiederherstellen | Icon-Verlauf |
styles/* | Stilvorlagen und Theme-Farben | Stile & Theme-Farben |
bulk/* | Viele Icons umbenennen, kopieren, verschieben | Mehrfachbearbeitung |
replace/* | Ein Icon überall gegen ein anderes tauschen | Überall ersetzen |
repair/* | Kaputte SVGs finden und reparieren | Kaputte SVGs reparieren |
client/* | Tausch im Kundenmodus | Kundenmodus |
quick-insert/* | Zuletzt genutzt, Favoriten, Einfügen im Editor | Schnell einfügen |
Jede Route hat eine eigene Seite in der REST-API-Referenz.
Stolperfallen
POST /sets/{id}löscht, was du weglässt. Das ist das Speichern des Editors, kein Hinzufügen.- 25 Icons pro Aufruf.
icons/addundicons/removedeklarieren eine Grenze von 25.icons/removelehnt eine längereslugs-Liste mit 400 ab. Beiicons/addist die Grenze alsmaxItemsdeklariert, das WordPress für die Listenform voniconsprüft. Schick in jedem Fall Pakete zu 25. - Abgelehnte Icons sind still. Ein Icon, das der Sanitizer ablehnt, fehlt im Report, statt mit Grund aufzutauchen.
presets/installantwortet auch bei Fehlern mit 200. Prüfstateim Body, nicht den Statuscode.- Ohne aktive Lizenz antwortet jede Route mit 403. Aktiviere die Seite zuerst unter Icons → Lizenz.
- Intern heißt intern. Eine Route, ein Feld oder ein Fehlercode kann sich in jedem Release ändern. Teste deine Skripte nach jedem Update erneut.