Estoy tratando de crear una ruta api con parámetros de entrada pero no obtengo el resultado esperado.
Aquí está mi 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>
Aquí mi interfaz:
interface FooInterface
{
/**
* Test function
*
* @api
* @param string $id
* @return string
*/
public function getFooById($id);
}
Y aquí la clase:
class Foo implements FooInterface
{
/**
* {@inheritdoc}
*/
public function getFooById($id){
return $id;
}
}
Estoy omitiendo el di.xml con la preferencia. Ahora, si llamo a esa ruta, sea lo que sea que haga, todo lo que regreso es %id%. Incluso si no pongo ningún parámetro, obtengo eso en lugar de un error o algo así.
¿Qué estoy haciendo mal aquí?
Aquí está la llamada en cartero:

Lo intenté:
- enviando una solicitud de obtención
- enviando una solicitud get con parámetro
/order?id=foo - enviando una solicitud de publicación
- Enviar una solicitud de publicación con datos de formulario
- Enviar una solicitud de publicación con datos sin procesar (como se ve en la captura de pantalla)
Todos tienen el mismo resultado -> %id%
Estoy usando la edición comunitaria por cierto.

Respuestas:
Después de verificar los módulos principales, descubrió que el
parameternodo en webapi.xml solo se usa en el Módulo del cliente para elselftipo de recurso.El archivo a continuación es responsable de Convertir el marcador de posición de parámetro con valor.
Ahora hay dos formas de pasar parámetros en API.
Solución 1:
webapi.xmlcomo abajo:y especifique el
$idargumento en la clase de interfaz y en la definición de implementación también. En este caso, debe pasar la identificación como contenido del cuerpo.Solución 2:
webapi.xmlcomo abajo:y especifique el
$idargumento en la clase de interfaz y en la definición de implementación también. En este caso, debe pasar la identificación en la URL como argumento. Para esto puede consultar el módulo del producto también.fuente
dataelemento en webapi.xml. Solo dejarlo afuera da el resultado esperado pero no resuelve el problema real.