# \[Gelöst\] REST Api: Kategorie zu Artikel hinzufügen

**URL:** <https://forum.shopware.com/t/gelost-rest-api-kategorie-zu-artikel-hinzufugen/41098>\
**Category:** Programmierung\
**Created:** [4. November 2016 um 20:01 UTC](https://forum.shopware.com/t/gelost-rest-api-kategorie-zu-artikel-hinzufugen/41098 "2016-11-04T20:01:47Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Busti](https://avatars.discourse-cdn.com/v4/letter/b/eb8c5e/32.png) [@Busti](https://forum.shopware.com/u/Busti)\
**Post date:** [4. November 2016 um 20:01 UTC](https://forum.shopware.com/t/gelost-rest-api-kategorie-zu-artikel-hinzufugen/41098/1 "2016-11-04T20:01:47Z")

</div>

Hallo,

Um einen langsamen manuellen Prozess zu automatisieren habe ich ein Skript geschrieben, dass alle Artikel automatisch zu bestimmten Kategorien hinzufügen soll.

Mal angenommen ich hole einen Artikel von&nbsp;[https://shop.de/api/articles/1](https://shop.de/api/articles/1)&nbsp;, füge dem “categories” array einen Eintrag hinzu und sende das ganze via ‘PUT’&nbsp;zurück an die selbe URL (ausgenommen dem standard “data” “success” wrapper), sollte der Artikel dann nicht einer Kategorie hinzugefügt worden sein?

Ich habe das bereits probiert, allerdings ist der Artikel dabei aus allen Kategorien in denen er bereits war entfernt worden und der Server hat 400 (Bad Request) zurückgeliefert. Der Json String den ich sende ist richtig formatiert, daran liegt es also nicht.

&nbsp;

Hat jemand hier so etwas vielleicht schon einmal versucht?

Vielen Dank im Vorraus,

Moritz Bust

---

<div class="post-metadata">

**Author:** ![NextMike](https://avatars.discourse-cdn.com/v4/letter/n/838e76/32.png) [@NextMike](https://forum.shopware.com/u/NextMike)\
**Post date:** [4. November 2016 um 20:42 UTC](https://forum.shopware.com/t/gelost-rest-api-kategorie-zu-artikel-hinzufugen/41098/2 "2016-11-04T20:42:04Z")

</div>

Mache das oft. &nbsp;Es funktioniert wie es soll.&nbsp;

---

<div class="post-metadata">

**Author:** ![Busti](https://avatars.discourse-cdn.com/v4/letter/b/eb8c5e/32.png) [@Busti](https://forum.shopware.com/u/Busti)\
**Post date:** [4. November 2016 um 22:04 UTC](https://forum.shopware.com/t/gelost-rest-api-kategorie-zu-artikel-hinzufugen/41098/3 "2016-11-04T22:04:50Z")

</div>

Muss man vielleicht den aktualisierten Artikel an&nbsp;[https://shop.de/api/articles](https://shop.de/api/articles/)&nbsp;(ohne id) senden?

Ansonsten könnte ich es mir nicht anders erklären.

---

<div class="post-metadata">

**Author:** ![ahmadsaad](https://avatars.discourse-cdn.com/v4/letter/a/65b543/32.png) [@ahmadsaad](https://forum.shopware.com/u/ahmadsaad)\
**Post date:** [5. November 2016 um 09:01 UTC](https://forum.shopware.com/t/gelost-rest-api-kategorie-zu-artikel-hinzufugen/41098/4 "2016-11-05T09:01:18Z")

</div>

Hallo,

es funktioniert auch mit mir und mit Artikel Id in Url.

Können Sie Ihr Code schreiben, damit kann man was passiert dort sehen

Viele Grüße

Ahmad

---

<div class="post-metadata">

**Author:** ![Busti](https://avatars.discourse-cdn.com/v4/letter/b/eb8c5e/32.png) [@Busti](https://forum.shopware.com/u/Busti)\
**Post date:** [5. November 2016 um 15:33 UTC](https://forum.shopware.com/t/gelost-rest-api-kategorie-zu-artikel-hinzufugen/41098/5 "2016-11-05T15:33:59Z")

</div>

Ich habe einige kleinere Fehler behoben. Zum einen waren die Json Daten die ich an den server zu schicken versuche nicht richtig formatiert, zum anderen hat meinen Json Library (GSON) alle zahlen als floats behandelt.

Das scheint allerdings nicht der grund gewesen zu sein, da das Ergebnis das selbe wie vorher ist.

Dies ist in etwa was ich vom server bekomme (ohne Informationen die gleich bleiben):

```
{
  "data":{
    "id":1,
    "name": "Beispiel",
    "categories":[
      {
        "id":11,
        "name":"Kategorie"
      },
      {
        "id":12,
        "name":"Andere Kategorie"
      }
    ],
  },
  "success":true
}

```

Und das ist was ich zurück sende (inkl. der unveränderten Daten):

```
{
  "id":1,
  "name": "Beispiel",
  "categories":[
    {
      "id":11,
      "name":"Kategorie"
    },
    {
      "id":12,
      "name":"Andere Kategorie"
    },
    {
      "id":132,
      "name":"Hinzugefügte Kategorie"
  ],
}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Busti](https://avatars.discourse-cdn.com/v4/letter/b/eb8c5e/32.png) [@Busti](https://forum.shopware.com/u/Busti)\
**Post date:** [5. November 2016 um 16:01 UTC](https://forum.shopware.com/t/gelost-rest-api-kategorie-zu-artikel-hinzufugen/41098/6 "2016-11-05T16:01:09Z")

</div>

Da es mir aus unbekanntem Grund nicht möglich ist im PUT einen inputstream zu öffnen habe ich einmal mit wireshark reingeschaut.

Dabei ist mir aufgefallen, dass die response folgenden fehlercode enthält:

```
{"success":false,"message":"\\Shopware\\Models\\Article\\Price by id 29202 not found"}

```

Kann ich es vielleicht lösen indem ich die ID’s bei den “prices” arrays einfach entferne?

---

<div class="post-metadata">

**Author:** ![NextMike](https://avatars.discourse-cdn.com/v4/letter/n/838e76/32.png) [@NextMike](https://forum.shopware.com/u/NextMike)\
**Post date:** [5. November 2016 um 16:57 UTC](https://forum.shopware.com/t/gelost-rest-api-kategorie-zu-artikel-hinzufugen/41098/7 "2016-11-05T16:57:12Z")

</div>

Das ist ein Beispiel aus der Doku:

```
$minimalTestArticle = array(
    'name' => 'Sport Shoes',
    'active' => true,
    'tax' => 19,
    'supplier' => 'Sport Shoes Inc.',
    'categories' => array(
        array('id' => 15),
    ),
    'mainDetail' => array(
        'number' => 'turn',
        'prices' => array(
            array(
                'customerGroupKey' => 'EK',
                'price' => 999,
            ),
        )
    ),
);

$client->post('articles', $minimalTestArticle);

```

Mach es doch so.

---

<div class="post-metadata">

**Author:** ![Busti](https://avatars.discourse-cdn.com/v4/letter/b/eb8c5e/32.png) [@Busti](https://forum.shopware.com/u/Busti)\
**Post date:** [5. November 2016 um 18:01 UTC](https://forum.shopware.com/t/gelost-rest-api-kategorie-zu-artikel-hinzufugen/41098/8 "2016-11-05T18:01:54Z")

</div>

Es geht. Es lag daran, dass die ID’s in den “prices” arrays vorhanden waren.

Siehe:&nbsp;[https://forum.shopware.com/discussion/30138/rest-api-update-artikel-price-by-id-not-found](https://forum.shopware.com/discussion/30138/rest-api-update-artikel-price-by-id-not-found)
