AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Shopware API Zugriff REST

Ein Thema von fabi17 · begonnen am 21. Nov 2017 · letzter Beitrag vom 30. Nov 2017
Antwort Antwort
Seite 1 von 2  1 2      
fabi17

Registriert seit: 1. Mai 2017
44 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Shopware API Zugriff REST

  Alt 21. Nov 2017, 19:12
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
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.
Online

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#2

AW: Shopware API Zugriff REST

  Alt 22. Nov 2017, 14:07
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
  Mit Zitat antworten Zitat
Benutzerbild von Ritsch
Ritsch

Registriert seit: 15. Apr 2014
Ort: Wolfenbüttel
33 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Shopware API Zugriff REST

  Alt 22. Nov 2017, 15:38
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?
Richard
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.
Online

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#4

AW: Shopware API Zugriff REST

  Alt 22. Nov 2017, 16:37
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.
  Mit Zitat antworten Zitat
fabi17

Registriert seit: 1. Mai 2017
44 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Shopware API Zugriff REST

  Alt 22. Nov 2017, 20:01
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!
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.
Online

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#6

AW: Shopware API Zugriff REST

  Alt 23. Nov 2017, 13:41
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 RestRequest.Method=rmPost .


Siehe auch http://docwiki.embarcadero.com/RADSt...ientbibliothek
  Mit Zitat antworten Zitat
fabi17

Registriert seit: 1. Mai 2017
44 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Shopware API Zugriff REST

  Alt 24. Nov 2017, 00:51
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
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.
Online

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#8

AW: Shopware API Zugriff REST

  Alt 25. Nov 2017, 15:25
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.
  Mit Zitat antworten Zitat
fabi17

Registriert seit: 1. Mai 2017
44 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: Shopware API Zugriff REST

  Alt 27. Nov 2017, 23:25
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

AW: Shopware API Zugriff REST

  Alt 28. Nov 2017, 07:21
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"
}
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 15:25 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