Anmelden

View Full Version : HTTPS Aufruf mit JSON Input



derMuller
17-11-17, 11:48
Hallo Zusammen,

ich habe bereits einige https Aufrufe auf unserer i5 mit Hilfe der LIBHTTP API durchgeführt.
In diesen Fällen habe ich aber immer XML als In- und Output verwenden.
Die Methode dafür war die "http_url_post_xml()".

Nun möchte ich das Gleiche mit JSON machen. Kann mir jemand sagen wie und ob das funktioniert? Evtl. gibt es auch eine bessere Methode z.B. via SQL oder ähnliches.
Unsere i5 hat aktuell die Version V7R2.

Danke im Voraus!

Gruß
derMuller

dschroeder
17-11-17, 11:58
Wir holen uns Daten eines Webservices mit den SQL-Funktionen aus SYSTOOLS.
Z,B.:



select * from JSON_TABLE(systools.httpGetClob(:url,:header),
'$'
columns(
totalHits decimal(12) PATH 'lax $.totalHits',
offset decimal(12) PATH 'lax $.offset',
limit decimal(12) PATH 'lax $.limit',
nested '$.hits
'
columns(
hits_type varchar(40) path 'lax $.type',
hits_id decimal(15) path 'lax $.id',
hits_score decimal(15, 6) path 'lax $.score',
hits_anschrift varchar(500) path 'lax $.anschrift'
)
)
) as liste
order by hits_score desc;


Wir haben 7.3. Ich glaube, JSON_TABLE kam erst mit 7.3.

Dieter

derMuller
17-11-17, 12:22
Wir holen uns Daten eines Webservices mit den SQL-Funktionen aus SYSTOOLS.
Z,B.:



select * from JSON_TABLE(systools.httpGetClob(:url,:header),
'$'
columns(
totalHits decimal(12) PATH 'lax $.totalHits',
offset decimal(12) PATH 'lax $.offset',
limit decimal(12) PATH 'lax $.limit',
nested '$.hits
'
columns(
hits_type varchar(40) path 'lax $.type',
hits_id decimal(15) path 'lax $.id',
hits_score decimal(15, 6) path 'lax $.score',
hits_anschrift varchar(500) path 'lax $.anschrift'
)
)
) as liste
order by hits_score desc;


Wir haben 7.3. Ich glaube, JSON_TABLE kam erst mit 7.3.

Dieter

Das wäre auch meine favorisierte Lösung! Danke dafür!
Nur leider haben sowohl wir, als auch unserer Kunden nur die Version V7R2 :(

Rainer Ross
17-11-17, 13:19
Hallo,
die gute Nachricht ist, dass JSON_TABLE auch für 7.2 über das TR6 verfügbar ist.



Select x.*
from JSON_TABLE(
SYSTOOLS.HTTPGETCLOB('http://www.myhofi.com/myapp/websrv01.pgm?id=1',''),
'$'
Columns(
nested '$.items
' columns (
"Id" integer path 'lax $.id',
"Name" varchar(40) path 'lax $.name',
"Country" varchar(2) path 'lax $.country',
"City" varchar(40) path 'lax $.city',
"Street" varchar(40) path 'lax $.street',
"Sales" dec(15, 2) path 'lax $.sales',
"Credit" dec(15, 2) path 'lax $.credit',
"Balance" dec(15, 2) path 'lax $.balance',
"Date" varchar(10) path 'lax $.date'
)
)
) x;


Das Beispiel ist OpenSource und auf Github über folgenden Link zu erreichen
https://github.com/RainerRoss/WEBSRVUTL/blob/master/Requests/HTTPGETCLOB_JSON_TABLE.sql

derMuller
05-12-17, 11:05
Hallo Zusammen,

das mit dem TR6 war ein guter Tipp, danke dafür :).
Damit funktioniert dann auch die Methode "HttpPostClob". (zumindest auf unserem System).
Leider gibt es einen Fehler wenn ich den gleichen Befehl auf einem anderen System ausführe!

Beide Systeme habe die PTF Group SF99702 mit Level 16 installiert.
Trotzdem scheint auf einem System etwas zu fehlen.
Der folgende Befehl funktioniert nur auf einem der Systeme:

select systools.httppostclob(url, cast('header' as clob(1K)), cast('<input>' as clob(10k))) from sysibm.sysdummy1

Nun erhalte ich auf dem einen System den Fehler:
CAST von CHAR FOR BIT DATA in CLOB nicht unterstützt.

Weiß jemand wie man raus finden kann, welche PTF's benötigt werden?
Oder liegt es vielleicht an etwas anderem?

Danke im Vorraus!

Gruß
derMuller