am 02.05.2020 18:32
Hallo zusammen,
bei der Erstellung einer Order über die REST API bekomme ich die Fehlermeldung request.syntax.error - Die Anfrage war syntaktisch inkorrekt.
Ich hatte zuvor im Body dieses JSON Objekt übergeben:
{ bestEx = TRUE; depotId = XXXXXXXXXXXXXXXXXXXX; instrumentId = 0BA1CC9F418245638CE252DB2AAC4664; orderType = MARKET; quantity = "93.000"; side = BUY; validityType = GFD; venueId = NULL; }
das Objekt wird in Objective C als NSDictionary * order angelegt und an die REST API wie folgt übergeben:
NSError * error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:order options:NSJSONWritingPrettyPrinted error:&error]; [request setHTTPBody:jsonData];
Wo liegt der Fehler?
02.05.2020 20:26 - bearbeitet 02.05.2020 20:27
Falls die Darstellung hier im Forum jetzt nicht verfälscht ist, sondern den String im Original zeigt, so ist das syntaktisch kein richtiges JSON, was ja auch die Fehlermeldung aussagt.
Siehe hier: https://de.wikipedia.org/wiki/JavaScript_Object_Notation
am 03.05.2020 07:52
vielen Dank für die schnelle Antwort. Das JSON Objekt hatte ich als Dictionary "order" anglelegt. Das ist das, was oben gezeigt wurde. Dieses Dictionary wird dann in NSData umgewandelt:
[NSJSONSerialization dataWithJSONObject:order options:NSJSONWritingPrettyPrinted error:&error];
ich habe probeweise mal einen String "von Hand" zusammengebaut:
{"depotId":"4XXXXXXXXX","bestEx":"TRUE","orderType":"LIMIT","side":"BUY","instrumentId":"0BA1CC9F418245638CE252DB2AAC4664","venueId":"NULL","quantity":"2.000","limit":"0.0","validityType":"GFD"}
gibt aber die gleiche Fehlermeldung.
03.05.2020 13:23 - bearbeitet 03.05.2020 13:24
03.05.2020 13:23 - bearbeitet 03.05.2020 13:24
Versuch mal folgendes (nicht alles in JSON ist ein String)
"venueId":"NULL" -> "venueId":null
"bestEx":"TRUE" -> "bestEx":true
etc.
Ansonsten sieht Dein JSON auf den ersten Blick formal korrekt aus.
Viele Grüße
Stefan
PS: vielleicht auch noch "quantity" und "limit" in Floats umwandeln
PPS: ich rate hier nur, weil ich zwar JSON kenne, die API aber nicht, hast Du einen Link zur Doku?
am 03.05.2020 15:45
ja, die Zahlen hatte ich schon gesehen und ohne Anführungszeichen gesetzt
{"depotId": "4XXXXXXXX", "bestEx": true, "orderType": "LIMIT", "side": "BUY", "instrumentId": "BE448C5DFBA24584B14F74B0761460BE", "venueId": null, "quantity": 1.000, "limit": 0.0, "validityType": "GFD"}
das hat aber leider auch nicht geholfen. Die Doku beschränkt sich leider auf genau eine Zeile:
am 03.05.2020 16:59
Hmm, wir brauchen hier wohl die Definition von "JSON-Objekt Order", denn das ist genau das, was Du im Body des Requests schicken sollst.
Nix für ungut und viele Grüße
Stefan
am 03.05.2020 18:02
vielleicht kann ja ein comdirect-Fachmann die Doku mal entsprechend erweitern (und gerne vorab hier die Details nennen), sonst klappt das mit den Orders per API nicht.
am 04.05.2020 15:04
Hallo @WuuDuu,
die Beschreibung des JSON-Objekts Order findest du in der Doku im Kapitel 7.2.3 Order.
Hilft dir das weiter oder meinst du etwas anderes?
Beste Grüße
Jan-Ove
am 05.05.2020 13:05
Du meinst wahrscheinlich 7.2.2. Ja, danach hatte ich versucht das Objekt mit Mindestanforderungen zu erstellen. Ich verstehe nur die Fehlermeldung nicht. Wenn im Datensatz etwas fehlt ist das ja kein Syntaxfahler. Hat einer ein Code-Beispiel für das ERstellen von Orders?
am 06.05.2020 08:40
Hallo @WuuDuu,
in der aktuellen Dokumentation (Version April) findest du in Kapitel 11.2 zahlreiche Beispiele, wie der Body der Order-Schnittstelle aufgebaut werden muss. Außerdem kannst du in unserer Postman-Collection vordefinierte Requests finden, deren Aufrufe du dann von Postman in deine präferierte Programmiersprache exportieren lassen kannst.
Der Syntaxfehler bei deinem Request entsteht z.B. bei der Definition von quantity und limit. Hier wird neben dem Wert auch eine Einheit erwartet:
{"value":"5","unit":"XXX"}
Beste Grüße
Jan-Ove