Magento 2 Api Obteniendo error '% fieldName es un campo obligatorio'?

8

No obtengo resultado (id) mientras uso el método POST usando url es rest / V1 / hello / test / 3

Captura de pantalla :ingrese la descripción de la imagen aquí

He seguido este enlace. Para referencia, haga clic aquí.

1) webapi.xml

<?xml version="1.0"?>
    <routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
        <route url="/V1/hello/name/:name" method="GET">
            <service class="Inchoo\Hello\Api\HelloInterface" method="name"/>
            <resources>
                <resource ref="anonymous"/>
            </resources>
        </route>
        <route url="/V1/hello/test/:test" method="POST">
            <service class="Inchoo\Hello\Api\TestInterface" method="test"/>
            <resources>
                <resource ref="anonymous"/>
            </resources>
        </route>
    </routes>

2) TestInterface.php

<?php
namespace Inchoo\Hello\Api;

interface TestInterface
{
    /**
     * Returns greeting message to user
     *
     * @api
     * @param id $name Users id.
     * @return id Greeting message with users id.
     */
    public function test($id);
}

3) Test.php

<?php
namespace Inchoo\Hello\Model;
use Inchoo\Hello\Api\TestInterface;

class Test implements TestInterface
{
    /**
     * Returns greeting message to user
     *
     * @api
     * @param string $name Users name.
     * @return string Greeting message with users name.
     */
    public function test($id) {
        return "Hello How are you your id is:," .$id;
    }
}

4) di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Inchoo\Hello\Api\HelloInterface" type="Inchoo\Hello\Model\Hello" />
    <preference for="Inchoo\Hello\Api\TestInterface" type="Inchoo\Hello\Model\Test" />
</config>

Ahora borré el caché y el caché de página y abrí la aplicación de carteros y mantuve la URL como http://10.0.0.33/nagarajuM2/rest/V1/hello/test/3

pero recibo un error

Por favor, ayúdame.

Nagaraju K
fuente
¿Está enviando una solicitud POST y en eso qué datos está enviando?
Emipro Technologies Pvt. Ltd.
En realidad, quiero imprimir el valor de identificación usando el método de publicación, por lo tanto, he usado el mismo concepto que cualquier inchoo ha seguido. y en la url estoy usando como rest / V1 / hello / name / 4
Nagaraju K
1
Para imprimir primero debe enviar datos POST como json: {"id": {}}
Emipro Technologies Pvt. Ltd.
ok déjame intentar ..
Nagaraju K
Gracias a las tecnologías @Emipro ahora obtuve el resultado. gracias por tu ayuda prntscr.com/g0d53x
Nagaraju K

Respuestas:

6

Está enviando una solicitud POST, por lo que también debe enviar datos en la solicitud POST en formato json como:{ "id": {}}

Y tiene que configurar Content-Type:application/jsonen el encabezado http.

Emipro Technologies Pvt. Limitado.
fuente
Además, tenemos que mencionar "Content-Type: application / json" en la sección de encabezado prntscr.com/g0d96z
Nagaraju K
6

Actualice los comentarios de la función correctamente tanto para el archivo de interfaz como para la clase que lo implementa.

interface TestInterface
{
    /**
     * Returns greeting message to user
     *
     * @param int $name
     * @return mixed
     */
    public function test($id);
}
Pankaj Pareek
fuente
0

Estaba recibiendo los mismos problemas, luego noté que estaba usando POST en lugar de GET , cambiándolo, los problemas se resolvieron.

Rafael Corrêa Gomes
fuente