Hallo zusammen,
ich soll aus einer VO App mit einem restAPI im Internet kommunizieren, hier die Beschreibung: https://api.sevdesk.de/
Geht das irgendwie, ich sehe dabei ein paar Probleme:
- https:// Aufruf statt http://
- zusätzlich zu GET und POST gibt es PUT und DELETE
- API Key über Authorization Header übergeben
Hat jemand sowas schon mal gemacht, wie kann man das lösen?
VO und restAPI
Moderator: wriedmann
VO und restAPI
Hallo Franz,
ich habe das über eine COM-Komponente in X# gelöst, und zwar auf einer höheren Ebene, weil ich das Parsen der JSON-Ergebnisse nicht in VO schreiben wollte, sondern die entsprechenden Routinen im .NET Framework genutzt habe.
Nach VO kommt dann einfach ein COM-Objekt mit den entsprechenden Eigenschaften zurück.
Wolfgang
P.S. sorry, wenn da immer ähnliche Antworten kommen. Für einen Pensionisten, der für seine Kunden kostenfrei arbeitet, bist Du aber ganz schön aktiv
ich habe das über eine COM-Komponente in X# gelöst, und zwar auf einer höheren Ebene, weil ich das Parsen der JSON-Ergebnisse nicht in VO schreiben wollte, sondern die entsprechenden Routinen im .NET Framework genutzt habe.
Nach VO kommt dann einfach ein COM-Objekt mit den entsprechenden Eigenschaften zurück.
Wolfgang
P.S. sorry, wenn da immer ähnliche Antworten kommen. Für einen Pensionisten, der für seine Kunden kostenfrei arbeitet, bist Du aber ganz schön aktiv
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
VO und restAPI
Hallo Wolfgang,
ich arbeite nicht immer kostenfrei für meine Kunden, das gilt nur für die Verwandtschaft und fürs Registrierkassenmodul, das meine Kunden ja bereits bei ITG Consulting gekauft haben.
Für das neue Projekt muss ich die Artikel aus der lokalen Lagerverwaltung ins SevDesk im Internet übertragen, dazu benötige ich 3 Aufrufe:
Kann das dein Com-Modul abdecken?
Würdest du den Sourcecode für diese 3 Aufrufe und JSON verkaufen?
Alternativ könnte ich die Aufrufe wahrscheinlich über Commandline und Curl abwickeln.
ich arbeite nicht immer kostenfrei für meine Kunden, das gilt nur für die Verwandtschaft und fürs Registrierkassenmodul, das meine Kunden ja bereits bei ITG Consulting gekauft haben.
Für das neue Projekt muss ich die Artikel aus der lokalen Lagerverwaltung ins SevDesk im Internet übertragen, dazu benötige ich 3 Aufrufe:
- POST https://my.sevdesk.de/api/v1/Part mit einem JSON Body für Neuanlage eines Artikels
- DELETE https://my.sevdesk.de/api/v1/Part?partID=1234567 zum Löschen eines Artikels
- PUT https://my.sevdesk.de/api/v1/Part?partID=1234567 mit einem JSON Body zum Update eines Artikels
Kann das dein Com-Modul abdecken?
Würdest du den Sourcecode für diese 3 Aufrufe und JSON verkaufen?
Alternativ könnte ich die Aufrufe wahrscheinlich über Commandline und Curl abwickeln.
VO und restAPI
Hallo Franz,
wie man es in VO macht kann ich nicht beantworten aber in .NET und somit vermutlich auch in x# sollte es via einem HTTPwebrequest machbar sein. Damit werden alle Methoden unterstützt und die Vorgabe welches TLS Protokoll verwendet werden soll ist auch möglich.
https://docs.microsoft.com/de-de/dotnet ... ew=net-6.0
https://docs.microsoft.com/de-de/dotnet ... ew=net-6.0
Zum Erzeugen von Json Objekten hat sich das JsonConvert.SerializeObject bewährt.
https://www.newtonsoft.com/json/help/ht ... Object.htm
Über den „Advanced REST Client“ von Google lassen sich solche Webservice Calls auch ohne Implementierung erst mal sehr einfach testen. Soweit ich mich erinnere erzeugt dieser auch Code für den Aufruf für verschiedene Sprachen.
https://chrome.google.com/webstore/deta ... dfbfbjeloo
Ich hatte mal vor Jahren in VB6 über die COM Komponenten MSXML2.ServerXMLHTTP und MSXML2.DOMDocument einen Webservice Aufruf umgesetzt, bin mir aber nicht sicher ob damit alle Anforderungen abgedeckt werden können.
Christian
wie man es in VO macht kann ich nicht beantworten aber in .NET und somit vermutlich auch in x# sollte es via einem HTTPwebrequest machbar sein. Damit werden alle Methoden unterstützt und die Vorgabe welches TLS Protokoll verwendet werden soll ist auch möglich.
https://docs.microsoft.com/de-de/dotnet ... ew=net-6.0
https://docs.microsoft.com/de-de/dotnet ... ew=net-6.0
Zum Erzeugen von Json Objekten hat sich das JsonConvert.SerializeObject bewährt.
https://www.newtonsoft.com/json/help/ht ... Object.htm
Über den „Advanced REST Client“ von Google lassen sich solche Webservice Calls auch ohne Implementierung erst mal sehr einfach testen. Soweit ich mich erinnere erzeugt dieser auch Code für den Aufruf für verschiedene Sprachen.
https://chrome.google.com/webstore/deta ... dfbfbjeloo
Ich hatte mal vor Jahren in VB6 über die COM Komponenten MSXML2.ServerXMLHTTP und MSXML2.DOMDocument einen Webservice Aufruf umgesetzt, bin mir aber nicht sicher ob damit alle Anforderungen abgedeckt werden können.
Christian
Christian Schmid
-
- Posts: 97
- Joined: Tue Mar 01, 2016 11:50 am
- Location: Germany
VO und restAPI
Hallo Franz,
....das sollte auch direkt mit VO ohne COM funktionieren.
Von Norbert Kolb gibt es dazu eine Methode 'GetDocumentByGetOrPost() als Erweiterung zur cHttp-Klasse.
An diese Methode werden als Parameter die Hostadresse, der Folder für den Aufruf der API-Methode, die Daten zur Verarbeitung im JSON-Format, die auszuführende Methode sowie HTTP oder HTTPS und evtl. Flags übergeben. Von diesem 'GetDocumentByGetOrPOst' kommt dann ein String der aufgerufenen Methode zurück - mit dem Abfrageergebnis oder der Fehlermeldung.
cHost := 'rgw..........-de-de.apiconnect.appdomain.cloud'
cFolder := '/musterordner/default/rest/v2/labels'
cHeader := 'x-ibm-client-id: ' + SELF:cClientId + CrLf + ;
'content-type: application/json' + CrLf + ;
'accept: application/json' + CrLf + CrLf
cPostData := '{"format":"P","count":3,"shipment":{"division":"T","product":"Y","shipmentDate":"' + SELF:cShipmentDate + '","deliveryDate":"' + SELF:cDeliveryDate + '","forwarder":......................{"code":"100","value":"Customer_Order_Number"}]}}'
cPage := SELF:oHttp:GetDocumentByGetOrPost(cHost,;
cFolder,;
cPostData,;
cHeader,;
"POST",;
INTERNET_DEFAULT_HTTPS_PORT,;
INTERNET_FLAG_SECURE)
Die Rückgabe wird dann in cPage ausgewertet.
Hier der Link zum Download von der VOUG-Bodensee - ziemlich weit unten:
http://www.voug-bodensee.net/DownLoad/D ... ublic.html
HTH
Gerhard Bunzel
....das sollte auch direkt mit VO ohne COM funktionieren.
Von Norbert Kolb gibt es dazu eine Methode 'GetDocumentByGetOrPost() als Erweiterung zur cHttp-Klasse.
An diese Methode werden als Parameter die Hostadresse, der Folder für den Aufruf der API-Methode, die Daten zur Verarbeitung im JSON-Format, die auszuführende Methode sowie HTTP oder HTTPS und evtl. Flags übergeben. Von diesem 'GetDocumentByGetOrPOst' kommt dann ein String der aufgerufenen Methode zurück - mit dem Abfrageergebnis oder der Fehlermeldung.
cHost := 'rgw..........-de-de.apiconnect.appdomain.cloud'
cFolder := '/musterordner/default/rest/v2/labels'
cHeader := 'x-ibm-client-id: ' + SELF:cClientId + CrLf + ;
'content-type: application/json' + CrLf + ;
'accept: application/json' + CrLf + CrLf
cPostData := '{"format":"P","count":3,"shipment":{"division":"T","product":"Y","shipmentDate":"' + SELF:cShipmentDate + '","deliveryDate":"' + SELF:cDeliveryDate + '","forwarder":......................{"code":"100","value":"Customer_Order_Number"}]}}'
cPage := SELF:oHttp:GetDocumentByGetOrPost(cHost,;
cFolder,;
cPostData,;
cHeader,;
"POST",;
INTERNET_DEFAULT_HTTPS_PORT,;
INTERNET_FLAG_SECURE)
Die Rückgabe wird dann in cPage ausgewertet.
Hier der Link zum Download von der VOUG-Bodensee - ziemlich weit unten:
http://www.voug-bodensee.net/DownLoad/D ... ublic.html
HTH
Gerhard Bunzel
VO und restAPI
Hallo Franz,
was ich gemacht habe, ist was anderes: ich habe eine COM-DLLgeschrieben, die die REST-Aufrufe komplett kapseln, und auch nicht ein JSON zurückgeben, sondern ein normales COM-Objekt, das alle Eigenschaften beinhaltet, die das JSON haben kann.
Aber ja, eine generische COM-DLL sollte sich auch erstellen lassen. Nur verschenkt man da IMHO sehr viel von dem, was .NET kann, weil man sich den Parser in VO mühsam schreiben kann, während es unter .NET funktionierende JSON-Parser gibt.
Dasselbe gilt für das Serialisieren von JSON-Objekten - in .NET erledigen Dir das vorhandene Klassen, in VO musst Du das selber schreiben.
Aber wie der Gerhard geschrieben hat: sollte auch mit det Methode GetDocumentByGetOrPost() funktionieren, die habe ich auch irgendwo im Einsatz. Ich habe allerdings keine Ahnung, ob die zugrundeliegenden WinINet-Klassen z.B. TLS 1.2 unterstützen.
Wolfgang
was ich gemacht habe, ist was anderes: ich habe eine COM-DLLgeschrieben, die die REST-Aufrufe komplett kapseln, und auch nicht ein JSON zurückgeben, sondern ein normales COM-Objekt, das alle Eigenschaften beinhaltet, die das JSON haben kann.
Aber ja, eine generische COM-DLL sollte sich auch erstellen lassen. Nur verschenkt man da IMHO sehr viel von dem, was .NET kann, weil man sich den Parser in VO mühsam schreiben kann, während es unter .NET funktionierende JSON-Parser gibt.
Dasselbe gilt für das Serialisieren von JSON-Objekten - in .NET erledigen Dir das vorhandene Klassen, in VO musst Du das selber schreiben.
Aber wie der Gerhard geschrieben hat: sollte auch mit det Methode GetDocumentByGetOrPost() funktionieren, die habe ich auch irgendwo im Einsatz. Ich habe allerdings keine Ahnung, ob die zugrundeliegenden WinINet-Klassen z.B. TLS 1.2 unterstützen.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
VO und restAPI
Hallo Leute,
mit Unterstützung von Norbert habe ich die 4 benötigten Aufrufe (GET, DELETE, POST und PUT) inzwischen zum Laufen bekommen.
PS: Gibt es irgendwo schon eine Funktion für VO die einen JSON String zerlegt und auswertet?
LG Franz
mit Unterstützung von Norbert habe ich die 4 benötigten Aufrufe (GET, DELETE, POST und PUT) inzwischen zum Laufen bekommen.
PS: Gibt es irgendwo schon eine Funktion für VO die einen JSON String zerlegt und auswertet?
LG Franz
-
- Posts: 97
- Joined: Tue Mar 01, 2016 11:50 am
- Location: Germany
VO und restAPI
Hallo Franz,
im Anhang etwas, was ich zu JSON gefunden habe.
Wurde von mir aber nie benutzt.
HTH
Gerhard
im Anhang etwas, was ich zu JSON gefunden habe.
Wurde von mir aber nie benutzt.
HTH
Gerhard
- Attachments
-
- JsonParser.zip
- (14.86 KiB) Downloaded 147 times
- ArneOrtlinghaus
- Posts: 412
- Joined: Tue Nov 10, 2015 7:48 am
- Location: Italy
VO und restAPI
Ich habe diese Jsonparser-Klassen für unsere Zwecke umgebaut/erweitert und für das Parson von JSON-Files benutzt, siehe Anhang. Ich weiß nicht, was alles noch an Funktionen fehlt. Falls jemand Interesse hat, bitte melden mit Angabe der benötigten Funktionen.
Wenn man nur von einer Quelle JSON-Dateien bekommt und nur einache Antworten auswerten will, dann ist auch die "dreckige" Variante möglich: mit String-Operationen die Stellen suchen und extrahieren. Das JSON-Format ist ja so schön klargehalten. Wo man aufpassen muss, ist das Dateiformat. Oft sind die JSON-Dateien im UTF8-Format, so dass man eine Konvertierung machen muss, falls nichtenglischen Zeichen auftauchen.
Arne
Wenn man nur von einer Quelle JSON-Dateien bekommt und nur einache Antworten auswerten will, dann ist auch die "dreckige" Variante möglich: mit String-Operationen die Stellen suchen und extrahieren. Das JSON-Format ist ja so schön klargehalten. Wo man aufpassen muss, ist das Dateiformat. Oft sind die JSON-Dateien im UTF8-Format, so dass man eine Konvertierung machen muss, falls nichtenglischen Zeichen auftauchen.
Arne
- Attachments
-
- jsonparser.zip
- (14.45 KiB) Downloaded 142 times
VO und restAPI
Hallo Gerhard, hallo Arne!
Ich habe derzeit auch die "dreckige" Variante eingebaut: Ich trenne die einzelnen Datensätze in ein Array auf und suche dann in den einzelnen Arrayelementen nach den benötigten Strings und der Werte. Das reicht fürs erste mal, ich schau mir die jsonparser.zip aber danach an, kann man ja öfter verwenden.
Danke, Franz
Ich habe derzeit auch die "dreckige" Variante eingebaut: Ich trenne die einzelnen Datensätze in ein Array auf und suche dann in den einzelnen Arrayelementen nach den benötigten Strings und der Werte. Das reicht fürs erste mal, ich schau mir die jsonparser.zip aber danach an, kann man ja öfter verwenden.
Danke, Franz