Wie erhalte ich eine Antwort von der REST-API im JSON-Format in Magento 2?


Antworten:


14

Unten finden Sie das benutzerdefinierte API-Modul mit dem Schlüsselpaarwert.
Um die JSON-Antwort zu erhalten, setzen Sie im Client die Antwortheader auf"Content-Type: application/json; charset=utf-8"

und wenn Sie einen Schlüsselpaarwert benötigen, der als Antwort verwendet wird, sollten Schlüssel und Wert so sein, wie /rest/V1/categorieswir eine Datenschnittstelle erstellen müssen

Um in Chrome das Download-Plugin namens Rest Client App zu testen, rufen Sie die URL auf

Die folgende Modul-URL lautet http://yourdomein.com/magento2/rest/V1/getinfo

App \ Code \ Sugarcode \ Customapi \ Registrierung.php :

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Sugarcode_Customapi',
    __DIR__
);

app \ code \ Sugarcode \ Customapi \ etc \ module.xml :

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Sugarcode_Customapi" setup_version="2.0.0"/>
</config>

app \ code \ Sugarcode \ Customapi \ etc \ di.xml :

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">

    <preference for="Sugarcode\Customapi\Api\TestInterface"
                type="Sugarcode\Customapi\Model\Test" />

    <preference for="Sugarcode\Customapi\Api\Data\TestdataInterface" type="Sugarcode\Customapi\Model\Testmodel" />
</config>

app \ code \ Sugarcode \ Customapi \ etc \ 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">

    <!-- Example: curl http://127.0.0.1/index.php/rest/V1/calculator/add/1/2 -->
    <route url="/V1/getinfo" method="GET">
        <service class="Sugarcode\Customapi\Api\TestInterface" method="getinfo" />
        <resources>
            <resource ref="anonymous" />
        </resources>
    </route>

</routes>

app \ code \ Sugarcode \ Customapi \ Api \ TestInterface.php :

<?php

namespace Sugarcode\Customapi\Api;

use Sugarcode\Customapi\Api\Data\TestdataInterface;

interface TestInterface
{
    /**
     * Retrieve list of info
     *
     * @throws \Magento\Framework\Exception\NoSuchEntityException If ID is not found
     * @return \Sugarcode\Customapi\Api\Data\TestdataInterface containing Tree objects
     */
    public function getinfo();

}

Entfernen Sie keine Kommentare, es ist am wichtigsten

app \ code \ Sugarcode \ Customapi \ Api \ Data \ TestdataInterface.php (Daten festlegen und abrufen ):

<?php

namespace Sugarcode\Customapi\Api\Data;

/**
 * @api
 */
interface TestdataInterface
{

    /**
     * Get name
     *
     * @return string
     */
    public function getName();

      /**
     * Set name
     *
     * @param string $name
     * @return $this
     */
    public function setName($id);

}

app \ code \ Sugarcode \ Customapi \ Model \ Test.php :

<?php

namespace Sugarcode\Customapi\Model;

use Sugarcode\Customapi\Api\TestInterface;

/**
 * Defines the implementaiton class of the calculator service contract.
 */
class Test implements TestInterface
{
    /**
     * Return the sum of the two numbers.
     *
     * @api
     * @param int $num1 Left hand operand.
     * @param int $num2 Right hand operand.
     * @return int The sum of the two values.
     */
    protected $dataFactory;
    public function __construct(\Sugarcode\Customapi\Api\Data\TestdataInterfaceFactory $dataFactory)
    {
        $this->dataFactory = $dataFactory;
    }



    public function getinfo() {
        $page_object = $this->dataFactory->create();
        $page_object->setName('Hello');
        return $page_object;        

    }

}

app \ code \ Sugarcode \ Customapi \ Model \ Testmodel.php :

<?php

namespace Sugarcode\Customapi\Model;

