REST API: Media --> POST -> Komisches verhalten

Hallo zusammen, 

vlt hat ja jemand eine Idee zu unserem Problem .

Wenn wir über  die REST-Api einen POST an Media schicken, gibt dieser eine Liste alle Medien zurück, anstatt einen success. 

Geändert haben wir nichts an dem System Evenetuell gab es ein Pluginupdate in Zeit, aber ein deaktivieren aller Plugins brachte leider kein Erfolgserlebnis.

Shopware ist aktuell!

Für Hilfe wäre ich Dankbar…

 

Mit freundlichen Grüßen

 

Für Hilfe wäre ich Dankbar…

Und nun sollen wir alle Rätselraten? Wie sieht denn aktuell dein API POST aus?

Ok, ich habe mich wohl nicht genau genug ausgedrückt, danke der Nachfrage…

Uns hat eine Firma eine Schnittstelle zu unsere Buchhaltung programmiert und diese erwartet eine “success”-Meldung und das generierte Medielement zurück, bekommt aber auf den POST eine Liste alle Medienlemente zurück. Nun funktioniert dies natürlich nicht mehr: Kunde sagt: Wir hätten etwas am Shop verändert, welches das verhalten beeinflusst und deswegen stelle ich mir die Frage was denn zurückommen muss bei einem POST über die API.

Ich habe vorhin mal versucht das ganze mit eine Plugin “Postman” das ganze mal versucht nachzuvollziehen:

GET xxx.de/api/media

POST xxx.de/api/media

"data": [
        {
            "id": 1,
            "albumId": -2,
            "name": "xx",
            "description": "",
            "path": "xx",
            "type": "IMAGE",
            "extension": "png",
            "userId": 50,
            "created": "2016-02-17T00:00:00+0100",
            "fileSize": 363399,
            "width": 6651,
            "height": 1029
        }, [...] ,
        {
            "id": 3575,
            "albumId": -10,
            "name": "xx",
            "description": "xx",
            "path": "xx",
            "type": "PDF",
            "extension": "pdf",
            "userId": 0,
            "created": "2019-02-09T00:00:00+0100",
            "fileSize": 41634,
            "width": null,
            "height": null
        }
    ],
    "total": 2544,
    "success": true
}

 

Wenn man nun die ID mit gibt, gibt:

POST xx.de/api/media/1

GET xx.de/api/media/1

{
    "data": {
        "id": 1,
        "albumId": -2,
        "name": "xx",
        "description": "",
        "path": "xxx",
        "type": "IMAGE",
        "extension": "png",
        "userId": 50,
        "created": "2016-02-17T00:00:00+0100",
        "fileSize": 363399,
        "width": 6651,
        "height": 1029
    },
    "success": true
}

Ich habe es nun leider nicht geschafft, einen wirklichen POST zu generieren, der einen artkel anlegt, aber egal was ich als parameter mitgebe, es kommt immer eine Liste zurück!

 

Bei der recherche habe ich gelesen, dass die Rest API garnicht veränderbar ist über irgendwelche Plugins u. o, Erweiterungen… das würde ja Bedeuten es liegt an Shopware selber, und dort wurde das verhalten geändert…

 

Gruß

 

Eventuell hilft diese Seite weiter:

https://developers.shopware.com/developers-guide/rest-api/api-resource-media/

 

@R4M schrieb:

Eventuell hilft diese Seite weiter:

https://developers.shopware.com/developers-guide/rest-api/api-resource-media/ 

 

Da war ich natürlich auch schon, musste mich ja auch einlesen, wie das überhaupt funktioniert, aber dort steht nicht, was zurück kommt von der API…

 

Ich habe jetzt mal ein Schnelltest gemacht. In etwa so müsste es aussehen:

Array
(
    [success] => 1
    [data] => Array
        (
            [id] => 750
            [location] => https://xxx.de/api/media/750
        )

)

 

Danke R4M, genau das sagen die Programmierer der Schnittstelle auch. Kannst du mir sagen, wie dein POST ausgesehen hat, damit ich den bei mir auch nochmal testen kann?

Und wie ist das verhalten wenn du du nur einen POST auf api/medie ausführst, kommt da bei dir auch nur eine Liste zurück?

 

 

Weil egal, was ich dem Query mitgeben, es kommt die Liste aller Medienelemente zurück

 

Ich muss jedoch dazu erwähnen, dass ich die ApiClient Class von Shopware mit benutze. Wenn ich POST ohne Angaben mache, kommt eine Fehlermeldung zurück. Eine Liste kommt bei GET zurück.

Also bei sieht sieht das im Test aslo so aus:

include 'SW_ApiClient.php';


$SW = new ApiClient( 'https://xxx.de/api', 'Benutzer', 'Passwort' );

$new = Array(
  'album' => -2,
  'file' => 'test.png',
  'description' => 'test'
);

$out = $SW->post('media', $new );

 

So würde ich es ja auch erwarten… Weil wenn post = create, sollte er nicht einfach eine Liste zurückgeben. Also irgendwie ist meine GET und POST gleichgeschaltet… Wie kann ich noch weiter debuggen?

Da stimmt vielleicht etwas an deinem Script oder Aufbau nicht - ist jetzt nur eine Vermutung.

Ja, wenn es ja mein Script wäre. Das ganze ist glaub ich in Python geschrieben, darauf habe ich keinen Zugriff. 

 

Aber ich habe das ja das gleiche Problem wenn ich ich über dieses POSTMAN programm versuche einen Post zu machen… also vlt wird die POST-Action als solche nicht erkannt und Shopware kann nicht erkennen, ob es einen POST oder eine GET gegeben hat

Ohje, für Python bin ich der falsche Ansprechpartner.

1 Like

Kann es sein, dass es was mit einer SSL verschlüsselung zu tun hat?

Ich denke, ich habe die Lösung… Unser Shop ist natürlich SSL - Verschlüsselt, aber ich habe die ganze Zeit ohne https einen Aufruf gemacht. Der Aufruf geht, aber das verhalten von POST UND GET unterscheidet sich nicht. Mache ich den Aufruff mit https gibt er bei POST auch einen Fehlermeldung zurück… Danke schön!