cancel
Showing results for 
Search instead for 
Did you mean: 

Magento2 REST API Issue

   Did you know you can see the translated content as per your choice?

Translation is in progress. Please check again after few minutes.

Magento2 REST API Issue

Hi ,

 

I am developing an API to get product by their ID. Here is the files i created so far.

registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'MyCompany_ProductBy',
    __DIR__
);

Mycompany/ProductBy/API/ProductByInterface.php

 

<?php
namespace MyCompany\ProductBy\Api;
 
interface ProductByInterface
{
    /**
     * Returns product details.
     *
     * @param int $id
     * @return array[]
     */
    public function getProductById($id);
    
}

etc/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="MyCompany\ProductBy\Api\ProductByInterface" type="MyCompany\ProductBy\Model\ProductBy" />
</config>

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="MyCompany_ProductBy" setup_version="2.0.0">
      </module>
</config>

etc/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/productbyid/:id" method="GET">
        <service class="MyCompany\ProductBy\Api\ProductByInterface" method="getProductById"/>
        <resources>
            <resource ref="anonymous"/>
        </resources>
    </route>
</routes>

Model/ProductBy.php

<?php
namespace MyCompany\ProductBy\Model;
use MyCompany\ProductBy\Api\ProductByInterface;
use Magento\Framework\Controller\ResultFactory;


class ProductBy implements ProductByInterface
{

    /**
     * @var \Magento\Catalog\Api\ProductRepositoryInterface
     */
    protected $productRepository;
    protected $resultJsonFactory; 

    public function __construct(
      
       \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
   \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory)
    {
        $this->productRepository = $productRepository;
          $this->resultJsonFactory = $resultJsonFactory;
        
    }

    /**
     * {@inheritdoc}
     */
    public function getProductById($id)
    {
        $prod_data = $this->productRepository->getById($id);

        $color_option_id = $prod_data->getColor();   
        $attr = $prod_data->getResource()->getAttribute('color');
        if ($attr->usesSource()) {
            $coloroptionText = $attr->getSource()->getOptionText($color_option_id);
        }
        $size_option_id = $prod_data->getShirtSize();  
         $attr = $prod_data->getResource()->getAttribute('shirt_size');
        if ($attr->usesSource()) {
            $sizeoptionText = $attr->getSource()->getOptionText($size_option_id);
        }

       

        //return $this->resultJsonFactory->create()->setData(['data'=>$prod_data]);


         $result = $this->resultJsonFactory->create();
        /** You may introduce your own constants for this custom REST API */
       
        $result->setHeader('Content-Transfer-Encoding', 'binary', true);
        $result->setData($prod_data->getData());
        
       
    
        return $result;
    }
}

When i execute the rest api , i am getting the following error in magento exception log.

 

main.CRITICAL: Report ID: webapi-5bea6f9f1c395; Message: Class does not exist {"exception":"[object] (Exception(code: -1): Report ID: webapi-5bea6f9f1c395; Message: Class does not exist at /var/www/html/myapp/vendor/magento/framework/Webapi/ErrorProcessor.php:205, ReflectionException(code: -1): Class does not exist at /var/www/html/myapp/vendor/magento/framework/Reflection/MethodsMap.php:155)"} []

 

Can anybody tell me what i am wrong here. I googled the error and tried to mention the return type array , Model/ProductInterface , null . But none of them worked out.

 

 

1 REPLY 1

Re: Magento2 REST API Issue

Things break when you have a return type of 'array', or in your case 'array[]'.

 

Try changing the return type from 'array[]' to 'int[]' in the PHPDocs for Mycompany/ProductBy/API/ProductByInterface.php or if you can't ensure it will be an array of integers, you could use 'string[]' or 'mixed[]' depending on the actual return type.

 

Hope this helps.