Delphi-PRAXiS
Seite 1 von 3  1 23   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen? (https://www.delphipraxis.net/178489-api-anbindung-mit-xml-oder-soap-moeglich-welches-soll-ich-waehlen.html)

hedie 10. Jan 2014 17:34

API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Hallo zusammen...

Lange ist es her seit meinem letzten Beitrag!
Aber nun bin ich wieder aktiver mit Delphi!

Euch allen mal ein frohes neues Jahr.


Ich stehe aktuelle vor der folgenden Aufgabe:


Ich möchte eine Dienstleistung unserer Post in meiner Applikation nutzen.
Dazu gibt es ein API. Die Anbindung erfolgt wahlweise über XML oder SOAP.

Da ich bisher noch keine erfahrungen mit beiden habe, wollte ich euch mal fragen,
welche schnittstelle den wohl einfache mit Dehlphi zu implementiere bzw. einzusetzen ist.

Mein bauchgefühl sagt mir XML. Da ich XML im ansatz kenne. Soap dagegen sagt mir nix.

Da die entsprechenden Dokumente zur integration als "geheim" eingestufft sind von unserer Post, darf ich die leider hier nicht
einfach so hochladen... Sonst hätte ich das natürlich getan.

Es steht, dass es für die übermittlung der XML-Anfrage zwei Möglichkeiten gibt:

HTTP Post im Feld XYZ
ODER HTTP RAW Post.



Ich hoffe ihr könnt mir ein paar tipps geben, da ich davon ausgehe
dass solche interfaces industrie standard sind und ihr deshalb, auch ohne die hier vorliegende dokumentation zu kennen,
mir einige tipps und hinweise geben könnt.

Ich bin über jeden hinweis froh :)


Danke schonmal
Liebe Grüsse

mkinzler 10. Jan 2014 17:41

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Es wird sich um einen Webservice handeln

http://www.post.ch/post-startseite-n...ce-barcode.htm

Interessanterweise hant die Deutsche Post dieselben Seiten und Dienste

hedie 10. Jan 2014 18:02

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Zitat:

Zitat von mkinzler (Beitrag 1243065)
Es wird sich um einen Webservice handeln

http://www.post.ch/post-startseite-n...ce-barcode.htm

Interessanterweise hant die Deutsche Post dieselben Seiten und Dienste

Ja das ist korrekt...

Was ist den deine Meinung zu meinen Fragen?

mjustin 10. Jan 2014 18:04

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Zitat:

Zitat von hedie (Beitrag 1243063)
Da ich bisher noch keine erfahrungen mit beiden habe, wollte ich euch mal fragen,
welche schnittstelle den wohl einfache mit Dehlphi zu implementiere bzw. einzusetzen ist.

SOAP basiert auf XML. Beides hat Vor- und Nachteile in der Praxis. Mit XML kann man relativ bequem arbeiten, wenn es eine XSD-Datei gibt und diese sich mit dem Delphi Schema Binding Wizard in Delphi Code umwandeln läßt. Dann fehlt nur noch der HTTP Teil zur Datenübertragung, hierfür ist Internet Direct (Indy) geeignet.

Bei SOAP kann es je nach verlangten Standards (z.B. WS-*) mit Delphi schwieriger werden. Es gibt zwar die Möglichkeit, einen Webservice Client anhand eines WSDL Dokuments zu erstellen, aber in manchen Fällen sind noch Nacharbeiten notwendig. Der Einsatz von Testwerkzeugen wie SoapUI kann da weiterhelfen, um Soll- und Istvergleiche der HTTP Request/Response Daten zu machen. Ferner gibt es ein Delphi-kompatibles Web Service Toolkit für Free Pascal, das aktiv entwickelt wird und teilweise in Delphi fehlende Features enthält.

Falls es mit SOAP (und dem Web Service Client Wizard) in Delphi im ersten Anlauf Probleme gibt, die sich in Foren etc. nicht kurzfristig lösen lassen, würde ich wohl eher den Weg über die XML basierte Schnittstelle verfolgen.

hedie 10. Jan 2014 18:13

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Zitat:

Zitat von mjustin (Beitrag 1243069)

Falls es mit SOAP (und dem Web Service Client Wizard) in Delphi im ersten Anlauf Probleme gibt, die sich in Foren etc. nicht kurzfristig lösen lassen, würde ich wohl eher den Weg über die XML basierte Schnittstelle verfolgen.

Vielen Dank für deine Antwort.


Ich habe bisher weder eine XSD noch eine WSDL Datei erhalten. Ich vermute mal, dass es keine solchen gibt.
Es gibt lediglich ein ellen langes Dokument, welches einen XML header und dessen parameter aufzeigt, welche gesendet werden sollen/können.

Bei der SOAP Dokumentation kann ich mir nicht viel darunter vorstellen....


So wie ich dich nun verstanden habe, würdest du die SOAP Variante zuerst versuchen?

Gibt es vielleicht irgendwelche Demo projekte in delphi für XML oder SOAP?

Danke!

Union 10. Jan 2014 19:13

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Wenn Du noch nicht mit WebServices und SOAP gearbeitet hast und es sich um die One Click Schnittstelle (Internetbriefmarke) handelt, dann vergiß es lieber. Du musst u.a. SOAP-Header patchen für die Authentifizierung, lustige Hashes berechnen usw.

hedie 10. Jan 2014 19:15

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Zitat:

Zitat von Union (Beitrag 1243083)
Wenn Du noch nicht mit WebServices und SOAP gearbeitet hast und es sich um die One Click Schnittstelle (Internetbriefmarke) handelt, dann vergiß es lieber. Du musst u.a. SOAP-Header patchen für die Authentifizierung, lustige Hashes berechnen usw.

Hallo

Ja es handelt sich um die Briefmarken lösung.


Ich habe inzwischen die xsd files gefunden... Es gibt sie also doch :)

Weshalb sollte ich dies vergessen?

Was soll daran so extrem schwierig sein?

Im endeffekt sende ich ein xml "dokument" welches meine anfrage definiert und meine zugangsdaten enthält.
Und als Antwort erhalte ich meine angeforderten daten zurück :)

hedie 10. Jan 2014 19:54

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Weshalb hat der Union wohl seinen Text durchgestrichen?

vagtler 10. Jan 2014 20:01

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Drei Minuten nachdem Du Deine Antwort geschrieben hast...

Probier es doch aus.

Union 10. Jan 2014 20:07

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Weil ich Ihn laut seiner Signatur mal gewähren lassen will. Bin aber weiterhin der Meinung, dass gerade dieses Projekt nicht unbedingt zum Einstige geeignet ist. Hier eine kleine Hilfe, muß ja nicht jeder das Rad neu erfinden:

Delphi-Quellcode:
unit OneClickSoapHelpers;

interface

uses Classes, InvokeRegistry, OneClickForApp, IdHashMessageDigest, idHash, XMLIntf;

type
  TOneClickHeader = class(TSoapHeader)
  private
    FPartner_ID : string;
    FRequest_TimeStamp : string;
    FKey_Phase : integer;
    FPartner_Signature : string;
    FPartner_Key : string;
    procedure CalcSignature;
  public
    function ObjectToSOAP(RootNode: IXMLNode; ParentNode: IXMLNode;
      const ObjConverter: IObjConverter; const NodeName: string;
      const NodeNamespace: string; const ChildNamespace: string;
      ObjConvOpts: TObjectConvertOptions; out RefID: string): IXMLNode;
      override;
    property Partner_Key : string read FPartner_Key write FPartner_Key;
  published
    property Partner_Id        : string Index (1) read FPartner_Id write FPartner_Id;
    property Request_TimeStamp : string Index (1) read FRequest_TimeStamp write FRequest_TimeStamp;
    property Key_Phase         : integer Index (1) read FKey_Phase write FKey_Phase;
    property Partner_Signature : string Index (1)read FPartner_Signature write FPartner_Signature;
  end;

  onec = class(TOneClickHeader);


implementation

uses sysutils, strutils, Rio;

{ TOneClickHeader }
procedure TOneClickHeader.CalcSignature;
var
  idmd5 : TIdHashMessageDigest5;
  ACode : string;
begin
  ACode := trim(Partner_id)+'::'+
           trim(Request_TimeStamp)+'::'+
           IntToStr(Key_Phase)+'::'+
           FPartner_Key;
  idmd5 := TIdHashMessageDigest5.Create;
  try
    FPartner_Signature := LowerCase(LeftStr(idmd5.HashStringAsHex(ACode),8));
  finally
    idmd5.Free;
  end;
end;

function TOneClickHeader.ObjectToSOAP(RootNode, ParentNode: IXMLNode;
  const ObjConverter: IObjConverter; const NodeName, NodeNamespace,
  ChildNamespace: string; ObjConvOpts: TObjectConvertOptions;
  out RefID: string): IXMLNode;
begin
  Result := ParentNode.AddChild('PARTNER_ID');
  Result.Text := FPartner_Id;
  Result := ParentNode.AddChild('REQUEST_TIMESTAMP');
  Result.Text := FRequest_TimeStamp;
  Result := ParentNode.AddChild('KEY_PHASE');
  Result.Text := IntToStr(FKey_Phase);
  Result := ParentNode.AddChild('PARTNER_SIGNATURE');
  CalcSignature;
  Result.Text := FPartner_Signature;
end;

initialization
  InvRegistry.RegisterHeaderClass(TypeInfo(OneClickForAppPortType), onec, 'onec', '');
end.
Und Benutzung dann so:
Delphi-Quellcode:
var
  ocApp : OneClickForAppPortType;
  AuthReq : AuthenticateUserRequest;
  AuthRes : AuthenticateUserResponse;
  ocHeader : Onec;
begin
  ocApp := GetOneClickForAppPortType;

  // Header Informationen senden
  ocHeader := Onec.Create;
  ocHeader.Partner_Id := '<Von DPAG zugeteilte Partner ID>';
  ocHeader.Key_Phase := 1;
  ocHeader.Partner_Key := '<Von DPAG zugeteilter Schlüssel>';
  ocHeader.Request_TimeStamp := FormatDateTime('ddmmyyyy-hhmmss', Now);
  (ocApp as ISOAPHeaders).Send(ocHeader);


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.
Seite 1 von 3  1 23   

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf