Entwickler-AnleitungenDie REST-API

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.

Diese Routen sind intern. Sie existieren für die eigenen Bildschirme des Plugins, keine davon steht in der readme, und jede kann sich zwischen zwei Versionen ändern. Für alles, worauf dein Projekt sich verlässt, nimm lieber die WP-CLI-Befehle, die Abilities oder die dokumentierten Hooks. Wenn du doch gegen REST skriptest, pinne die Plugin-Version.

Die Grundlagen

Basis-URLhttps://example.com/wp-json/easy-svg-pro/v1/
FormatJSON rein, JSON raus, außer bei Paket-Exporten (ZIP-Bytes) und Uploads (multipart)
WerEin angemeldeter WordPress-Nutzer mit manage_options, für fast jede Route
FehlerWordPress-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.

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üfungBrauchtRouten
Editormanage_options, aktive Lizenz, Funktion Icon-Set-Editorsets/*, media/markup, library/move, library/usage
Lizenziertmanage_options, aktive Lizenzsettings, features, packs/*, library/collections
Auditmanage_options, aktive Lizenz, Funktion SVG-Cleaneraudit/*
Eigenes Flagmanage_options, aktive Lizenz, diese Funktionpresets/*, 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

FamilieWas sie tutFunktion
settingsKonfigurator: zusätzliche erlaubte Tags und Attributekeine
library/*Das Icon-Raster, Icons verschieben, wo ein Icon genutzt wirdLizenziert oder Icon-Set-Editor
presets, presets/installPreset-Katalog und InstallationVorgefertigte Icon-Sets
history/*Frühere Zeichnungen eines Icons, wiederherstellenIcon-Verlauf
styles/*Stilvorlagen und Theme-FarbenStile & Theme-Farben
bulk/*Viele Icons umbenennen, kopieren, verschiebenMehrfachbearbeitung
replace/*Ein Icon überall gegen ein anderes tauschenÜberall ersetzen
repair/*Kaputte SVGs finden und reparierenKaputte SVGs reparieren
client/*Tausch im KundenmodusKundenmodus
quick-insert/*Zuletzt genutzt, Favoriten, Einfügen im EditorSchnell 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/add und icons/remove deklarieren eine Grenze von 25. icons/remove lehnt eine längere slugs-Liste mit 400 ab. Bei icons/add ist die Grenze als maxItems deklariert, das WordPress für die Listenform von icons prü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/install antwortet auch bei Fehlern mit 200. Prüf state im 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.

Siehe auch