Magento 2でJSON形式のREST APIから応答を取得するにはどうすればよいですか?


回答:


14

以下は、キーペア値
を持つカスタムAPIモジュールです。JSON応答を取得するには、クライアントで応答ヘッダーを設定します"Content-Type: application/json; charset=utf-8"

そして、あなたが応答しているキーペアの値が必要な場合は、/rest/V1/categoriesデータインターフェイスを作成する必要があるようなキーと値が必要です

レストクライアントアプリと呼ばれるChromeダウンロードプラグインをテストするには、URLを呼び出します

モジュールのURLの下はhttp://yourdomein.com/magento2/rest/V1/getinfoになります

app \ code \ Sugarcode \ Customapi \ registration.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();

}

最も重要なコメントを削除しないでください

app \ code \ Sugarcode \ Customapi \ Api \ Data \ TestdataInterface.php(データの設定と取得):

<?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);
    }


}

これは、jsonのキーと値のペアの応答を処理するための最善の方法です。ここmagento.stackexchange.com/questions/94618/…に別の解決策があることは知っていますが、それは自然なアプローチではないようです。ありがとうございました。
ホアントリン2017年

これは、magentoのアップグレード時に問題を
引き起こしてい

8

Acceptヘッダーに基づいて応答形式(XMLまたはJSON)が選択さapplication/jsonれ、クライアント側で設定されます。


:-ブラウザーにapi url(getメソッド)を配置した場合、それをxml形式で作成します。json形式で作成する方法には、応答形式を設定するオプションがあります
Pradeep Kumar

テスト/開発の目的でこれが必要な場合は、JSON以外のすべてのレンダラーを削除してくださいMagento/Webapi/etc/di.xml。それ以外の場合は、ブラウザのプラグインを使用して適切なヘッダーを設定します(FirefoxのRESTクライアントなど)。とにかく、Authorizationヘッダーなしで「匿名」リソースのみにアクセスすることが可能です。
Alex Paliarush

配列内のiがノードの必須のapi /データであり、その場合にキーペアの値をキーにしたい場合、データフォルダーを使用しない方法
Pradeep Kumar

1
質問の内容がよくわからないので、説明してください。
Alex Paliarush

apiを呼び出すと、キーと値のペアで応答が必要です。コアモジュールでは、api / dataインターフェイスを作成しました。上記のカテゴリのスクリーンショットのように、キーペアの値で応答を返すことはできません
Pradeep Kumar

4

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
    ) );

json_decode()PHP関数のこのステップでは、2番目のtrueパラメーターがJSONを配列fortmatに返します。詳細については、http://php.net/json_decodeを参照してください。

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

その後:

curl_close( $URL ); //close cURL conn

print_r( $URL ); //result

1
この$ token_APIをプログラムで取得するにはどうすればよいですか?
初心者は

@Newbie管理トークンを取得POST / V1 / integration / admin / token integrationAdminTokenServiceV1顧客トークンを取得POST / V1 / integration / customer / token integrationCustomerTokenServiceV1このプログラムを取得した場合、PHPスクリプトを作成し、API URLランドからリクエストする戻り値を取得するWEB API。フォント:devdocs.magento.com/guides/v2.0/get-started/authentication/...
マット・シルバ

3

ブラウザーで軽量のRESTクライアントを使用することをお勧めします。Chromeがインストールされている場合は、「postman拡張機能」をインストールしてください。そこで、答えを表示したい表現を選択できます。 ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.