Drupal hat seit 8.7 die JSON:API standardmäßig im Core. BAconn nutzt sie für einen direkten, paginierten Stellen-Sync ohne Scraping.
Voraussetzungen auf der Drupal-Seite
- JSON:API-Modul aktiviert — sollte automatisch laufen, prüfen unter
admin/modules. - Eine Authentifizierungsmethode: entweder Simple OAuth (für Client-Credentials-Flow) oder ein API-Key-Modul (z. B. "Key auth").
- Ein Content-Type für Stellen — typisch
joboderjob_listingodervacancy. BAconn introspiziert verfügbare Bundles automatisch.
Einrichtung
- Bei Wizard oder /cms-pipe/manage: "Neue Quelle" → Drupal.
- Basis-URL der Drupal-Site, z. B.
https://intranet.firma.de. - Authentifizierungs-Modus wählen:
- OAuth2 Client Credentials: Client-ID + Client-Secret aus dem Simple-OAuth-Konsumenten
- API-Key (Header): einfacher Token, wird als
X-API-Keygesendet
- "Verbindung testen" — BAconn ruft
/jsonapiauf und listet verfügbare Content-Types. - Content-Type für Stellen wählen — Dropdown zeigt alle Bundles, sortiert nach Heuristik (Bundles mit "job" o. ä. zuerst).
- Feld-Mapping konfigurieren — Drupal-Feldnamen (z. B.
field_location,field_salary_min) auf BAconn-Felder mappen.
Was synchronisiert wird
BAconn folgt der JSON:API-Pagination automatisch (links.next.href). Bei jedem Sync-Lauf werden nur geänderte Stellen verarbeitet — Erkennung über SHA-256-Hash des Roh-Records.
Token-Caching
OAuth-Access-Tokens werden in cms_pipe_sources.adapter_state.oauth.{access_token, expires_at} gecached. Bei Ablauf wird automatisch refresh’t. Sie sehen den Token nie im Klartext im UI — nur Client-ID/-Secret werden verschlüsselt gespeichert.
Troubleshooting
- "401 Unauthorized" — Client-Secret falsch oder Konsument deaktiviert. Im Drupal-Admin unter Konfiguration → Simple OAuth → Konsumenten prüfen.
- "403 Forbidden auf bestimmten Feldern" — Drupal-Feldzugriff blockiert. Permission "Bypass content access control" oder Feld-spezifische Permissions vergeben.
- "Bundle nicht gefunden" — Der gewählte Content-Type wurde umbenannt. Quelle bearbeiten und neu introspizieren.