Rest Api langsam

Hallo,

ich muss Daten per REST API (/articles) in ein Shopware System einspielen. Das funktioniert auf soweit gut, nur dass ein Datensatz rund 12 Sekunden(!) braucht, bis die Daten eingefügt wurden und ich eine Response erhalte.

(Ich kann auch die Daten nicht mit mehreren Threads senden, da das Shopware System sonst in Timeouts / Locks kommt und mir Datenbank Fehler zurückgibt)

Da ich aktuell auf einem Testsystem arbeite wollte ich fragen ob die REST API bei POST articles generell so langsam ist, oder ob es an unserem System liegt.

Wie kann ich Produkte (auch mit Varianten) per REST API schneller einfügen?

Danke für die Hilfe,

Roman

Hi, 

schau dir mal die batch-Geschichten an, die hohlen nochmal etwas Geschwindigkeit raus. 12 Sekunden erscheint mir schon sehr langsam, hängt aber natürlich auch von der Anzahl der Varianten ab. 

Daniel 

Hallo Daniel,

mit der API kann man anscheinend bei POST nur je einen Datensatz senden, oder liege ich falsch?

Danke

 

Hi, 

bei den Artikeln gehen auch mehrere,  REST API - Article Resource

Finde gerade das andere Beispiel nicht, aber PUT auf api/articles/ unterstützt halt auch mehrere Artikel, egal ob Update oder Create 

Super, danke!

Leider bekomme ich da aber nach ein paar Sekunden  folgende Meldung:

{ Accept: application/json
  Content-Type: application/json; charset=utf-8
  Content-Length: 4954
}, Content: ‚503 Service Unavailable‘

 

 

Hi,

hast du das wie hier beschrieben gemacht?

$restClient->put(
    'articles/', 
    array(
        array('id' => 1, 'name' => '...'),
        array('id' => 1, 'name' => '...'),
        array('name' => '...'),
        array('name' => '...')
    )
);

Das sollte eigentlich funktionieren. Ansonsten: Gibt es eine Fehlermeldung im error_log? 

also je nachdem wieviele und wie große bilder du hast, dauert das wirklich so lange. eine rolle spielt da auch die serverumgebung. ich habe ständig das selbe problem gehabt. je nach “wetter” ist so ein import mal bei 500 artikeln, mal bei 1700 artikeln abgebrochen, 503 error. nachdem ich den import nochmal gestartet habe, fing er wieder an also war mit den übergebenen daten alles i.o.

ich behaupte einfach mal das ist so :slight_smile:

1 „Gefällt mir“

@Mogly schrieb:

also je nachdem wieviele und wie große bilder du hast, dauert das wirklich so lange. eine rolle spielt da auch die serverumgebung. ich habe ständig das selbe problem gehabt. je nach „wetter“ ist so ein import mal bei 500 artikeln, mal bei 1700 artikeln abgebrochen, 503 error. nachdem ich den import nochmal gestartet habe, fing er wieder an also war mit den übergebenen daten alles i.o.

ich behaupte einfach mal das ist so :)

Hallo Mogly,

danke für die Info, ohne Bilder schaut das dann schon wieder anders aus…  da konnte ich 200 Artikel in ~4 Minuten anlegen :-). Aber wie bekomme ich jetzt die Bilder in die Artikel…

sg & danke Roman

@Daniel Nögel schrieb:

Hi,

hast du das wie hier beschrieben gemacht?

$restClient->put(
‚articles/‘,
array(
array(‚id‘ => 1, ‚name‘ => ‚…‘),
array(‚id‘ => 1, ‚name‘ => ‚…‘),
array(‚name‘ => ‚…‘),
array(‚name‘ => ‚…‘)
)
);

Das sollte eigentlich funktionieren. Ansonsten: Gibt es eine Fehlermeldung im error_log? 

Hallo Daniel, 

ja ich mache es genau so, nur mit dem Unterschied, dass ich auch Bilder dabei habe. Bei den Bildern scheint auch das Problem zu liegenm ohne hat alles jetzt perfekt funktioniert. Sobald ich die Bilder einhänge bekomme ich wieder die Meldung ‚503 Service Unavailable‘. Im Log unter /www/var/log/  habe ich keine Einträge bekommen.

