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
fabi17

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

AW: Shopware API Zugriff REST

  Alt 22. Nov 2017, 19: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.

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

AW: Shopware API Zugriff REST

  Alt 23. Nov 2017, 12: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
 
#3

AW: Shopware API Zugriff REST

  Alt 23. Nov 2017, 23: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.

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

AW: Shopware API Zugriff REST

  Alt 25. Nov 2017, 14: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
 
#5

AW: Shopware API Zugriff REST

  Alt 27. Nov 2017, 22: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.656 Beiträge
 
Delphi 12 Athens
 
#6

AW: Shopware API Zugriff REST

  Alt 28. Nov 2017, 06: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
Tyrolean

Registriert seit: 3. Jul 2003
76 Beiträge
 
Delphi 7 Professional
 
#7

AW: Shopware API Zugriff REST

  Alt 28. Nov 2017, 06:45
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"
}
Wäre ein Punkt als Trenner nicht richtiger?
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 00:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz