1. Überblick
Die gezeigte API ist als zentrale JSON-Schnittstelle aufgebaut. Es gibt keinen separaten URL-Pfad pro Funktion, sondern einen einzigen Einstiegspunkt. Welche Daten gelesen oder geschrieben werden, hängt davon ab, welche Felder im JSON-Body gesendet werden.
Erfolgen über das Feld
get, zum Beispiel "get": "object".
Erfolgen über das Feld
write, zum Beispiel "write": "settings".
2. Basisinformationen
| Eigenschaft | Beschreibung |
|---|---|
| Format | JSON |
| Antworttyp | application/json |
| Authentifizierung | Per JSON-Feld auth_key |
| HTTP-Methode | Praktisch als POST gedacht, da der Request-Body über php://input eingelesen wird |
| Backend | Datenzugriff über GBDB |
/api.php verwendet. Ersetze diesen Pfad durch die tatsächliche URL deiner API-Datei.
3. Authentifizierung & Rechte
Jeder Request muss ein Feld auth_key enthalten. Dieser Schlüssel wird gegen die in
GBDB::getData("mqr", "api") gespeicherten API-Keys geprüft.
Rechteklassen
| Interner Wert | Bedeutung | Erlaubt |
|---|---|---|
readonly |
Nur lesen | read |
write |
Nur schreiben | write |
readwrite |
Lesen und schreiben | read,write |
readonly und read.
Die Rechte-Mapping-Konstante nutzt readonly, die Key-Erstellung prüft aber auf read.
Mehr dazu weiter unten in den Hinweisen.
4. Request-Aufbau
Jeder Request ist ein JSON-Objekt. Das Minimum ist:
Dazu kommen je nach Aktion weitere Felder:
| Feld | Pflicht? | Beschreibung |
|---|---|---|
auth_key |
Ja | Authentifizierungsschlüssel |
get |
Bei Lesen | Welche Ressource gelesen werden soll |
write |
Bei Schreiben | Welche Ressource geschrieben werden soll |
| Weitere Felder | Je nach Aktion | Zum Beispiel oid, theme, name, intro, lid, permission |
5. Schnellstart
Beispiel: Alle Tours lesen
Beispiel: Settings ändern
6. Leseoperationen
Leseoperationen sind nur möglich, wenn der API-Key das Recht read enthält.
Dazu wird ein Request mit dem Feld get geschickt.
Liest Feedback-Daten aus mqr / feedback.
Request
Optional
Laut Code ist ein Filter auf item_id vorgesehen.
Erwartete Antwort
$resp
statt über $feedback iteriert. Außerdem wird beim ungefilterten Abruf success: false zurückgegeben,
obwohl Daten geliefert werden. Das wirkt wie ein Bug im Quellcode.
Liest Museumsobjekte. Die Daten werden aus mehreren Quellen zusammengesetzt:
objekte, objektimages, objektcontent und objektsrc.
Alle Objekte lesen
Ein einzelnes Objekt lesen
Antwort ohne oid
Antwort mit oid
Liest die allgemeinen MuseumQR-Einstellungen aus mqr / settings.
Antwort
Liest verfügbare Sprachen aus expokey / langs.
Liest verfügbare Touren aus expokey / tours.
7. Schreiboperationen
Schreiboperationen sind nur möglich, wenn der API-Key das Recht write enthält.
Dazu wird ein Request mit dem Feld write geschickt.
Erstellt einen neuen API-Key.
Request
Erlaubte Werte für permission
Antwort
$k gespeichert,
aber beim Datenobjekt versehentlich $key statt $k benutzt.
Das bedeutet: Die Rückgabe zeigt wahrscheinlich einen anderen Key als der tatsächlich gespeicherte Wert,
oder das Einfügen ist fehlerhaft. Dieser Punkt sollte im Code korrigiert werden.
Aktualisiert die MuseumQR-Einstellungen.
Pflichtfelder
Erlaubte Werte für theme
Request
Antwort
Fügt eine neue Sprache in expokey / langs hinzu.
Pflichtfelder
Request
Antwort
Existiert die lid bereits, wird ein Fehler zurückgegeben.
Erstellt eine neue Tour in expokey / tours.
Pflichtfelder
Request
Antwort
8. Antwortformat
Die API antwortet grundsätzlich mit JSON. Typische Strukturen:
Erfolg
Fehler
9. Fehlercodes
| HTTP-Code | Bedeutung | Beispiel |
|---|---|---|
200 |
Erfolgreicher Request | Daten gelesen oder geschrieben |
403 |
Authentifizierung fehlgeschlagen | {"error":"Auth failed"} |
406 |
Ungültiger Inhalt oder fehlende Rechte | Falsches Theme, doppelte LID, keine Schreibrechte |
10. Wichtige Hinweise zur aktuellen Implementierung
Diese Doku beschreibt die API so, wie sie nach dem gezeigten Quellcode aktuell gedacht beziehungsweise umgesetzt ist. Beim Lesen des Codes fallen allerdings ein paar Punkte auf, die technisch wichtig sind.
-
Feedback-Filter buggt vermutlich: Beim Filtern nach
item_idwird über$respiteriert, obwohl dort am Anfang noch nichts drin ist. Wahrscheinlich sollte über$feedbackgelaufen werden. -
Feedback ohne Filter liefert
success: false: Inhaltlich sieht das nach einem Versehen aus, da gleichzeitig echte Daten zurückgegeben werden. -
API-Key-Erstellung hat eine Variablenverwechslung: Der neue Schlüssel wird in
$kerzeugt, gespeichert werden soll aber$key. Das ist höchstwahrscheinlich falsch. -
Rechtebezeichnung uneinheitlich: In
PERMSstehtreadonly, bei der Validierung der Erstellung steht aberread. Das sollte vereinheitlicht werden. -
Die Funktion
test_param()ist extern: Sie wird in dieser Datei verwendet, aber nicht gezeigt. Diese Doku nimmt an, dass sie fehlende Pflichtfelder korrekt prüft und bei Fehlern abbricht.
11. Kompakte Endpunkt-Referenz
| Aktion | Body-Feld | Beschreibung | Recht |
|---|---|---|---|
| Feedback lesen | get: "feedback" |
Liest Feedback, optional nach item_id |
read |
| Objekte lesen | get: "object" |
Liest Objekt-Daten, optional nach oid |
read |
| Settings lesen | get: "settings" |
Liest allgemeine Einstellungen | read |
| Sprachen lesen | get: "langs" |
Liest ExpoKey-Sprachen | read |
| Touren lesen | get: "tours" |
Liest ExpoKey-Touren | read |
| API-Key erstellen | write: "api" |
Erstellt einen neuen API-Key | write |
| Settings speichern | write: "settings" |
Aktualisiert Theme, Name und Intro | write |
| Sprache anlegen | write: "langs" |
Fügt eine neue Sprache hinzu | write |
| Tour anlegen | write: "tours" |
Erstellt eine neue Tour | write |