Creating Custom API Endpoint¶
This cookbook provides you all the necessary steps that you will need for extending your backend API with a custom endpoint.
To keep the cookbook as simple as possible, we will just add /hello/<name>
endpoint that will greet the API client.
1. Add a new controller that extends AbstractFOSRestController
¶
declare(strict_types=1);
namespace App\Controller\Api\V1\Product;
use FOS\RestBundle\Controller\AbstractFOSRestController;
class HelloController extends AbstractFOSRestController
{
}
2. In the controller, add helloAction()
method¶
We will mark the action as "GET API method" using FOS\RestBundle\Controller\Annotations\Get
annotation.
Then, we need to create a view object and return a response object, like in any other action in standard Symfony controller.
declare(strict_types=1);
namespace App\Controller\Api\V1\Product;
use FOS\RestBundle\Controller\AbstractFOSRestController;
+ use FOS\RestBundle\Controller\Annotations\Get;
+ use FOS\RestBundle\View\View;
+ use Symfony\Component\HttpFoundation\Response;
class HelloController extends AbstractFOSRestController
{
+ /**
+ * @Get("/hello")
+ * @return \Symfony\Component\HttpFoundation\Response
+ */
+ public function helloAction(): Response
+ {
+ $view = View::create(['Hello world!'], Response::HTTP_OK);
+
+ return $this->handleView($view);
+ }
}
3. Add a parameter for the endpoint¶
In this step, we will require the client's name as a parameter and reflect it in the response.
/**
- * @Get("/hello")
+ * @Get("/hello/{name}")
+ * @param string $name
* @return \Symfony\Component\HttpFoundation\Response
*/
- public function helloAction(): Response
+ public function helloAction(string $name): Response
{
- $view = View::create(['Hello world!'], Response::HTTP_OK);
+ $view = View::create([sprintf('Hello %s!', $name)], Response::HTTP_OK);
return $this->handleView($view);
}
Conclusion¶
Your new backend API endpoint is now available on the url <your_domain_url>/api/v1/hello/<name>
. If you are not sure how to test it, you can get inspired in Introduction to Backend API.
The routing for your new endpoint works out of the box, thanks to the shopsys_shop_api
setting in your config/routes/backend-api.yaml
configuration.
API Authentication - OAuth2 is required by default for the endpoint, thanks to the oauth2
setting in your config/routes/backend-api.yaml
configuration.