AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein REST Service Encoding Escape Sequenz

REST Service Encoding Escape Sequenz

Ein Thema von Rainer Wolff · begonnen am 13. Jan 2022 · letzter Beitrag vom 17. Jan 2022
Antwort Antwort
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#1

REST Service Encoding Escape Sequenz

  Alt 13. Jan 2022, 12:22
Hallo,

ich habe in C# einen Webservice geschrieben. Dieser gibt in einer Abfrage einen XML String zurück. Wenn ich das Ergebnis mit Swagger oder direkt im Browser anschaue, sieht alles aus, wie gewünscht.
Code:
<?xml version="1.0" encoding="utf-8"?><opc:TypeDictionary
DefaultByteOrder="LittleEndian"
Wenn ich die API jedoch im Embarcadero REST Debugger oder mit den REST-Komponenten in Delphi abfrage, sind etliche Zeichen Escape-codiert ( " wird zu \", Zeilenvorschub wird zu \n ...).
Code:
"<?xml version=\"1.0\" encoding=\"utf-8\"?><opc:TypeDictionary\nDefaultByteOrder=\"LittleEndian\"\nTargetNamespace=\"http:\/\/www.
Aktuell habe ich von dem ganzen REST-Gedöns noch nicht viel Ahnung, verschiedene Versuche mit Inhaltstyp ändern haben nicht zum Erfolg geführt.
Muss ja aber irgendwas damit zu tun haben.

Ich kann das Ergebnis natürlich auf der Delphi-Seite wieder umkonvertieren, aber schön ist anders.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.108 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: REST Service Encoding Escape Sequenz

  Alt 13. Jan 2022, 12:48
Ich glaube die Embarcadero-Komponenten verstehen kein XML, und aus deren Sicht hast du einfach einen String bekommen - Also macht er nochmal Anführungsstriche drum herum und maskiert die Sonderzeichen, wie es sich für einen JSON-String gehört.

So sieht das auf den ersten Blick für mich aus.

Bingo:
Quelle:
https://docwiki.embarcadero.com/RADS...ientbibliothek

Zitat:
In diesem Framework wird JSON als Darstellungsformat verwendet. XML wird nicht explizit unterstützt.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: REST Service Encoding Escape Sequenz

  Alt 13. Jan 2022, 12:52
REST ist aber JSON basiert und nicht XML. Lieferst du das XML als Teil eines JSON Objekts? Ist dem so, ist das absolut normal, da diese Zeichen in JSON escaped sein müssen. Du musst das JSON noch mit einem JSON-Parser verarbeiten und in ein Delphi Objekt wandeln, z.B. mit REST.JSON.pas.

Oder ist dein Webservice garkein REST-Server sonderne eine SOAP Server? Dieser liefert XML. Dann brauchst du aber auf Delphi Seite auch einen SOAP-Client und nicht den REST-Client.

EDIT:
Habe eben gelsen, dass REST auch XML liefern kann. Ich würde dir aber davon abraten. JSON ist die "Standard" Antwort in REST. Ich kenne keinen einzigen Webservice der da XML liefert. Das ist mit XML alles viel zu überblasen und mit JSON einfach viel einfacher und platz-/rechensparender.

Geändert von Rolf Frei (13. Jan 2022 um 13:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.980 Beiträge
 
Delphi 12 Athens
 
#4

AW: REST Service Encoding Escape Sequenz

  Alt 13. Jan 2022, 13:16
Habe eben gelsen, dass REST auch XML liefern kann. Ich würde dir aber davon abraten. JSON ist die "Standard" Antwort in REST. Ich kenne keinen einzigen Webservice der da XML liefert.
Genau dafür gibt es ja den erwarteten ContentType im Accept Property (TRESTClient oder TRESTRequest). Der Server sollte sich dann halt danach richten und das passende oder eine Fehlermeldung liefern.

Das XML sollte im Response.Content auch korrekt ankommen. Lediglich der RESTDebugger ist stark JSON-lastig
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: REST Service Encoding Escape Sequenz

  Alt 13. Jan 2022, 14:27
Ich glaube die Embarcadero-Komponenten verstehen kein XML, und aus deren Sicht hast du einfach einen String bekommen - Also macht er nochmal Anführungsstriche drum herum und maskiert die Sonderzeichen, wie es sich für einen JSON-String gehört.

So sieht das auf den ersten Blick für mich aus.
Wird dann vielleicht auch so sein. Danke für die Hilfen.

Ich habe jetzt kurz und schmerzlos doch die Umkonvertierung auf Delphi-Seite mit String-Replace reingefummelt. Die Funktion wird bei Programmstart ein einziges mal aufgerufen, dann isses halt nicht schön, aber funktioniert.

JSON als Standardantwort: Ich bekomme den XML-String schon fertig aus einer untergeordneten Schnittstelle und reiche den in meinem Rest-Server nur als String an die Delphi-App weiter.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.108 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: REST Service Encoding Escape Sequenz

  Alt 13. Jan 2022, 14:43
Hauptsache ein paar Unit-Tests decken das vernünftig ab. Dann darf man da drinnen einiges an unschönen Dingen treiben.

So meine Meinung und so.
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
210 Beiträge
 
#7

AW: REST Service Encoding Escape Sequenz

  Alt 13. Jan 2022, 14:46
Ich befürchte StringReplace ist ein gefährlich falscher Ansatz.
Notfalls eher (vom Prinzip her) sowas:

Delphi-Quellcode:
type
  TWhatEver = class
    FText : String;
  end;
...
function ConvertMe(sVal : String) : String;
var
  obj : TWhatEver;
begin
  try
    obj := TJson.JsonToObject<TWhatEver>('{"text":' + sVal + '}');
    try
      Result := obj.FText;
    finally
      obj.Free();
    end;
  except
    Result := '';
  end;
end;
Obwohl das auch schon echt bäh ist!
Und bitte nochmal drüber schauen.

LG Incocnito
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.378 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: REST Service Encoding Escape Sequenz

  Alt 17. Jan 2022, 13:37
REST ist aber JSON basiert und nicht XML.
Der Aussage würde ich so widersprechen. Zumindest sollte man dann definieren was man unter REST versteht.
Nach meiner Definition (m.E. und auch wikipedia) hat das Format nichts mit REST zu tun.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz