Server-Modus (REST API) PRO
Der Publisher bietet eine Schnittstelle an, mit der über HTTP Aufträge zur Dokumentenerzeugung übergeben werden können. Gestartet wird der Servermodus mit
sp server
auf der Kommandozeile. Der Servermodus bietet die Möglichkeit
- Daten zum Server zu übertragen und einen Lauf zu starten
- Status des Laufs zu ermitteln (läuft der Prozess noch?)
- fertige PDF-Dateien herunterzuladen
- Protokoll- und andere Dateien aus dem Arbeitsverzeichnis abzurufen
| Der Server-Modus ist für eine nicht-öffentliche Umgebung gedacht. Es gibt keine Authentifizierungsmethoden und keine Mechanismen, Dokumente zu schützen. |
Die API Version 0 (/v0/...) ist weiterhin verfügbar, wird aber nicht mehr weiterentwickelt.
Neue Integrationen sollten die API Version 1 (/v1/...) verwenden. |
Der Server baut die Verbindung auf der IP-Adresse 127.0.0.1 und dem Port 5266 auf.
Die Adresse kann mit den Parametern address und port in der Konfigurationsdatei bzw. auf der Kommandozeile geändert werden, siehe den Anhang über die Konfiguration.
Beispiel für eine Konfigurationsdatei:
[server]
port = 9999
address = 0.0.0.0
extra-dir = /var/projects/fonts:/var/projects/images
filter = convertdata.lua
Es folgt ein Überblick über alle API Methoden.
Die aktuelle Versionsnummer der API ist 1, also werden alle Methoden über http://127.0.0.1:5266/v1/.. angesprochen.
| Methode | URL | Kurzbeschreibung |
|---|---|---|
| GET | /v1/available | Prüfe, ob der Server läuft. |
| POST | /v1/jobs | Starte einen Publishing-Lauf. |
| GET | /v1/jobs | Übersicht über alle Publishing-Läufe. |
| GET | /v1/jobs/{id} | Status eines Publishing-Laufs. |
| GET | /v1/jobs/{id}/pdf | PDF eines Publishing-Laufs abholen. |
| POST | /v1/pdf | Daten senden und PDF in einem Request erhalten. |
| GET | /v1/jobs/{id}/files/{filename} | Datei aus dem Arbeitsverzeichnis abrufen. |
| DELETE | /v1/jobs/{id} | Publishing-Lauf löschen. |
Fehlerformat
Alle Fehlerantworten der v1-API verwenden das Format nach RFC 9457 (Problem Details for HTTP APIs) mit dem Content-Type application/problem+json:
{
"type": "about:blank",
"title": "Job not found",
"status": 404,
"detail": "No job with id \"123\" exists",
"instance": "/v1/jobs/123"
}
/v1/available
GET: Gibt den HTTP-Status 200 mit einer JSON-Antwort zurück:
{"status": "ok"}
POST /v1/jobs
Startet einen neuen Publishing-Lauf. Der Request-Body kann optional eine JSON-Datei im folgenden Format enthalten:
{
"<dateiname>": "<base64 kodierter Inhalt>",
"<dateiname>": "<base64 kodierter Inhalt>"
}
also z. B.
{
"layout.xml": "PD94bWwgdmVyc2lv....",
"data.xml": "PGRhdGE+CiAgICA8Y29udGVudHM+PCFbQ0RBVEFbPHV..."
}
Der Body kann auch leer sein, wenn keine Dateien übertragen werden sollen (z. B. wenn Layout und Daten über extra-dir bereitgestellt werden).
Diese Dateien werden auf dem Server in ein leeres Verzeichnis kopiert und dort wird sp aufgerufen.
Die Rückgabe ist in der Form
{"id": "752869708"}
mit einem HTTP-Statuscode 201 (Created).
Parameter
Folgende URL-Parameter können beim POST-Request angegeben werden:
vars- Setzt Variablen für den Publisher-Lauf. Angabe in der Form
var1=wert1,var2=wert2,var3=wert3..., jedoch URL-kodiert. mode- Setzt den Modus für den Lauf. Angabe in der Form
mode1,mode2,mode3..., aber URL-kodiert.
Beispiel
curl -X POST "http://127.0.0.1:5266/v1/jobs?vars=myvar%3D12345&mode=a4paper%2Cprint"
setzt myvar auf 12345 und schaltet die Modi a4paper und print ein. Die Antwort enthält die Job-ID:
{"id": "752869708"}
GET /v1/jobs
Liefert den Status aller Publishing-Läufe zurück.
{
"jobs": [
{
"id": "1997009134",
"status": "finished",
"message": "no errors found",
"finished": "2016-05-23T11:14:14+02:00"
},
{
"id": "1997329145",
"status": "processing"
}
]
}
Mögliche Werte für status: finished, failed, processing, error.
GET /v1/jobs/{id}
Ermittelt den Status eines einzelnen Publishing-Laufs.
Falls der Lauf noch nicht abgeschlossen ist, wird HTTP-Statuscode 202 (Accepted) zurückgegeben:
{
"id": "752869708",
"status": "processing"
}
Falls der Lauf abgeschlossen ist, wird HTTP-Statuscode 200 (OK) zurückgegeben:
{
"id": "752869708",
"status": "finished",
"message": "no errors found",
"finished": "2015-12-25T12:03:04+01:00"
}
Falls die ID unbekannt ist, wird HTTP-Statuscode 404 mit einer RFC 9457 Fehlerantwort zurückgegeben.
GET /v1/jobs/{id}/pdf
Gibt die erzeugte PDF-Datei zurück. Der Request wartet auf die Fertigstellung des Publishing-Prozesses.
Parameter
jobname- Setzt den Dateinamen der PDF-Ausgabe im HTTP-Header
Content-Disposition. Ohne Angabe wirdpublisher.pdfverwendet. keep- Auf
truesetzen, um das Arbeitsverzeichnis nach dem Download zu behalten. Ohne Angabe wird das Verzeichnis nach dem PDF-Abruf automatisch gelöscht.
Beispiel
curl "http://127.0.0.1:5266/v1/jobs/752869708/pdf?jobname=Vertrag2026" -o vertrag.pdf
Rückgabewerte
- 200 OK
- PDF wurde fehlerfrei generiert. Die Datei wird mit
Content-Type: application/pdfund einemContent-DispositionHeader zurückgegeben. Das Arbeitsverzeichnis wird anschließend gelöscht, sofern nichtkeep=trueangegeben wurde. - 404 Not Found
- ID ungültig.
- 406 Not Acceptable
- PDF wurde mit Fehlern generiert.
POST /v1/pdf
Sendet Daten an den Server und erhält das PDF in demselben Request zurück. Die Kodierung der Daten entspricht der von POST /v1/jobs, die Rückgabewerte entsprechen denen von GET /v1/jobs/{id}/pdf.
GET /v1/jobs/{id}/files/{filename}
Liefert eine beliebige Datei aus dem Arbeitsverzeichnis eines Publishing-Laufs. Nützlich z. B. für die Protokolldatei:
curl "http://127.0.0.1:5266/v1/jobs/752869708/files/publisher-protocol.xml"
- 200 OK
- Die Datei wird mit einem automatisch erkannten Content-Type zurückgegeben.
- 404 Not Found
- ID oder Dateiname ungültig.
DELETE /v1/jobs/{id}
Löscht das Arbeitsverzeichnis eines Publishing-Laufs.
- 204 No Content
- Erfolgreich gelöscht.
- 404 Not Found
- ID ungültig.
Beispiel
curl -X DELETE "http://127.0.0.1:5266/v1/jobs/752869708"
Komplettes Beispiel
Ein typischer Workflow mit der v1-API:
# 1. Job starten
ID=$(curl -s -X POST "http://127.0.0.1:5266/v1/jobs?vars=mode%3DVERTRAG" | jq -r '.id')
echo "Job gestartet mit ID: $ID"
# 2. Status prüfen (HTTP 202 = läuft noch, 200 = fertig)
curl -s "http://127.0.0.1:5266/v1/jobs/$ID"
# 3. PDF herunterladen (wartet auf Fertigstellung)
# Das Arbeitsverzeichnis wird danach automatisch gelöscht.
curl -s "http://127.0.0.1:5266/v1/jobs/$ID/pdf?jobname=Vertrag" -o Vertrag.pdf
Falls zusätzlich die Protokolldatei benötigt wird, muss das Arbeitsverzeichnis mit keep=true erhalten bleiben:
# 3a. PDF herunterladen, Arbeitsverzeichnis behalten
curl -s "http://127.0.0.1:5266/v1/jobs/$ID/pdf?jobname=Vertrag&keep=true" -o Vertrag.pdf
# 4. Protokolldatei abrufen
curl -s "http://127.0.0.1:5266/v1/jobs/$ID/files/publisher-protocol.xml" -o protokoll.xml
# 5. Arbeitsverzeichnis manuell löschen
curl -s -X DELETE "http://127.0.0.1:5266/v1/jobs/$ID"
