REST Protokoll

Nachfolgend werden die Methoden und Parameter zum Zugriff auf das REST-API des Servers beschrieben. Wenn URLs variable Komponenten enthalten, werden diese {in geschweiften Klammern} angegeben und müssen bei der tatsächlichen Verwendung der URLs durch die korrekten Werte ersetzt werden.

Soweit in den URLs des REST-Protokolls Umlaute oder andere Zeichen außerhalb des ASCII-Bereichs verwendet werden sollen, müssen diese in URL-Codierung (vgl. https://de.wikipedia.org/wiki/URL-Kodierung) angegeben werden.

Bemerkung

Für die numerischen Werte in der URL-Codierung wird vorausgesetzt, dass sie sich auf die hexadezimale Angabe der UTF-8-Darstellung des betreffenden Zeichens beziehen.

Für die Codierung der Umlaute in URLs kann folgende Tabelle verwendet werden:

Zeichen

Unicode

UTF-8 hexadezimal

Ä

U+00C4

%C3%84

Ö

U+00D6

%C3%96

Ü

U+00DC

%C3%9C

ä

U+00E4

%C3%A4

ö

U+00F6

%C3%B6

ü

U+00FC

%C3%BC

Falls in einer URL z. B. das Wort „für“ verwendet werden soll, ist es daher durch die Zeichenfolge „f%C3%BCr“ zu kodieren.

Allgemeine Information

GET /api/version

Liefert Informationen über die Version des Duden Korrekturservers.

Request

GET /api/version HTTP/1.1
Content-Type: application/json
Accept: application/json

Response

Und die erwartete Antwort ist:

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json

{"Server version":"1.0","DPF version":"3.2.2"}

Prüfung und Silbentrennung

Prüft eines Text und/oder führt die Silbentrennung durch. Der zu prüfende Text wird zusammen mit etwaigen Parametern im Body des Requests im JSON-Format übergeben.

POST /api/check

Prüft einen Text.

Request

 POST /api/check HTTP/1.1
 Host: localhost:8099
 Content-Type: application/json
 Cache-Control: no-cache


 {
   "dictionaries": [
      "Tageszeitung",
      "jungblutt"
   ],

   "text-language": "de-DE",

   "property-sets": [
       "base",
       "Tageszeitung",
       "Kultur"
   ],

   "hyphenation": true,
   "spellchecking-level": 1,
   "correction-proposals": true,
   "single-word-mode": false,
   "message-language": "fr-LU",
   "message-level": 1,
   "text": "Das ist ein Endwurff f\u00fcr die Schnittstelle zum Duden-Server."
}

Response

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json

{
 "hyphenation-positions":[
   {"offset":15,"quality":0},
   {"offset":20,"quality":1}
 ],
 "check-positions":[
   {"offset":15,"length":6,"errorcode":4711,"type":"orth","severity":1,"proposals":["Entwurf","Entw\u00fcrfe"]},
  {"offset":22,"length":3,"errorcode":8221,"type":"orth","severity":1}
 ]
}

Das Ergebnis wird immer als JSON-Response geliefert, Content Negotiation findet nicht statt.

Parameter

Folgende Parameter können angegeben werden und werden zur Prüfung durchgereicht. Die Übergabe erfolgt als JSON-Array. Alle Parameter mit Ausnahme von text sind optional und werden mit Defaults besetzt.

Zusatzwörterbücher

Über den dictionaries Parameter kann eine Liste von Zusatzwörterbüchern übergeben werden, die bei der Verarbeitung verwendet werden sollen. Inhalt dieser Liste sind die Namen der zu verwendenden Wörterbücher.

"dictionaries": [
  "Tageszeitung",
  "Sport",
  "Ortsnamen im Bergischen Land"
]

Die angegebenen Wörterbücher müssen auf dem Server vorhanden sein. Die Pflege der Wörterbücher kann über das Web-Interface des Servers oder die Dictionary- API erfolgen.

Die Wörterbücher werden in der angegebenen Reihenfolge konsultiert. Für unbekannte Wörter ist dies ohne Belang. Bei der Silbentrennung und bei Negativeinträgen mit Korrekturvorschlägen kommt der zuerst gefundene Eintrag zum Tragen.

Voreinstellungen (Property Sets)

Mit dem Parameter property-sets können auf dem Server hinterlegte Voreinstellungen (Korrekturprofile, vgl. Serverseitige Einstellungen) selektiert werden.

"property-sets": [
  "base",
  "Tageszeitung",
  "Kultur"
]

Die Korrekturprofile werden in der angegebenen Reihenfolge ausgewertet, d. h. Einstellungen aus später angegebenen Profilen können Einstellungen aus früher angegebenen Profilen überschreiben.

Parameter für Prüfung und Trennung

Die folgenden Parameter steuern die Funktionen der Prüfung bzw. der Silbentrennung.

Name

Type

Default

Values

text

string

n/a

Der zu prüfende Text.

text-language

string

de-DE

de-DE, de-CH, de-AT, en, en-GB, en-US, fr, it, es, (RFC 5646)

spellchecking-level

int

1

0 = keine Prüfung, 1 = schnelle Rechtschreibprüfung, 2 = normale Rechtschreibprüfung, 3 = normale Rechtschreibprüfung und Grammatik

orthography-standard

string

duden

duden, conservative, progressive, extended, press

hyphenation

bool

false

Informationen zur Silbentrennung ausgeben

hyphenation-standard

string

combined

conservative, progressive, pronunciation, combined

hyphenation-in-stem

bool

true

hyphenation-unaest

bool

false

correction-proposals

bool

false

style-foreign

bool

false

style-old

bool

false

style-regional

bool

false

style-colloquial

bool

false

style-fillers

bool

false

style-offensive

bool

false

style-gender-inclusive

bool

false

single-word-mode

bool

false

glossary

bool

false

true = Glossareinträge auszeichen, false = Glossareinträge ignorieren

markup-mode

string

text

text, xml

message-language

string

de-DE

de-DE

message-level

int

0

0=keine, 1=kurz, 2=lang, 3=lang mit Beispiel

Kursive Parameter können auch über Korrekturprofile gesteuert bzw. je nach Einstellung durch Korrekturprofile überschrieben werden.

Der mögliche Prüfmodus (spellchecking-level) hängt von der gewählten Sprache ab. Für das Deutsche (Deutschland, Österreich und Schweiz) können alle Möglichkeiten verwendet werden, für die anderen Sprachen Englisch (en), en-GB (Englisch Großbritannien), en-US (Englisch USA) , fr (Französisch), it (Italienisch) oder es (Spanisch) steht nur eine normale Rechtschreibprüfung zur Verfügung.

Bemerkung

Wenn für die Sprachen en, en-GB, en-US, fr, it, oder es ein anderes spellchecking-level als 0 oder 2 angegeben wird, wird die normale Rechtschreibprüfung (spellchecking-level 2) verwendet.

Zusatzwörterbücher

Eine detaillierte Beschreibung von Zusatzwörterbüchern finden Sie im Abschnitt Zusatzwörterbücher.

Operationen auf Wörterbüchern

GET /api/dictionaries

Liefert Liste der verfügbaren Zusatzwörterbücher.

Request

GET /api/dictionaries HTTP/1.1
Accept: application/json

Response

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json

["0-Standard","Proposals","Tageszeitung"]
GET /api/dictionaries/{name}

Inhalt des Zusatzwörterbuchs name.

Request

GET /api/dictionaries/proposals HTTP/1.1
Accept: application/json

Response

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json

{"alias":"Proposals",
 "learned-words":["Schmackofatz","Haii"],
 "exceptions":[{"word":"Abschluss","correction":["Ende"]}],
 "hyphenations":[]}

Bemerkung

Aus Gründen der Abwärtskompatibilität mit älteren Clients wird das Ergebnis im XML-Format geliefert, falls kein Accept-Header übergeben wird.

GET /api/dictionaries/{name}/timestamp

Liefert den Zeitpunkt der letzten Änderung des Zusatzwörterbuchs name.

Request

GET /api/dictionaries/proposals/timestamp HTTP/1.1
Accept: application/json

Response

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json

{"last-modified":"2018-01-25T12:17:55+01:00"}

Das Ergebnis enthält den Zeitpunkt der letzten Änderung im ISO-8601 Format.

PUT /api/dictionaries/{name}

Speichert ein neues Wörterbuch unter dem Namen name. Der Inhalt des Dictionaries wird im Body des Requests im JSON-Format übergeben, das Format sollte im Content-Type-Header angegeben werden. Falls ein Wörterbuch name bereits bestehen sollte, wird der Inhalt des übertragenen Wörterbuchs diesem hinzugefügt.

Request

PUT /api/dictionaries/postman HTTP/1.1
Host: localhost:8099
Content-Type: application/json
Cache-Control: no-cache

{
  "description":"Geografische Begriffe",
  "learned-words":["fidunkeln"],
  "exceptions":[{"word":"Burma","correction":["Birma","Myanmar"]}],
  "hyphenations":[{"word":"fidunkeln","offsets":[{"offset":1,"quality":1},
                                         {"offset":4,"quality":1}]}]
}

Response

HTTP/1.1 201 Created
DELETE /api/dictionaries/{name}

Löscht das Wörterbuch mit dem Namen name. Das Wörterbuch name muss vorhanden sein, andernfalls wird ein Statuscode 404 geliefert.

Request

DELETE /api/dictionaries/postman HTTP/1.1
Host: localhost:8099
Cache-Control: no-cache

Response

HTTP/1.1 204 No Content

Liefert 404 wenn nicht gefunden. Liefert 204 wenn erfolgreich.

Operationen auf Wörterbucheinträgen

API-Funktionen zum Zugriff (CRUD) für Zusatzwörterbücher

POST /api/dictionaries/{name}/accept

Erzeugt einen neuen Positiv-Eintrag im Dictionary name. Das Wort muss als JSON-konformer String im Request-Body übergeben werden.

Request

POST /api/dictionaries/postman/accept HTTP/1.1
Host: localhost:8099
Cache-Control: no-cache

"flabuzz"

Response

HTTP/1.1 201 Created

Alternativ kann im Request-Body ein JSON-Objekt folgender Form übergeben werden:

POST /api/dictionaries/0-Standard/accept HTTP/1.1
Content-Type: application/json

{"word": "flabuzz"}
GET /api/dictionaries/{name}/accept/{word}

Liefert einen vorhandenen Positiv-Eintrag für word im Dictionary name. Liefert 404 wenn nicht gefunden.

Request

GET /api/dictionaries/postman/accept/flab%C3%BCzz HTTP/1.1
Host: localhost:8099
Cache-Control: no-cache

Response

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json

{
  "word": "flabüzz"
}
DELETE /api/dictionaries/{name}/accept/{word}

Löscht den Positiv-Eintrag für word im Dictionary name.

Request

DELETE /api/dictionaries/postman/accept/flab%C3%BCzz HTTP/1.1
Host: localhost:8099
Cache-Control: no-cache

Response

HTTP/1.1 204 No Content

Liefert 404 wenn nicht gefunden. Liefert 204 wenn erfolgreich.

POST /api/dictionaries/{name}/reject

Erzeugt einen neuen Negativ-Eintrag im Dictionary name. Das Wort und eine eventueller Ersetzungsvorschlag müssen im Request-Body übergeben werden.

Request

POST /api/dictionaries/postman/reject HTTP/1.1
Host: localhost:8099
Content-Type: application/json
Cache-Control: no-cache

{"word":"Abfahrt","correction":["Ende"]}

Response

HTTP/1.1 201 Created
GET /api/dictionaries/{name}/reject/{word}

Liefert einen vorhandenen Negativ-Eintrag für word im Dictionary name. Liefert 404 wenn nicht gefunden.

Request

GET /api/dictionaries/postman/reject/Abschluss HTTP/1.1
Host: localhost:8099
Cache-Control: no-cache

Response

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json

{
  "word": "Abschluss",
  "correction": [
     "Ende"
  ]
}
DELETE /api/dictionaries/{name}/reject/{word}

Löscht den Negativ-Eintrag für word im Dictionary name. Liefert 404 wenn nicht gefunden. Liefert 204 wenn erfolgreich.

POST /api/dictionaries/{name}/hyphenate

Erzeugt einen neuen Trenn-Eintrag im Dictionary name. Das Wort und seine Trennstellen müssen im Request-Body übergeben werden.

Request

POST /api/dictionaries/postman/hyphenate HTTP/1.1
Host: localhost:8099
Content-Type: application/json
Cache-Control: no-cache

{"word":"Abschlumps","offsets":[{"offset":1,"quality":2},
             {"offset":6,"quality":0}]}

Response

HTTP/1.1 201 Created
GET /api/dictionaries/{name}/hyphenate/{word}

Liefert einen vorhandenen Trenneintrag für word im Dictionary name. Liefert 404 wenn nicht gefunden.

Request

GET /api/dictionaries/postman/hyphenate/Abschlotz HTTP/1.1
Host: localhost:8099
Cache-Control: no-cache

Response

 HTTP/1.1 200 OK
 Transfer-Encoding: chunked
 Content-Type: application/json

 {
  "word": "Abschlotz",
  "offsets": [
    {
        "offset": 1,
        "quality": 2
    },
    {
        "offset": 6,
        "quality": 0
    }
  ]
}
DELETE /api/dictionaries/{name}/hyphenate/{word}

Löscht den Trenn-Eintrag für word im Dictionary name.

Vorschläge

Anwender können Vorschläge zur Aufnahme von Wörtern in Zusatzwörterbücher machen. Diese Vorschläge werden zunächst in einem speziellen Zusatzwörterbuch gesammelt und können bei Akzeptanz in ein anderes Wörterbuch verschoben werden.

POST /api/propose/accept

Request

POST /api/propose/accept HTTP/1.1
Accept: application/json
Content-Type: application/json

Ein typischer Request-Body sieht so aus:

"fidunkeln"

Response

Und die erwartete Antwort ist:

HTTP/1.1 201 Created

Bemerkung

Das Vorschlagswörterbuch mit dem voreingestellten Namen Proposals kann wie jedes andere Wörterbuch mit den normalen Funktionen zum Hinzufügen von Einträgen befüllt werden. Daher ist die Verwendung dieser Funktion nicht mehr erforderlich und wird nur aus historischen Gründen unterstützt.

Korrekturprofile

Im DKS können unterschiedliche Korrekturprofile definiert werden, die für die Korrektur verwendet werden können.

GET /api/propset

Liefert die hinterlegten Korrekturprofile zurück.

Request

GET /api/propset HTTP/1.1
Host: localhost:8099
Cache-Control: no-cache

Response

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json

[
  {
    "id": 2,
    "name": "base",
    "description": "Default settings for all TinyMCE users",
    "checklevel": 3,
    "language": "de-DE",
    "orthstd": "progressive",
    "hyphstd": false,
    "stemhyph": false,
    "unaesthyph": false,
    "styforeign": true,
    "styold": true,
    "styregional": true,
    "stycolloquial": true,
    "styfiller": true,
    "enforce": true
  }
]

Bemerkung

Alle Felder (außer ‚id‘, ‚name‘, ‚description‘) sind optional. Wenn diese nicht mit übertragen werden, sind die Einstellungen nicht näher spezifiziert.