J'essaie de créer une route api avec des paramètres d'entrée mais je n'obtiens pas le résultat attendu.
Voici mon 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>
Voici mon interface:
interface FooInterface
{
/**
* Test function
*
* @api
* @param string $id
* @return string
*/
public function getFooById($id);
}
Et voici la classe:
class Foo implements FooInterface
{
/**
* {@inheritdoc}
*/
public function getFooById($id){
return $id;
}
}
J'omets le di.xml avec la préférence. Maintenant, si j'appelle cette route, quoi que je fasse, tout ce que je récupère est %id%
. Même si je ne mets aucun paramètre, j'obtiens cela au lieu d'une erreur ou de quelque chose.
Qu'est-ce que je fais mal ici?
J'ai essayé:
- envoi d'une demande get
- envoi d'une requête get avec paramètre
/order?id=foo
- envoi d'une demande de publication
- envoi d'une demande de publication avec formulaire-données
- envoyer une demande de publication avec des données brutes (comme on le voit sur la capture d'écran)
Tous ont le même résultat -> %id%
J'utilise l'édition communautaire btw.
Réponses:
Après avoir vérifié les modules principaux, constaté que le
parameter
nœud dans webapi.xml n'est utilisé que dans le module client pour leself
type de ressource.Le fichier ci-dessous est responsable de la conversion de l'espace réservé du paramètre avec une valeur.
Il existe maintenant deux façons de transmettre des paramètres dans l'API.
Solution 1:
webapi.xml
comme ci-dessous:et spécifiez également l'
$id
argument dans la classe Interface et dans la définition d'implémentation. Dans ce cas, vous devez passer id comme contenu corporel.Solution 2:
webapi.xml
comme ci-dessous:et spécifiez également l'
$id
argument dans la classe Interface et dans la définition d'implémentation. Dans ce cas, vous devez passer id dans l'URL comme argument. Pour cela, vous pouvez également consulter le module produit.la source
data
élément dans le webapi.xml. Le laisser de côté donne la sortie attendue mais ne résout pas le problème réel.