-
Ich habe mich jetzt (auch aufgrund eurer Antworten) dazu durchgerungen, einen POST Service zu implementieren. Ich habe eine SQL-UDF erstellt, die einen Clob als JSON-Input bekommt und die einen Clob als JSON-Antwort zurückgibt.
Die Antwort-Clobs werden nicht vom IWS generiert, sondern ich baue sie selber mit den SQL-JSON-Funktionen zusammen.
Jetzt habe ich noch ein Problem:
Im IWS definiere ich das auszuführende SQL, also im wesentlichen den Aufruf meiner UDF. Ich würde sehr gerne den HTTP-Statuscode von meiner UDF aus beeinflussen. Wenn ich den IWS Wizzard richtig verstehe, gibt es da aber nur die beiden Ausprägungen 200 bei Erfolg und 500 bei Misserfolg. Ich kann den Code nicht selber beeinflussen, so dass z.B. ein 404 zurückkommt. (Klar, ich kann die 500 im IWS z. B. fest durch 404 ersetzen. Aber dann kommt ja immer 404 zurück. Das ist natürlich nicht, was ich will.)
Aber das ist noch nicht alles:
Unsere RPG-based Webservices geben bei Erfolg das angeforderte Antwort-Json zurück. Bei Misserfolg kommt ein standardisiertes Fehler-JSON zurück, dass z.B. die Fehlernachricht, das betroffene Programm usw. enthält.
Bei meinem SQL basierten Webservice habe ich da jetzt ein Problem:
Wenn die SQL-UDF keinen Fehler enthält, kommt das gewünschte JSON zurück und der Statuscode 200 wird vom IWS zurückgegeben.
Wenn ich aber einen fachlichen Fehler habe (z.B. Authentifizierungstoken ungültig), erzeuge ich das Fehler-JSON-Objekt und gebe das zurück. Das ist technisch gesehen aber kein Fehler für SQL. Deshalb kommt auch im (fachlichen) Fehlerfall als Statuscode 200 zurück. Das ist sehr unschön.
Ich habe bereits damit experimentiert, mittels der SIGNAL Anweisung im SQL einen SQL-Fehler auszulösen. Dann gibt IWS auch wirklich den Statuscode 500 zurück. Aber dann kommt mein Antwort-JSON nicht zurück, sondern ein SQL-Message-String.
Code:
-- Prüfung Authorization:
set resultClob = clob(DAX99##_checkAuthorization(token, clientId,
role, pgmName, procName, 0, httpStatusCode));
-- Prüfung Authorization nicht erfolgreich:
if length(resultClob) > 0 then
-- Class Code 28: Invalid Authorization Specification
signal SQLSTATE '28000'
set Message_Text = 'authorization failed';
return resultClob;
end if;
Rückgabe im Fehlerfall ist: (Statuscode 500)
[SQL0438] authorization failed (SQLState=28000, ErrorCode=-438)
Ich hätte aber gerne zurück: (Statuscode 500)
Code:
{ "daxErrorObject": {
"errorCode": "ERROR_OAUTH_TOKEN",
"errorMessage": "Das OAuth-Token konnte nicht verifiziert werden.
"messageType": "ERROR",
"routine": "DAXWS_dataRetriever",
"field": "",
"details": null }
}
Similar Threads
-
By Andreas_Prouza in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 18-01-23, 15:30
-
By ismiavoiwuascht in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 17-10-21, 22:17
-
By derMuller in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 05-12-17, 12:05
-
By Flappes in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 01-06-17, 09:01
-
By Burgy Zapp in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 17-12-01, 02:48
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks