cancel
Showing results for 
Search instead for 
Did you mean: 

Custom API doesn't work

Custom API doesn't work

I'm trying to develop a module that creates a custom API endpoint (let's call it `/v1/collector`) that receives any POST request (unauthenticated) and proxies it to a third-party API and then sends back the API's response (headers and body) to the client. I followed this tutorial https://developer.adobe.com/commerce/php/tutorials/backend/create-custom-rest-api/ but so far I couldnt even make my endpoint return a 'Hello World' message. Am I missing something? Is it even possible to do this in Magento?
When I run the 
setup:upgrade I can see my new module in the list but everytime I try to make a request I get this:

> curl -L 'https://magento:8890/rest/v1/collector' \
-H 'Content-Type: application/json' \
-d '{"test": "test"}'

> {"message":"Specified request cannot be processed.","trace":null}

 Here are my module's files:
app/code/Dev/RequestForwarder/etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Dev_RequestForwarder">
        <sequence>
            <module name="Magento_Webapi" />
            <module name="Magento_Catalog" />
        </sequence>
    </module>
</config>


app/code/Dev/RequestForwarder/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="Dev\RequestForwarder\Api\ForwarderInterface"
        type="Dev\RequestForwarder\Model\Api\Forwarder"
    />
</config>

app/code/Dev/RequestForwarder/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/collector" method="POST">
        <service class="Dev\RequestForwarder\Api\ForwarderInterface" method="proxy" />
        <resources>
            <resource ref="anonymous"/>
        </resources>
    </route>
</routes>

app/code/Dev/RequestForwarder/Api/ForwarderInterface.php

<?php

namespace Dev\RequestForwarder\Api;

use Magento\Framework\Webapi\Rest\Request;

interface ForwarderInterface
{
    /**
     * Proxies the given data to another service.
     * 
     * @api
     *
     * @param Request $request The request to proxy.
     * @return mixed The response from the proxied service.
     */
    public function proxy(Request $request);
}

app/code/Dev/RequestForwarder/Model/Api/Forwarder.php

<?php

namespace Dev\RequestForwarder\Model\Api;

use Magento\Framework\Webapi\Rest\Request;
use Dev\RequestForwarder\Api\ForwarderInterface;


class RequestForwarder implements ForwarderInterface
{
    /**
     * Proxies the given data to another service.
     * 
     * @api
     *
     * @param Request $request The request to proxy.
     * @return mixed The response from the proxied service.
     */
    public function proxy(Request $request)
    {
        // Perform here the logic to forward the request to the other service
        // and return the response (headers and body) from that service.
        return "Hello World!";
    }
}

  

1 REPLY 1

Re: Custom API doesn't work

Just a quick look at your files, you have an error in your last file app/code/Dev/RequestForwarder/Model/Api/Forwarder.php

 

should be:

 

class Forwarder implements ForwarderInterface