Abruf von Bestellungen über API

Hallo,
ich versuche per Rest (Post) auf /api/search/order offene Bestellungen in einem bestimmten Status abzuholen. Ich habe mir jetzt einen body zusammengeraten, in dem hoffentlich alle für mich relevanten Informationen vorhanden sind: Bestellnummer, Lieferadresse, Bestellpositionen (Mengen, Artikel). Der Response ist allerdings recht kompliziert zu lesen. Z.B. Muss man, um herauszufinden, welche Adresse die Lieferadresse ist, erst im Feld shippingOrderAddressId nach der ID suchen und anschließend die passende Adresse nehmen. Ähnlich ist es mit dem Verhältnis von Bestellpositionen und Artikeln. Die Bestellposition enthält nur die ArtikelID, weitere Infos muss man dann über die ID suchen.
Ich frage mich jetzt: Ist es wirklich soooo kompliziert oder habe ich etwas übersehen? Kann man die notwendigen Informationen auch übersichtlicher bekommen? Gibt es irgendwo in der Doku praxistaugliche Beispiele und eine Liste mit Attributen, damit man die Anfragen zusammen bauen kann ohne ständig raten zu müssen?

Viele Grüße
Susanne

Hier mein Body:

{
    "associations": {
        "transactions": {
            "associations": {
                "stateMachineState": []
            }
        },
        "addresses": {
            "associations": {
                "country": [],
                "countryState" :[]
            }
        },
        "lineItems": {
            "associations": {
                "product": []
            }
        },
        "deliveries": {
            "associations": {
                "shippingOrderAddress":{}
            }
        },
        "stateMachineState": {}
    },
    "filter": [
        {
            "value": "open",
            "field": "order.stateMachineState.technicalName",
            "type": "equals"
        },
        {
            "value": "paid",
            "field": "transactions.stateMachineState.technicalName",
            "type": "equals"
        },
        {
            "value": "open",
            "field": "deliveries.stateMachineState.technicalName",
            "type": "equals"
        }
    ],
    "includes": {
        "order_transaction": [
            "id",
            "stateMachineState"
        ],
        "order_customer": [
            "email"
        ],
        "order": [
            "id",
            "orderNumber",
            "createdAt",
            "lineItems",
            "billingAddressId",
            "salesChannelId",
            "addresses",
            "deliveries",
            "salesChannelId",
            "salesChannel",
            "stateMachineState",
            "transactions",
            "orderCustomer",
            "shippingTotal"
        ],
        "order_line_item": [
            "id",
            "position",
            "quantity",
            "unitPrice",
            "productId",
            "product"
        ],
        "country": [
            "iso"
        ],
        "product": [
            "productNumber",
            "name"
        ],
        "sales_channel": [
            "id",
            "name",
            "paymentMethodId",
            "paymentMethods"
        ],
        "order_address": [
            "id",
            "firstName",
            "lastName",
            "street",
            "zipcode",
            "city",
            "company",
            "department",
            "countryId",
            "country"
        ],
        "state_machine_state": [
            "id",
            "technicalName"
        ],
        "order_delivery": [
            "id",
            "shippingOrderAddressId",
             "firstName",
            "lastName",
            "street",
            "zipcode",
            "city",
            "company",
            "department",
            "countryId",
            "country"
        ]
    }
}
1 „Gefällt mir“

Die besten praxistauglichen Beispiele findest du im Adminpanel deiner Shopware-Installation, wenn du dir dort die Payloads & Responses im Network-Tab der Browser-DevTools anschaust.

Wenn man eine Bestellung öffnet, sieht die Response aus, wie du sie beschreibst. Im response.data sind die IDs und im response.included die assoziierten Daten.

Und raten musst du eigentlich auch nicht, ist alles in den API Docs auch genau so dokumentiert:

Hallo,
danke für die Antwort.
Ich habe jetzt meine oben beschriebene Abfrage genommen und nicht wie zuvor in Postman ausgeführt, sondern mit einem Javatool. Das Ergebnis war positiv überraschend. Allerdings kann ich es mir nicht erklären. Es kommt nämlich ein anderer (schönerer) Responsbody zurück als mit Postman. Die Assisiations sind jetzt sehr schön aufgelöst und stehen da, wo ich sie gerne hätte. Ein Beispiel:
Im Response von Postman muss man, um auf das Lieferland zu kommen erst im Abschnitt ‚relationships.adresses‘ die AdressId holen, dann im Abschnitt ‚included‘ die Id suchen. Dort findet man dann unter ‚attributes‘ Name, Vorname, Straße, etc. und die countryId. Die nimmt man dann wiederum und sucht unter inlcudes nach dieser Id, um dann dort bei den Attributen das Land zu erfahren.

Ganz anders der Response, wenn ich es mit Java mache.
Dort gibt es den Abschnitt ‚addresses‘ mit name usw. und direkt dabei auch ein Objekt coutry mit dem gesuchten iso-Code.
image

Jetzt die interessante Frage: Wie kommt der Unterschied zustande? Gibt es irgendeine Option, Header, was auch immer, womit man das JSON umschalten kann?

Viele Grüße
Susanne

P.S. ich kann leider nur einen Screenshot mitschicken.

Die Response wird durch den Endpunkt definiert. Es gibt zwei verschiedene Endpunkt-Typen: Store API und Admin Api.

Store-API:
/store-api/order

Admin-API:
/api/order