Markus Michalski FAQ

API Endpoints: Technik

Technische Details des osTicket-Plugins API Endpoints: Signal-Routen, eigenständige Endpunkt-Dateien, Request-Ablauf, Verzeichnisstruktur, Datenbankspalten, Sicherheit und Tests.

English Version

Zurück zur Übersicht

API Endpoints: Technik

Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.

Architektur

Das Plugin nutzt zwei Wege in die API von osTicket:

Signal Handler Zweck
api onApiRequest() Registriert die beiden Routen für Ticket-Erstellung und Update
graph TD
    A["Client-Anfrage"] --> B["POST /api/tickets.json oder PATCH /api/tickets/:number.json"]
    A --> C["Endpunkt-Dateien in /api/, zum Beispiel tickets-get.php"]
    B --> D["Signal api, onApiRequest"]
    D --> E["ExtendedTicketApiController"]
    C --> F["ApiBootstrap"]
    F --> E
    F --> G["SubticketApiController"]
    E --> H["Services und osTicket-Core"]
    G --> H
    H --> I["Antwort als JSON, XML oder Klartext"]

Ablauf bei einem eigenständigen Endpunkt

sequenceDiagram
    participant C as Client
    participant E as Endpunkt-Datei
    participant B as ApiBootstrap
    participant K as Controller
    participant P as PermissionChecker
    participant S as Service

    C->>E: GET /api/tickets-get.php/781258.json
    E->>B: Pfad zerlegen und Methode prüfen
    E->>K: getTicket(number)
    K->>P: can_read_tickets verlangen
    P-->>K: erlaubt oder 401
    K->>S: TicketService.getTicket
    S-->>K: Ticketdaten
    K-->>B: Array
    B-->>C: JSON oder XML

ApiBootstrap ist die gemeinsame Basis aller Endpunkt-Dateien: Sie zerlegt den Pfad mit einem regulären Ausdruck, prüft die HTTP-Methode (405), liest den JSON-Body und sendet erfolgreiche Antworten und Fehler. Exceptions tragen den HTTP-Statuscode.

Schichten

Teil Datei Aufgabe
Controller controllers/ExtendedTicketApiController.php Erweitert TicketApiController von osTicket: Erstellen, Aktualisieren, API-Key-Prüfung
controllers/SubticketApiController.php Subticket-Operationen, optionale Abteilungsprüfung, Plugin-Prüfung
Services lib/Services/TicketService.php Abrufen, Suche, Statistik, Status, Löschen
lib/Services/TicketValidatorService.php Validierung und Namensauflösung von Format, Abteilung, Hilfethema, Status, SLA, Mitarbeiter, Elternticket, Fälligkeitsdatum
lib/Services/PermissionChecker.php Liest die Berechtigungsspalten des API-Keys
lib/Services/AttachmentService.php Attachment-Download mit Prüfung gegen die Anhang-Tabelle
Enums lib/Enums/ Permission, MessageFormat, SortField
Helfer lib/ApiBootstrap.php, lib/XmlHelper.php Request-Verarbeitung und XML-Ausgabe

Verzeichnisstruktur

api-endpoints/
├── api/                          # Endpunkt-Dateien, werden nach /api/ kopiert
│   ├── tickets-get.php
│   ├── tickets-update.php
│   ├── tickets-delete.php
│   ├── tickets-search.php
│   ├── tickets-stats.php
│   ├── tickets-statuses.php
│   ├── tickets-attachment-download.php
│   └── tickets-subtickets-{parent,list,create,unlink}.php
├── assets/
│   └── admin-apikey-extension.js # Admin-Skript, vom Plugin-Code nicht geladen
├── controllers/
├── lib/
│   ├── ApiBootstrap.php
│   ├── XmlHelper.php
│   ├── Enums/
│   └── Services/
├── tests/                        # PHPUnit-Tests (Unit, Integration)
├── docs/
├── class.ApiEndpointsPlugin.php  # Plugin-Klasse ApiEndpointsPlugin
├── config.php                    # Config-Klasse ApiEndpointsConfig
├── plugin.php                    # Plugin-Manifest
├── htaccess.template             # Rewrite-Regeln für /api/.htaccess
└── openapi.yaml                  # OpenAPI-Beschreibung

Datenbank

Das Plugin ergänzt die API-Key-Tabelle von osTicket um sechs Spalten vom Typ TINYINT(1) UNSIGNED NOT NULL DEFAULT 0: can_update_tickets, can_read_tickets, can_search_tickets, can_delete_tickets, can_read_stats und can_manage_subtickets. Die Spalten werden angelegt, wenn sie fehlen, vorhandene Daten bleiben unangetastet. Das Deaktivieren oder Entfernen des Plugins löscht sie nicht.

Gut zu wissen

Sicherheit

Tests

Die Tests laufen mit PHPUnit:

composer install
composer test              # alle Tests
composer test:unit         # nur Unit-Tests
composer test:integration  # nur Integrationstests
composer test:coverage     # HTML-Coverage-Report

OpenAPI

Das Repository enthält openapi.yaml mit einer OpenAPI-Beschreibung der Endpunkte. Wo beide abweichen, gilt diese Dokumentation als Referenz.