class Testmodel extends \Magento\Framework\Model\AbstractModel implements
    \Sugarcode\Customapi\Api\Data\TestdataInterface 
{
    const KEY_NAME = 'name';


     public function __construct(
        \Magento\Framework\Model\Context $context,
        \Magento\Framework\Registry $registry,
        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
        \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
        array $data = []
    ) {
        parent::__construct($context, $registry, $resource, $resourceCollection, $data);
    }


    public function getName()
    {
        return $this->_getData(self::KEY_NAME);
    }


    /**
     * Set name
     *
     * @param string $name
     * @return $this
     */
    public function setName($name)
    {
        return $this->setData(self::KEY_NAME, $name);
    }


}

Dies ist bei weitem der beste Weg, um die Antwort von json-Schlüsselwertpaaren zu handhaben. Ich weiß, dass Sie hier eine andere Lösung haben, magento.stackexchange.com/questions/94618/…, aber es scheint kein natürlicher Ansatz zu sein. Vielen Dank.
— Hoang Trinh

Dies schafft ein Problem bei der Magento-Upgrade-Zeit
— Pushpendra Singh

8

Das Antwortformat (XML oder JSON) wird basierend auf dem AcceptHeader ausgewählt und application/jsonauf der Clientseite festgelegt.


: - Wenn ich API-URL (Get-Methode) in Browser im XML-Format setzen, gibt es eine Option, um das Antwortformat festzulegen
— Pradeep Kumar

Wenn Sie dies nur zu Test- / Entwicklungszwecken benötigen, entfernen Sie alle Renderer mit Ausnahme von JSON in Magento/Webapi/etc/di.xml. Verwenden Sie andernfalls ein Plugin für den Browser, um die richtigen Header festzulegen (z. B. REST-Client für Firefox). Auf jeden Fall ist es möglich, nur auf "anonyme" Ressourcen ohne AuthorizationHeader zuzugreifen .
— Alex Paliarush

Ist es obligatorische API / Daten für Knoten, dass ich im Array Ich möchte Schlüsselpaar Wert in diesem Fall, wie mit ohne
— Datenordner

1
Ich bin mir nicht sicher, ob ich verstehe, was Sie fragen.
— Alex Paliarush

Wenn ich meine API anrufe, brauche ich eine Antwort im Schlüsselwertpaar. Dafür haben sie im Kernmodul eine API / Daten-Schnittstelle geschrieben, ohne dass wir die Antwort mit dem Schlüsselpaarwert wie oben beenden können. Screenshot der Kategorien
— Pradeep Kumar

4

Verwenden Sie eine cURL:

    $URL = curl_init( $www );
    curl_setopt( $URL, CURLOPT_HEADER, 0 );
    curl_setopt( $URL, CURLOPT_CUSTOMREQUEST, "GET" );
    curl_setopt( $URL, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $URL, CURLOPT_HTTPHEADER, array(
            "Content-Type: application/json",
            "Authorization: Bearer " . $token_API
    ) );

In diesem Schritt zur json_decode()PHP-Funktion gibt der zweite Parameter trueJSON im Array fortmat zurück. Weitere Informationen finden Sie unter: http://php.net/json_decode

$URL = json_decode(curl_exec($URL), true);

Und dann:

curl_close( $URL ); //close cURL conn

print_r( $URL ); //result

1
Wie kann ich diese $ token_API des Kunden programmgesteuert abrufen?
— Neuling

@Newbie Holen Sie sich ein Admin-Token POST / V1 / Integration / Admin / Token IntegrationAdminTokenServiceV1 Holen Sie sich ein Kunden-Token POST / V1 / Integration / Kunde / Token IntegrationCustomerTokenServiceV1 Wenn Sie dieses Programm erhalten, erstellen Sie ein PHP-Skript und fordern Sie es von der API-URL an. Land Nehmen Sie einen Rückgabewert von WEB API. Schriftart: devdocs.magento.com/guides/v2.0/get-started/authentication/…
— Matt Silva

3

Ich würde empfehlen, einen leichten REST-Client über einen Browser zu verwenden. Wenn Sie Chrome installiert haben, installieren Sie einfach die "Postman-Erweiterung". Dort können Sie auswählen, in welcher Darstellung Sie die Antwort sehen möchten. Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.