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
parameter
nodo en webapi.xml solo se usa en el Módulo del cliente para elself
tipo 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.xml
como abajo:y especifique el
$id
argumento 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.xml
como abajo:y especifique el
$id
argumento 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
data
elemento en webapi.xml. Solo dejarlo afuera da el resultado esperado pero no resuelve el problema real.