1

Need to get Sort By List of Options category products list page using Rest API.

I have checked default REST API but can't get the same.

https://devdocs.magento.com/swagger/

Any have idea how to get Sort By List of Options of category products list page using Rest API.

Any help would be appreciated. Thanks.

  • Let me know if still it will not working. – Rohan Hapani Aug 30 at 5:20
  • Getting error after also add auth "message": "The consumer isn't authorized to access %resources.", – Kirti Nariya Aug 30 at 5:35
  • 1
    Did you set proper headers? – Rohan Hapani Aug 30 at 5:37
  • yes. But still getting error. – Kirti Nariya Aug 30 at 5:41
  • 1
    Please reauthorize token from admin and access latest consumer token. This error related to wrong token. – Rohan Hapani Aug 30 at 5:43
1

As I know, I think there are no any core magento API provide data of sort by option list. So, we need to create custom API for that.

Follow this below steps for that :

Step 1 : create registration.php file at app/code/RH/CustomAPI/registration.php

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'RH_CustomAPI',
    __DIR__
);

Step 2 : create module.php file at app/code/RH/CustomAPI/etc/module.php

<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="RH_CustomAPI" schema_version="0.0.1" setup_version="0.0.1">
    </module>
</config>

Step 3 : Create the webapi.xml file in the app/code/RH/CustomAPI/etc folder and paste the below code:

<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../app/code/Magento/Webapi/etc/webapi.xsd">
    <route url="/V1/getsortorder" method="GET">
        <service class="RH\CustomAPI\Api\GetSortOrderInterface" method="getSortOrderData"/>
        <resources>
            <resource ref="admin"/>
        </resources>
    </route>
</routes>

Step 4 : Create the di.xml file in app/code/RH/CustomAPI/etc/ for API Interface file. So, paste the below code:

<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
    <preference for="RH\CustomAPI\Api\GetSortOrderInterface" type="RH\CustomAPI\Model\GetSortOrder" />
</config>

Step 5 : Define getSortOrderData() method in the interface file. Create GetSortOrderInterface.php file in the app/code/RH/CustomAPI/Api/ folder and paste the below code

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace RH\CustomAPI\Api;

interface GetSortOrderInterface {
    /**
     * Returns sort order list
     *
     * @api
     * @return array
     */
    public function getSortOrderData();
}

Step 6 : Define getSortOrderData() in model file. Create GetSortOrder.php file in the app/code/RH/CustomAPI/Model/ folder and paste the below code :

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace RH\CustomAPI\Model;

use RH\CustomAPI\Api\GetSortOrderInterface;

class GetSortOrder implements GetSortOrderInterface {
    /**
     * @var \Magento\Catalog\Model\Config
     */
    private $catalogConfig;

    /**
     * @var \Magento\Framework\Escaper
     */
    private $escaper;

    /**
     * @param \Magento\Catalog\Model\Config $catalogConfig
     * @param \Magento\Framework\Escaper    $escaper
     */
    public function __construct(
        \Magento\Catalog\Model\Config $catalogConfig,
        \Magento\Framework\Escaper $escaper
    ) {
        $this->_catalogConfig = $catalogConfig;
        $this->escaper = $escaper;
    }

    /**
     * Return array of Sort By List of Options of category products list page
     * 
     * @return array
     */
    public function getSortOrderData() {
        $sortOrder = $this->_catalogConfig->getAttributeUsedForSortByArray();
        $custom_array = [];
        foreach ($sortOrder as $key => $value) {
            $custom_array[] = $this->escaper->escapeHtml(__($value));
        }
        return $custom_array;
    }
}

Now, execute {base_url}/rest/V1/getsortorder url to run API.

Output :

enter image description here

  • 1
    Thanks Rohan Nice explanation. – Kirti Nariya Aug 30 at 5:56
  • 1
    Happy to help !! Happy Coding :) – Rohan Hapani Aug 30 at 5:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.