Ich versuche, eine API-Route mit Eingabeparametern zu erstellen, erhalte jedoch nicht das erwartete Ergebnis.
Hier ist meine webapi.xml:
<?xml version="1.0"?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../app/code/Magento/Webapi/etc/webapi.xsd">
<route url="/V1/foo" method="POST" secure="true">
<service class="..\FooInterface"
method="getFooById"/>
<resources>
<resource ref="anonymous"/>
</resources>
<data>
<parameter name="id" force="true">%id%</parameter>
</data>
</route>
</routes>
Hier meine Schnittstelle:
interface FooInterface
{
/**
* Test function
*
* @api
* @param string $id
* @return string
*/
public function getFooById($id);
}
Und hier die Klasse:
class Foo implements FooInterface
{
/**
* {@inheritdoc}
*/
public function getFooById($id){
return $id;
}
}
Ich lasse die di.xml mit der Präferenz weg. Wenn ich diese Route nenne, was auch immer ich tue, bekomme ich nur zurück %id%
. Selbst wenn ich keinen Parameter eingebe, bekomme ich diesen anstelle eines Fehlers oder so.
Was mache ich hier falsch?
Hier ist der Anruf beim Postboten:
Ich habe es versucht:
- Senden einer Get-Anfrage
- Senden einer Get-Anfrage mit Parameter
/order?id=foo
- Senden einer Post-Anfrage
- Senden einer Postanfrage mit Formulardaten
- Senden einer Post-Anfrage mit Rohdaten (siehe Screenshot)
Alle haben das gleiche Ergebnis -> %id%
Ich benutze übrigens die Community Edition.
Antworten:
Nach Überprüfung der Kernmodule wurde festgestellt, dass der
parameter
Knoten in webapi.xml nur im Kundenmodul für denself
Ressourcentyp verwendet wird.Die folgende Datei ist für das Konvertieren des Parameterplatzhalters mit dem Wert verantwortlich.
Jetzt gibt es zwei Möglichkeiten, Parameter in der API zu übergeben.
Lösung 1:
webapi.xml
Wie unten:und geben Sie das
$id
Argument auch in der Interface-Klasse und in der Implementierungsdefinition an. In diesem Fall müssen Sie die ID als Textinhalt übergeben.Lösung 2:
webapi.xml
Wie unten:und geben Sie das
$id
Argument auch in der Interface-Klasse und in der Implementierungsdefinition an. In diesem Fall müssen Sie die ID in der URL als Argument übergeben. Hierzu können Sie auch das Produktmodul überprüfen.quelle
data
Element speziell in der Datei webapi.xml verwenden. Wenn Sie es einfach weglassen, erhalten Sie die erwartete Ausgabe, aber das eigentliche Problem wird nicht gelöst.