Hallo, ich habe eine Frage zur Erweiterung der API. Ich benötige die Möglichkeit alle Artikel einer bestimmten Kategorie abzufragen. Nach meinem Verständnis ist das so von Haus aus nicht möglich. Deswegen habe ich die API erweitert. Ich habe mich dabei an diesen Artikel aus dem Wiki gehalten. Klappt auch gut. Der Aufruf, so dachte ich mir, soll irgendwie so aussehen: /api/articles/getAllArticlesFromCategory/categoryID Deswegen habe ich unter [color=green]Shopware/Controllers/Api/Articles[/color] eine Methode hinzugefügt. public function getAllArticlesFromCategory() { // stuff }
Dies funktioniert aber nicht. Ich bekomme diese Fehlermeldung: {"success":false,"message":"Resource not found"}
Erstelle ich einen neuen Controller inkl. Ressource, mit der obigen Methode, funktioniert es auch nicht. Es klappt erst, wenn ich meinem neuen Controller die Methode public function indexAction() { // stuff }
hinzufüge. Frage: Bedeutet das, dass ich pro Controller nur eine indexAction() haben darf? Ist es nicht möglich Methodennamen außer: [list] indexAction getAction putAction postAction deleteAction [/list] zu haben? Wo/Wie wird der Aufruf geroutet? Es wäre schöner wenn man nicht für jeden Call mit Query-Part einen neuen Controller erstellen muss. Viele Grüße, mifa
Hi, das Routing geschieht hier: /engine/Shopware/Plugins/Default/Core/RestApi/Components/Router.php Grundsätzlich gibt es immer drei Komponenten: Das HTTP-Verb, das du für REST-Requests benutzt, die Controller-Action, in die das gemappt wird und die Methode auf der eigentlichen Api-Ressource: [list] [*] GET /articles => indexAction => getList[[/*] [*] GET /articles/{ID} => getAction => getOne[/*] [*] POST /articles => postAction => create[/*] [*] PUT /articles/{ID} => putAction => update[/*] [*] DELETE /articles/{ID} => deleteAction => delete[/*][/list] Einige Ressourcen unterstützen darüber hinaus die neuen Batch-Requests (etwa Artikel) [list] [*] PUT /articles/ => batchAction => batch[/*] [*] DELETE /articles/ => batchDeleteAction => batchDelete[/*][/list] Schöne Grüße, Daniel