Syntax der REST-Schnittstelle von FreeDoko

# Syntax

## Grundpfad

- /: Hilfe zum Aufruf
- /version: Die Version
- /license: Die Lizenz
- /quit: Den Service beenden

## Debug-Informationen

Mit `debug` können verschiedene Debug-Informationen angefordert werden. Diese werden mit einer Zeile Abstand ergänzt.

- /debug/Blatt: Es wird das Blatt mit ausgegeben.
- /debug/-Blatt: Deaktiviert die Blatt-Debug-Informationen.
- /debug/KI: Es wird eine Erläuterung zur KI-Entscheidung mit ausgegeben.
- /debug/-KI: Deaktiviert die KI-Debug-Informationen.

## Abfragen

Eine Abfrage enthält die Spielernummer, den Abfragetyp und den Spielverlauf.
Syntax ist: Spielernummer/Abfragetyp?Spielverlauf.

### Spielernummer

Die Spielernummer ist einer der Werte 0, 1, 2 oder 3. In den folgenden Beispielen wird als Spielernummer die 0 verwendet.

### Abfragetyp

Die folgenden Abfragetypen existieren:

#### Vorbehalt

Syntax: reservation

Rückgabe: Vorbehalt, gegebenenfalls ergänzt durch weitere Informationen Werte: Spieltyp, zum Beispiel `normal`, `marriage`, `poverty`
Ergänzende Angabe (nur bei einer Hochzeit): Art des Klärungsstichs, zum Beispiel `first color`. Ohne Angabe wird der erste Fremde genommen
Ergänzende Angaben: `swines`, `hyperswines`

Beispiel: `normal`
Beispiel: `marriage`
Beispiel: `marriage, first color`
Beispiel: `solo meatless`

#### Karte

Syntax: card

Rückgabe: eine Karte
Werte: `club`|`spade`|`heart`|`diamond` `ace`|`ten`|`king`|`queen`|`jack`|`nine`

Beispiel: `club queen`
Beispiel: `heart ace`

#### Ansage

Syntax: announcement

Rückgabe: eine Ansage
Werte: `no announcement`, `no 120`, `no 90`, `no 60`, `no 30`, `no 0`

## Spielangaben

Eine Spielangabe besteht grundsätzlich aus Kennwort und Wert, getrennt mit einem „=“, zum Beispiel `startplayer=0` Die Spielangaben werden mit einem „&“ voneinander getrennt, zum Beispiel `with nines=false&dullen&startplayer=0`.

Die Spielangaben sind in entsprechend in der entsprechenden Reihenfolge anzugeben.

### Regeln

Die Regeln werden einzeln angegeben. Grundsätzlich gelten die offiziellen Turnierregeln. Abweichungen davon müssen angegeben werden

Beispiele:

- `without nines`
- `no with nines`
- `with nines = false`
- `dullen`
- `dullen = true`
- `dullen=1`
- `swines`
- `swines announecement begin`

### Startspieler

Der Startspieler ist einer der Werte 0, 1, 2 oder 3.

Beispiel:

- `startplayer = 0`

### Hand

Für die Hand werden die einzelnen Karten (12 beim Spiel mit Neunen, 10 beim Spiel ohne Neunen) mit Komma getrennt angegeben.

Beispiele:

- `hand = diamond ace,heart ten,diamond jack,heart nine,club jack,heart ace,heart ten,club queen,heart jack,spade ace,club nine,diamond jack`
- `hand = club queen,club queen,spade queen,spade queen,heart queen,heart queen,club ace,club ace,club ten,diamond ace`

### Spieltyp

Der Spieltyp wird gegebenenfalls um weitere Angaben (zum Beispiel Solospieler) ergänzt, diese werden mit Komma getrennt.

Aktuell wird als Spieltyp nur „normal“ unterstützt.

Beispiele

- `game type = normal`
- `game type = marriage, first foreign`
- `game type = solo meatless, 0`

### Spielaktion

Die verschiedenen Spielaktionen werden in Reihenfolge angegeben.

Aktuell wird nur `card played` unterstützt. Die Spielaktion `annonucement` ist noch fehlerhaft.

Beispiele:

- `card played=0, club queen`: Spieler 0 hat eine Kreuz Dame gespielt
- `card played=1, diamond jack`: Spieler 1 hat einen Karo Buben gespielt
- `announcement=2, re`: Spieler 2 hat Re angesagt
- `swines=3`: Spieler 3 hat Schweine angesagt

# Beispiele

## Vorbehalt

- Normalspiel (Re): normal
- Normalspiel (Kontra): normal
- Hochzeit: marriage
- Bubensolo: solo jack
- Damensolo: solo queen
- Königen: solo king
- Fleischlos: solo meatless

## Karte

- Kreuz Dame
- Pik Zehn
- Karo Zehn (mehrere Sekunden Wartenzeit)
- Herz Ass (Startkarte im Solo)

## Ansage

- Keine 120

## Fehlerhafte Eingabe

- Zuwenig Karten
- Zuviele Karten
- falsche Karte