API response unvollständig

Hallo zusammen,

ich versuche über die Shopware 6 Admin API Bestelldaten abzufragen, indem ich folgenden Link aufrufe: api/v1/order/.
Als Content-Type verwende ich application/vnd.api+json, um erweiterte Informationen zu erhalten.

Soweit funktioniert auch alles, leider werden jedoch unter „included“ , nicht alle Informationen dargestellt.
Es werden mir nur die erweiterten Informationen zu „order_customer“ und "state_machine_state" angezeigt.
Normalerweise sollten es laut Entwickler-Konsole deutlich mehr sein:

Muss bei dem Aufruf etwas bestimmtes übergeben werden, um alle Informationen zu erhalten?

Vielen Dank im Voraus für Eure Hilfe!:slight_smile:

Hallo,

schau mal hier nach: https://docs.shopware.com/en/shopware-platform-dev-en/api/filter-search-limit?category=shopware-platform-dev-en/api#associations

Bisher habe ich keine Möglichkeit gefunden über die normalen Endpoints mir die Datensätze zu holen, deswegen benutze ich den Search-Endpoint. Du musst die jeweiligen Associations mit in den Body packen.

Hier ein kleines Beispiel was dir die Bestellungen mit ihren Addressen zurückliefert:

POST http://meinshop.xyz/api/v1/search/order

Body:

{
  "associations": {
    "addresses": {}
  }
}

 

Gruß,

BA

1 „Gefällt mir“

Hallo BA,

vielen Dank für Deine Antwort, so hat es geklappt!:slight_smile:

Wie gehst Du denn bei einer spezifischen Order für weitere Informationen vor?
Also bspw. bei folgendem Link: api/order/a7e8cda7a1104ee991fe12b12579bee8
Dabei funktioniert der POST Request ja nicht…

Viele Grüße!

Hallo,

ich hole mir immer eine Liste von Bestellungen (in diesem Beispiel max 10 Bestellungen pro Request), die ein bestimmtest Kriterium erfüllen. z.B. die orderDateTime ist größer als, die die ich in meinem Request mit übergebe. Danach mache ich einen neuen Request für die nächsten 10 (page auf 2 setzen) usw. bis ich am Ende angekommen bin.

Diese Bestellungen haben durch das mitgeben der Associations alle Daten die ich benötige. Für eine bestimmte Bestellung kannst du einen Equals Filter bauen und als value deine  id : a7e8cda7a1104ee991fe12b12579bee8  eintragen.

POST http://meinshop.xyz/api/v1/search/order

Body:

{
  "associations": {
    "addresses": {
      "associations": {
        "country": {}
      }
    },
    "lineItems": {}
  },
  "filter": [
    {
      "type": "range",
      "field": "orderDateTime",
      "parameters": {
        "gt": "2020-01-01T14:44:21.77Z"
      }
    }
  ],
  
  "limit" : 10,
  "page" : 1
}

 

Alternativ kannst du folgendes machen, aber dafür müsstest du mehrere Requests pro Bestellungen machen:

1. GET api/order/ // Holst dir eine List von Bestellungen
2 GET api/order/a7e8cda7a1104ee991fe12b12579bee8/addresses //Die Adressen aus der Bestellung
3 GET api/order/a7e8cda7a1104ee991fe12b12579bee8/addresses/4a4a1652a2484070bef7b32331ec2552/country //Land holen
4. GET api/order/a7e8cda7a1104ee991fe12b12579bee8/lineItems //Positionen
5. usw.

Vielleicht geht es noch irgendwie anders, aber die Dokumentation gibt leider bisher sehr wenig Informationen.

 

Gruß,

BA

1 „Gefällt mir“

Hallo BA,

stimmt, ich kann den equals Filter mit Übergabe der ID verwenden, um Orderspezifische Daten abzurufen!
Vielen Dank für Deine Hilfe, die Dokumentation liefert aktuell tatsächlich sehr wenig Informationen…

Ich habe mir es jetzt auch so aufgebaut, dass ich mehrere Associations mitgebe.
Wenn ich dein Beispiel verwende klappt auch alles einwandfrei!

Ich möchte jetzt von den lineItems zusätzlich die media Daten laden.
Entsprechend sollte es dann ja wie folgt aussehen:

{
  "associations": {
    "lineItems": {
      "associations": {
        "media": {}
      }
    }
  }
}

Dabei erhalte ich allerdings einen 500er Fehler mit folgende Rückmeldung:
“Can not find association by name media”

Wird der endpoint “media” anders aufgerufen?

Viele Grüße!

Hallo,

Bestellpositionen habe soweit ich weiß keine direkte Assoziation zu Medien. Hier müsste man aus den Lineitems sich das Feld productId nehmen und einen zweiten Request /search/product machen um die Bilder abzurufen.

{
  "filter": [
    {
      "type": "equals",
      "field": "id",
      "value": "0448b0daeeee4cf78ab969bcb980ae9b" 

Edit: Anscheinend ist das doch möglich, wenn man das Cover feld benutzt:

{
  "associations": {
    "lineItems": {
      "associations": {
        "cover": {}
      }
    }
  }
}

 

Gruß,

BA

1 „Gefällt mir“