Hier mein JSON:

[
  {
    "retries": 0,
    "name": "g2 air black ",
    "description": "g2 air black ",
    "descriptionLong": "g2 air black ",
    "active": true,
    "mainDetail": {
      "number": "12120120",
      "active": true,
      "inStock": 100,
      "weight": "0.00",
      "width": "0.00",
      "height": "0.00",
      "prices": [
        {
          "price": 123.12
        }
      ],
      "isMain": true
    },
    "tax": {
      "tax": "20"
    },
    "supplier": "gloryfy",
    "images": [
      {
        "main": 1,
        "link": "[bildurl]"
      },
      {
        "main": 0,
        "link": "[bildurl]"
      }
    ],
    "categories": [
      {
        "id": 12080,
        "active": false,
        "blog": false,
        "showFilterGroups": false,
        "hideFilter": false,
        "hideTop": false
      }
    ]
  },
  {
    "retries": 0,
    "name": "g2 pure woods ",
    "description": "g2 pure woods ",
    "descriptionLong": "g2 pure woods",
    "active": true,
    "mainDetail": {
      "number": "12120400",
      "active": true,
      "inStock": 100,
      "weight": "0.00",
      "width": "0.00",
      "height": "0.00",
      "prices": [
        {
          "price": 123.12
        }
      ],
      "isMain": true
    },
    "tax": {
      "tax": "20"
    },
    "supplier": "gloryfy",
    "images": [
      {
        "main": 1,
        "link": "[bildurl]"
      },
      {
        "main": 0,
        "link": "[bildurl]"
      }
    ],
    "categories": [
      {
        "id": 12080,
        "active": false,
        "blog": false,
        "showFilterGroups": false,
        "hideFilter": false,
        "hideTop": false
      }
    ]
  },
  {
    "retries": 0,
    "name": "g2 cuba libre ",
    "description": "g2 cuba libre ",
    "descriptionLong": "g2 cuba libre",
    "active": true,
    "mainDetail": {
      "number": "12121620",
      "active": true,
      "inStock": 100,
      "weight": "0.00",
      "width": "0.00",
      "height": "0.00",
      "prices": [
        {
          "price": 123.12
        }
      ],
      "isMain": true
    },
    "tax": {
      "tax": "20"
    },
    "supplier": "gloryfy",
    "images": [
      {
        "main": 1,
        "link": "[bildurl]"
      },
      {
        "main": 0,
        "link": "[bildurl]"
      }
    ],
    "categories": [
      {
        "id": 12080,
        "active": false,
        "blog": false,
        "showFilterGroups": false,
        "hideFilter": false,
        "hideTop": false
      }
    ]
  },
...]

[bildurl] = „http://[domain]/upload/bildname.png“

Danke!

Hi,

wir haben die Bilderübertragung komplett abgekapselt vom eigentlichen Artikelexport. 

Die Schnittstelle ist unbrauchbar wenn man die Bilder plus Varianten plus Bilder überträgt. Deswegen schreiben wir direkt in die Shopware Datenbank.

Ich weiß, nicht der eleganteste Weg, aber so ist unser Bilderexport fast schneller als der Artikelexport. Falls du Tipps brauchst kannst du dich gerne melden.

 

VG 

@timmeyy schrieb:

Hi,

wir haben die Bilderübertragung komplett abgekapselt vom eigentlichen Artikelexport. 

Die Schnittstelle ist unbrauchbar wenn man die Bilder plus Varianten plus Bilder überträgt. Deswegen schreiben wir direkt in die Shopware Datenbank.

Ich weiß, nicht der eleganteste Weg, aber so ist unser Bilderexport fast schneller als der Artikelexport. Falls du Tipps brauchst kannst du dich gerne melden.

 

VG 

 

In der Tat, und das ist immer noch so.

Bei uns läuft im Anschluß ein Skript über verschiedene Ordner die bereits auf dem Server vorliegen und zieht sich die Bilder dann da raus.

Anders ist das bei einem halbwegs großen Shop gar nicht darstellbar.

Früher war das allerdings nochmal deutlich einfacher, aber seitdem die Bildordner gehashed werden muss man sich halt erstmal was zurechtbasteln.