Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Shopware API Zugriff REST (https://www.delphipraxis.net/194445-shopware-api-zugriff-rest.html)

fabi17 21. Nov 2017 18:12

Shopware API Zugriff REST
 
Guten Abend,

ich würde gerne auf meinen Shopware Shop via API zugreifen um Artikeldaten zu aktualisieren.
Ich habe mir die Shopware Doku angesehen, verstehe aber leider von dem ganzen Thema REST mehr oder weniger Bahnhof. In verschiedenen Tutorials habe ich die REST-Komponenten kennengelernt (Client, Adapter,...) und ich erhalte auf meiner VLC Anwendung nach Verbinden der verschiedenen Komponenten auch einen Response mit Daten in ein DBGrid.
Leider finde ich im Netz aber leider kein Tutorial, was mir ab hier weiterhilft.
Hat jemand ein Tutorial für mich oder kann mir irgendwie Hilfestellung geben?

Vielen dank vorab

Viele Grüße

Guido R. 22. Nov 2017 13:07

AW: Shopware API Zugriff REST
 
Hallo Fabi,

ich habe für die Entwicklung meiner Shopware-Schnittstelle auf die REST-Komponenten von Delphi verzichtet und mit IdHTTP gearbeitet, insbes. weil ich mit denen immer wieder mal Probleme im Bereich Authorizing (Digest) hatte. (s. http://www.delphipraxis.net/189866-m...zugreifen.html und http://www.delphipraxis.net/171695-z...it-idhttp.html) Gubbe hatte das Digest-Problem zwar gelöst, aber da stand meine Schnittstelle mit IdHTTP schon weitestgehend.

Alle Informationen werden im JSON-Format übertragen. Kenntnisse darin zu haben würde also nicht schaden, insbes. da Du die Änderungen von Artikeln etc. auch als JSON übergeben müsstest.

Wie die Informationen abgerufen und übertragen werden ist in der REST-API-Beschreibung von Shopware (https://developers.shopware.com/deve...mples/article/) recht gut beschrieben.
Schau Dir mal die Funktionen Get, Put, Post und Delete in tIdHTTP an. Diese Funktionen gibt es auch in den REST-Komponenten.

Wobei genau hast Du denn noch Probleme?

LLAP
Guido

Ritsch 22. Nov 2017 14:38

AW: Shopware API Zugriff REST
 
Ich würde an deiner Stelle auch auf die Indy-Komponenten zurück greifen.

Zudem lernst du auf dem Wege vermutlich viel mehr, als mit einer fertigen Lösung.

In welchem Format werden die Daten denn übertragen?

Guido R. 22. Nov 2017 15:37

AW: Shopware API Zugriff REST
 
Die Daten werden als JSON übertragen. Genauer Aufbau der Daten s. Link unter #2!

Ich hab's eben nochmal ausprobiert. Mit den von Gubbe vorgeschlagenen Änderungen kann man die Daten auch gut mit den REST-Komponenten übertragen.
Mit tRESTResponseDataSetAdapter ist es dann auch möglich, die Listen (z.B. Artikelliste) sehr schön und einfach in eine Tabelle zu übertragen.
Da Du aber Daten auch anlegen und/oder aktualisieren möchtest, wirst Du an der Erstellung entsprechender JSON-Objekte, die dann mit Put/Post übertragen werden, wohl nicht vorbeikommen.

fabi17 22. Nov 2017 19:01

AW: Shopware API Zugriff REST
 
Grüß euch,

lieben Dank für eure Antworten.
Das Digest Problem habe ich mit einer Änderung in der Shopware bootstrap umgangen, sodass nun eine Basic Auth möglich ist.

Könntest du mir einen Schnipsel einer .Get / .Put Methode mit den Rest Komponenten mal hier reinschreiben? Ich habe die Daten mit dem Rest Debugger zwar in der Tabelle, aber hab gerade keine Ahnung wie ich von hier aus weiter machen soll. Im Netz lese ich verschiedenste Sachen mit Stringlists und Streams, es scheitert bei mir ehrlich gesagt schon daran die richtige Methode zu finden, um überhaupt etwas zu aktualisieren. Leider sind die meisten Tutorials im Netz nur dazu da, das Grid/Listview zu füllen..aber nicht, wie es von hier aus weitergeht.

danke euch schon mal!

Guido R. 23. Nov 2017 12:41

AW: Shopware API Zugriff REST
 
Die Sicherheitsmechanismen von Shopware runter zu schrauben wird im allgemeinen (dringend) abgeraten.
Mit der wirklich kleinen Änderung von Gubbe (http://www.delphipraxis.net/1361368-post13.html) musst Du nichts am Shopsystem ändern und musst dich auch nicht an solche Änderungen erinnern, wenn Du mal den Shop neu aufsetzen solltest.

Also die kleine Einführung (inkl. Digest):

Vorarbeiten :
  • Lege je ein RestClient, RestRequest und RestResponse auf eine Form oder DataModule und verknüpfe RestRequest mit den anderen beiden. Den RestResponseDatasetAdapter vergessen wir an dieser Stelle erst einmal.
  • Setze RestClient.BaseURL auf 'http://<Username>:<Key>@<Shopware-Adresse>/api'.
  • Setze (per Code) RestRequest.URLAlreadyEncoded auf True
Get (Artikelliste):
Delphi-Quellcode:
RESTRequest.Method := rmGet;
RESTRequest.Resource := 'articles';
RESTRequest.Execute;
Ergebnis steht in RESTResponse.Content

Get (Einzelner Artikel idF. mit ID:3):
Delphi-Quellcode:
RESTRequest.Method := rmGet;
RESTRequest.Resource := 'articles/3';
RESTRequest.Execute;
Ergebnis steht in RESTResponse.Content

Wie Du über die Artikelnummer statt der ID an einen Artikel kommst steht in der API-Beschreibung!

In beiden Fällen bekommst Du einen String zurück, der eine JSON-Struktur enthält. Diesen kannst Du dann entsprechend zerlegen.
Umgekehrt (z.B. Erstellen eines Artikels) baust Du zunächst einen solchen JSON-Datensatz entsprechend der Struktur in der API-Beschreibung auf und übergibst diesen als Parameter unter Verwendung der
Delphi-Quellcode:
RestRequest.Method=rmPost
.


Siehe auch http://docwiki.embarcadero.com/RADSt...ientbibliothek

fabi17 23. Nov 2017 23:51

AW: Shopware API Zugriff REST
 
Hi Guido,

danke für die Antwort. Zwischenzeitlich habe ich es zwar mit Indy hinbekommen, würde es aber auch gerne mit der Rest-Komponente schaffen. Der get Befehl ist kein Problem, leider komme ich aber nach wie vor bei put/post nicht weiter. Kannst du mir vielleicht ein konkretes Beispiel geben, wie an z.B. bei einem Shopware Artikel den Namen ändert? Den Json String aufbauen ist ja kein Problem, aber die Übergabe als Parameter bekomme ich nicht hin.

Vielen Dank schon mal

Guido R. 25. Nov 2017 14:25

AW: Shopware API Zugriff REST
 
Wie gesagt - Ich hab's mit den Indys umgesetzt.
Allerdings habe ich mal ein kleines Test-Programm mit den REST-Komponenten erstellt, mit dem ich eine Base64-Encodierte-Datei (B64Str) samt des Dateinamens (FNStr) übertragen habe.

Delphi-Quellcode:
 {...}
 RESTRequest.Method := tRESTRequestMethod.rmPost;
 RESTRequest.Params.Clear;
 RESTRequest.Params.AddItem('datei', FNStr, tRESTRequestParameterKind.pkGETorPOST);
 RESTRequest.AddParameter('bild',B64Str);
 RESTRequest.Execute;
 {...}
Das hat so wunderbar funktioniert.
Vlt. hilft Dir das weiter.

fabi17 27. Nov 2017 22:25

AW: Shopware API Zugriff REST
 
Hi Guido,

danke, das hilft mir schon mal. Finde es über Indy aber fast einfacher.
Den Indy get&Update habe ich soweit fertig, leider komme ich mit Post nicht zurecht.

Mein TestString zum Anlegen eines Artikels ist

{"name" :"Testartikel","description":"test","active":"true ","tax":"19","prices.price":"9,99","categories.id" :"38","supplier":"test"}

Leider erhalte ich jedoch eine HTTP 400 Exception (Bad Request).

Ich greife mit http.Post auf die richtige /articles Ressource zu. Ist oben in dem String ein Fehler oder fehlt ein Pflichtfeld?

Schönen Abend
Fabi

DeddyH 28. Nov 2017 06:21

AW: Shopware API Zugriff REST
 
Ohne die API zu kennen: versuch es mal so (die Umbrüche sind nicht notwendig und dienen nur der Lesbarkeit).
Code:
{
  "name":"Testartikel",
  "description":"test",
  "active":true,
  "tax":19,
  "prices.price":9,99,
  "categories.id" :38,
  "supplier":"test"
}


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:30 Uhr.
Seite 1 von 2  1 2      

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