Dokumentation · Technische Dokumentation
REST-API-Endpunkte
Dieses Dokument beschreibt die REST-API-Routen, die vom
ADP Car Market Hub-Plugin unter dem Namespace as24ci/v1 registriert werden, einschliesslich
ihrer Methoden, Parameter, des Authentifizierungsmodells und des Verwendungszwecks.
Wann Sie dieses Dokument verwenden sollten
Lesen Sie dieses Dokument, wenn Sie:
- Eine benutzerdefinierte Integration erstellen möchten, die Fahrzeugdaten vom Plugin über HTTP abruft.
- Importe über einen externen Scheduler anstelle von WP-Cron auslösen möchten.
- Verstehen möchten, welche Endpunkte öffentlich sind, welche durch eine vom Administrator gesteuerte Option geschützt sind und welche ein Token erfordern.
- Unerwartete 403- / 404-Antworten von den REST-Routen des Plugins diagnostizieren müssen.
Für die AJAX-Schnittstelle (admin-ajax.php) siehe AJAX-Aktionen. Für ausgehende HTTP-Aufrufe an externe Systeme siehe Webhooks.
Übersicht
Alle vom Plugin registrierten Routen verwenden die WordPress-REST-API und
teilen sich den Namespace as24ci/v1. Die Endpunkte lassen sich in vier Gruppen einteilen:
- Öffentliche Fahrzeugdaten — schreibgeschützte Listing- und Detail-Endpunkte. Standardmässig deaktiviert; müssen von einem Administrator aktiviert werden.
- Favoriten-Helfer — wird von der Favoritenseite im Frontend verwendet, um Fahrzeugdaten für IDs abzurufen, die der Besucher lokal gespeichert hat.
- Analytics-Tracking-Pixel — empfängt leichtgewichtige Ereignisbenachrichtigungen vom Frontend-Skript.
- Cron-Import-Trigger — Token-geschützter Endpunkt, der die gemeinsame Import-Routine bei Bedarf ausführt.
- Lizenz-Aktualisierungssignal — reiner Signal-Endpunkt, den die ADP Car Market Hub API Platform aufruft, damit das Plugin seinen massgeblichen Lizenz- / Funktionsrechte-Status neu abruft.
Die vollständige Basis-URL jedes Endpunkts ist der WordPress-REST-Root, gefolgt
von der Route. Auf einer typischen Website ist dies
https://example.com/wp-json/as24ci/v1/....
Anforderungen oder Voraussetzungen
- WordPress mit aktivierter REST-API (der Standard bei WordPress).
- Schöne Permalinks für REST-URLs im Pfadstil. Bei einfachen Permalinks
sind die Endpunkte weiterhin über
?rest_route=erreichbar. - Für die öffentlichen Fahrzeug-Endpunkte: Die Option
as24ci_rest_api_enabledmuss auf1gesetzt sein. Bis dahin sind die Routen nicht registriert und jede Anfrage gibt ein404von WordPress zurück. - Für den Cron-Import-Endpunkt: Ein Cron-Token muss im Admin-Tab Import & Limits generiert werden.
Endpunkt-Referenz
GET /as24ci/v1/vehicles
Gibt eine paginierte, filterbare Liste importierter Fahrzeuge zurück, deren CPT-Post-Status
publish ist.
- Authentifizierung: Keine (öffentlich). Route wird nur registriert, wenn
as24ci_rest_api_enabledgleich1ist. - Query-Parameter:
page— Ganzzahl ≥ 1. Standard1.per_page— Ganzzahl zwischen 1 und 100. Standard10.make,model— exakte Übereinstimmung mit den entsprechenden Meta-Keys.fuel_type—LIKE-Übereinstimmung mit dem gemappten Kraftstofftyp-Meta-Key.year_min,year_max— numerischer Bereich für_as24ci_year.price_min,price_max— numerischer Bereich für_as24ci_price.orderby— einer vondate,price,mileage,title. Standarddate.order—ascoderdesc(Gross-/Kleinschreibung ignorieren). Standarddesc.- Antwort-Struktur:
``
json { "vehicles": [ { "id": 123, "title": "...", "url": "...", "image": "...", "make": "...", "model": "...", "year": 0, "price": 0, "currency": "EUR", "mileage": 0, "condition": "...", "fuel_type": "...", "transmission": "...", "body_type": "...", "color": "...", "doors": 0, "horse_power": 0, "vin": "...", "listing_id": "..." } ], "total": 0, "pages": 0, "page": 1, "per_page": 10 }`` - Hinweise: Das Feld
imageist die mittelgrosse WordPress-Grösse des Beitragsbildes (leerer String, wenn kein Vorschaubild existiert). Das Feldcurrencyfällt auf den Wert der Optionas24ci_default_currencyzurück, wenn keine fahrzeugspezifische Währung gespeichert ist.
GET /as24ci/v1/vehicles/<id>
Gibt die vollständigen Details für ein einzelnes Fahrzeug zurück.
- Authentifizierung: Keine (öffentlich). Gleiche Einschränkung wie beim Listen-Endpunkt.
- Pfad-Parameter:
id— positive Ganzzahl. Validiert und konvertiert zuabsint. - Antwort: Alle Felder aus der Listen-Antwort plus:
description— verwendet den WordPress-Auszug, falls vorhanden, andernfalls den gekürzten Beitragsinhalt (ca. 55 Wörter).images— Array von Anhang-URLs in der Grösselarge, das manuelle Galeriebilder (_as24ci_manual_image_ids) und importierte Bilder (_as24ci_image_ids) kombiniert; fällt auf das Beitragsbild zurück, wenn beide leer sind.equipment_standard,equipment_optional— Arrays von Strings.seller— Anzeigename der Garage.- Fehler:
404(as24ci_vehicle_not_found), wenn der Beitrag nicht existiert, nicht die CPTas24ci_carist oder nicht veröffentlicht ist.
POST /as24ci/v1/favorites
Wird von der Favoritenseite im Frontend verwendet, um Fahrzeug-Zusammenfassungsdaten für die IDs abzurufen, die der Besucher im lokalen Browser-Speicher hinterlegt hat.
- Authentifizierung: Keine (öffentlich). Immer registriert.
- Body: JSON-Objekt mit
ids, einem Array von Beitrags-IDs. Validiert als Array; bereinigt zu einer eindeutigen Liste positiver Ganzzahlen. Bis zu 50 IDs werden pro Aufruf verarbeitet. - Antwort:
{ "vehicles": [ ... ] }. - Hinweise: Der Endpunkt liest nur veröffentlichte Fahrzeuge. Beiträge, auf die der Besucher keinen Zugriff mehr hat (gelöscht, Entwurf, falscher Beitragstyp), werden stillschweigend weggelassen.
POST /as24ci/v1/analytics/track
Empfängt Ereignisse für Detailansicht, Archivansicht, Vergleichsansicht, Favoritenansicht, Filtersuche, Kontakt-Öffnung und Lead-Versand vom Analytics-Tracking-Pixel.
- Authentifizierung: Keine (öffentlich). Immer registriert.
- Body-Parameter:
post_id— Ganzzahl ≥ 0. Standard0.event_type— muss einer der erlaubten Ereignisnamen sein:view,view_archive,view_compare,view_favorites,filter_search,contact_open,lead_sent.extra_data— optionaler bereinigter String. Fürfilter_searchmuss der String ein JSON-Objekt sein, das die aktiven Filter-Schlüssel/Wert-Paare enthält; der Server wendet vor dem Speichern dieselbe Minimierungslogik an wie beim direkten PHP-Tracking.- Antwort:
{ "tracked": true }bei Erfolg,{ "tracked": false }mit HTTP400, wenn das Ereignis einen Fahrzeugbeitrag erfordert, der nicht existiert oder nicht veröffentlicht ist. - Hinweise: Dieser Endpunkt ist absichtlich tolerant gestaltet, damit anonyme Besucher Analytics-Ereignisse senden können. Verlassen Sie sich nicht darauf für verbindliche Geschäftsdaten; siehe Analytics Tracking für Hinweise zur Aufbewahrung und zum Datenschutz.
GET /as24ci/v1/cron-import
Token-geschützter Endpunkt, der die gemeinsame Import-Routine ausführt. Er
delegiert an dieselbe Methode Scheduler::run_import(), die auch vom
WP-Cron-Hook und dem Admin-Button Jetzt auslösen verwendet wird.
- Authentifizierung: Bearer-Token. Stellen Sie das Token entweder über den HTTP-Header
Authorization: Bearer <token>bereit (bevorzugt — hält das Token aus den Zugriffsprotokollen fern) oder über den Query-Parameter?token=<token>. - Token-Speicherung: Gespeichert in der Option
as24ci_cron_token. Generieren oder rotieren Sie es unter Import & Limits in der Plugin-Verwaltung. - Antworten:
403, wenn kein Token konfiguriert ist oder das angegebene Token nicht übereinstimmt.200mit{ "success": true, "message": "...", "counts": { ... } }bei einem erfolgreichen Durchlauf.429mitsuccess: false, wenn bereits ein anderer Import läuft und der Runner den Start eines zweiten Imports abgelehnt hat.500, wenn der Runner eine Exception ausgelöst hat.- Nebeneffekt: Eine erfolgreiche Authentifizierung aktualisiert die
Option
as24ci_last_external_cron_run, die vom Tab "System & Hilfe" verwendet wird, um zu bestätigen, dass der externe Cron die Website erreicht.
POST /as24ci/v1/license-refresh-signal
Reiner Signal-Endpunkt, den die ADP Car Market Hub API Platform nach
einer Lizenz- oder Funktionsrechteänderung aufruft, damit das Plugin seinen
massgeblichen Status sofort neu abruft. Gehört zu
AS24CI\License_Refresh_Signal und ist bedingungslos registriert
(wie /cron-import), unabhängig von as24ci_rest_api_enabled.
- Authentifizierung: Wird innerhalb des Callbacks über ein reines Signal-Vertrauensmodell
abgewickelt. Nichts aus dem Request-Body wird als Daten vertraut; der
Request löst nur
License_Manager::refresh()aus. Der Handler erzwingt der Reihe nach:POST+ JSON-Content-Type; eine passendeproduct_key(gegenLicense_Client::PRODUCT_KEY); eine passendeinstallation_uid, wenn beide Seiten eine haben; eine konfigurierte lokale Lizenz; ein bereitgestelltes installationsspezifisches Refresh-Signal-Secret; einen frischen Zeitstempel-Header und eine unbenutzte Nonce (Replay-Schutz, 5-Minuten-Fenster); und eine HMAC-SHA256-Signatur über den Zeitstempel + rohen Body. - Rate Limiting: Wiederholte Signale innerhalb eines 30-Sekunden-Fensters werden
akzeptiert-aber-nicht-aktualisiert und mit
429beantwortet, damit ein Burst niemals die API Platform überlasten kann. - Antworten:
200bei einer ausgelösten Aktualisierung;4xx/503für die oben genannten Validierungsfehler (403Produkt-/Installations-Fehlanpassung,409nicht lizenziert / wiederholte Nonce,401ungültiger Zeitstempel/Signatur,503, wenn kein Signal-Secret bereitgestellt ist).
Betriebshinweise
- Die öffentlichen Fahrzeug-Endpunkte führen standardmässige
WP_Query-Aufrufe aus und berücksichtigen das normale WordPress-Objekt-Caching. Wiederholte identische Anfragen profitieren von den Beitrags- und Beitrags-Meta-Caches. - Numerische Filter (
year_min/year_max,price_min/price_max) werden zu einermeta_queryhinzugefügt. Stellen Sie bei grossen Katalogen sicher, dass die zugrunde liegenden Meta-Keys auf Datenbankebene indiziert sind, wenn Sie mit hohem Traffic rechnen. Überprüfen Sie die genaue Indizierungsstrategie in der aktuellen Plugin-Version vor der Veröffentlichung. - Der Listen-Endpunkt wendet
update_postmeta_cache()für die zurückgegebenen Beiträge an, um die Antwortzeiten vorhersehbar zu halten. - Der Favoriten-Endpunkt begrenzt jede Anfrage hart auf 50 IDs, um Missbrauch zu verhindern und die Antwort-Payloads in einem angemessenen Rahmen zu halten.
- Der Cron-Import-Endpunkt setzt
nocache_headers(), damit Caching-Proxys geplante Durchläufe nicht beeinträchtigen. - Der Token-Vergleich verwendet
hash_equals(), um Timing-Angriffe zu verhindern. Bevorzugen Sie dennoch den HeaderAuthorization: Bearer, um zu verhindern, dass das Token über Referrer-Header, den Browserverlauf oder Webserver-Zugriffsprotokolle offengelegt wird.
Konfigurations-Referenz
| Optionsschlüssel | Zweck |
|---|---|
as24ci_rest_api_enabled | Wenn '1', werden /vehicles und /vehicles/<id> registriert. Standard '0'. |
as24ci_default_currency | Währungscode, der von den öffentlichen Endpunkten zurückgegeben wird, wenn keine fahrzeugspezifische Währung gespeichert ist. |
as24ci_cron_token | Erwartetes Bearer-Token für /cron-import. Ein leerer Wert deaktiviert den Endpunkt. |
as24ci_last_external_cron_run | Zeitstempel des letzten erfolgreichen externen Cron-Aufrufs. Wird automatisch aktualisiert. |
Für die vollständige Liste der Plugin-Optionen siehe Speicherung von Optionen und Einstellungen.
Fehlerbehebung
/vehiclesgibt404zurück — die öffentliche API ist deaktiviert. Setzen Sieas24ci_rest_api_enabledauf'1'in Import & Limits (oder über WP-CLI /update_option)./cron-importgibt403zurück — entweder ist noch kein Token konfiguriert oder der angegebene Wert stimmt nicht überein. Generieren Sie ein neues Token in der Verwaltung und versuchen Sie es erneut./cron-importgibt429zurück — ein anderer Import läuft bereits und eine Sperre verhindert einen zweiten gleichzeitigen Durchlauf. Warten Sie, bis der aktuelle Durchlauf beendet ist; siehe Cron-Ereignisse und Scheduler für die Sperr-TTL.- Leeres
vehicles-Array auf dem Listen-Endpunkt ohne Filter — es sind keine Fahrzeuge veröffentlicht oder der Katalog wurde noch nicht importiert. Überprüfen Sie Import & Limits und die Import-Protokolle. - Unerwartetes HTTP
400auf/analytics/track— das Ereignis erfordert einen veröffentlichten Fahrzeugbeitrag, aberpost_idverweist auf einen Entwurf, einen gelöschten oder einen Nicht-Fahrzeug-Beitrag.