Sonderzeichen in der URL
Die URL setzt sich aus folgenden Elementen zusammen:
https://API-Adresse:443/Articles/123456?additionalFields=4 \_____/\___________/\_/\______________/ \________________/ A B C D E A: Protokoll B: Host C: Port D: Pfad E: Abfrage'Protokoll', 'Host' und 'Port' werden durch die Einrichtung im Mobile Manager festgelegt. Der 'Pfad' gibt die Route mit den entsprechend gefüllten Parametern an. 'Abfrage' ist der Abschnitt hinter dem Fragezeichen '?', welcher meist optionale Parameter mitgibt.
Abfrage
Für die Abfrage erfolgt bereits die Encodierung. Diese übernimmt im Normalfall der Client selbst, sodass man hier nichts selbst encodieren muss. Mit folgender Abfrage kann die Suche, z.B. nach Artikeln, eingeschränkt werden.
Abschnitt der URL | Beschreibung |
---|---|
GET | Http Methode |
/Articles/Stock | Route |
? | Einleitung für eine Abfrage |
searchTerm=123/456 | Abfrage |
In der folgenden Abfrage wird der Slash '/' mit % 2F encodiert.
GET /Articles/Stock?searchTerm=123/456
Diese Abfrage wird zu:
GET /Articles/Stock?searchTerm=123%2F456
Pfad
Im 'Pfad' werden Sonderzeichen von der API dekodiert, jedoch nicht encodiert. Dieses muss vom Aufrufer manuell erfolgen!
Das bedeutet, dass zum Beispiel für die folgenden Route der, zwischen den Ziffern befindliche, Slash '/' nicht encodiert wird.
GET /Articles/123/456
Dieses löst unter anderem eine Exception aus, weil der Slash '/' als Teil des Pfades interpretiert wird.
Damit auch der URL Pfad encodiert wird, muss der Aufrufer selbst die Zeichen encodieren.
Dazu werden in der SelectLine API sämtliche Parameter, die direkt in der URL angegeben werden können, decodiert.
Die Encodierung macht aus '123/456' den Wert '123~2F456'. Die Decodierung wandelt diesen Wert wieder zurück.
Im Gegensatz zu der erwähnten Abfrage werden die Parameter hierfür nicht mit dem Prozentzeichen encodiert, sondern mit der Tilde '~'.
Der Grund dafür ist, dass man in der Route der HTTP Anfrage kein Prozent angeben darf.
Im folgenden Pfad einer URL wird der Slash '/' mit ~2F encodiert.
GET /Articles/123/456
Dieser Pfad wird zu:
GET /Articles/123~2F456
Um ein nicht erlaubtes Zeichen für die SelectLine API korrekt zu encodieren, müssen folgende Schritte abgearbeitet werden:
-
Der hexadezimale Wert des nicht erlaubten Zeichens muss aus der ASCII Tabelle ermittelt werden.
Zum Beispiel: Der hexadezimale Wert für Slash '/' ist 2F -
Dem ermittelten hexadezimalen Wert die Tilde '~' voranstellen.
Zum Beispiel: ~2F -
Das nicht erlaubte Zeichen durch die gebildete neue Zeichenkette ersetzen.
Zum Beispiel: 123~2F456
Die Tilde '~' darf daher nicht als Zeichen in Datensatzschlüsseln verwendet werden, wenn die Datensatzschlüssel über die API zum Einsatz kommen sollen.
Zu beachten ist, dass andere Sonderzeichen wie z.B. Prozent '%' ohne Encodierung und Decodierung ein ungewünschtes Verhalten auslösen.
Diese Sonderzeichen könnten z.B. als Teil der URL eingestuft werden.
Folgende Zeichen werden derzeit in der API decodiert:
Zeichen | Beschreibung | Hexadezimale Werte |
---|---|---|
/ | Schrägstrich (Slash) | 2F |
\ | umgekehrter Schrägstrich (Backslash) | 5C |
% | Prozent | 25 |
# | Raute | 23 |
" | Anführungszeichen | 22 |
& | Kaufmännisches Und | 26 |
? | Fragezeichen | 3F |
= | Gleichheitszeichen | 3D |
Leerzeichen | 20 | |
! | Ausrufezeichen | 21 |
* | Sternchen | 2A |
$ | Dollarzeichen | 24 |
' | einfaches Anführungszeichen | 27 |
( | runde Klammer auf | 28 |
) | runde Klammer zu | 29 |
+ | Plus | 2B |
: | Doppelpunkt | 3A |
; | Semikolon | 3B |
@ | At | 40 |
[ | eckige Klammer auf | 5B |
] | eckige Klammer zu | 5D |
, | Komma | 2C |
. | Punkt | 2E |
Ä | Ä | C4 |
Ö | Ö | D6 |
Ü | Ü | DC |
Γ | Gamma | 393 |
Δ | Delta | 394 |
Θ | Theta | 398 |
Λ | Lambda | 39B |
Ξ | Xi | 39E |
Π | Pi | 3A0 |
Σ | Sigma | 3A3 |
Φ | Phi | 3A6 |
Ψ | Psi | 3A8 |
Ω | Omega | 3A9 |