Как сделать кастомный endpoint со своими параметрами в ApiPlatform?
Всем привет,
У меня есть задание взять данные из внешнего апи и показать их на сайте с использованием symfony и Api platform.
Пользователь выбирает даты и получает результат с внешнего апи. Я сделал приложение в виде обычного rest, но в задании есть обязательное условие использовать Api platform. И я не понимаю каким образом его здесь использовать? Единственное моё предположение это:
Api platform должен быть как обёртка над внешним api с которого я буду брать данные, в нём будет свой endpoint например api/get/{startDate}/{endDate} и этот endpoint будет возвращать json данные для клиента, буду использовать reactjs. Но в этом случае я не могу понять как сделать endpoint со своими параметрами, api platform везде пихает параметр id, а мне надо только те 2 параметра которые я укажу. И я не использую сущность в этом проекте так как ничего не записываю в базу, а api platform нужно конфигурировать через сущность. В общем не совсем понимаю как это сделать. С api platform особо не знаком, и не могу найти как сделать такой роут api/get/{startDate}/{endDate}.
Вроде бы как достать данные можно при помощи Data Providers, а как тогда создать контроллер к этому провайдеру без сущности?
Ответы (1 шт):
Вам ничего не мешает написать что-то подобное, не ссылаясь ни на какие сущности:
/**
* Метод делает что-то (его описание, будет title-ом для данного метода на `/api/doc`).
*
* @Rest\Get("/{startDate}/{endDate}/")
*
* @Rest\View(statusCode=200)
*
* @SWG\Response(
* response=200,
* description="Успешный запрос"
* )
*
* @SWG\Response(
* response=400,
* description="Невалидный параметр, скажите об этом",
* @SWG\Schema(
* @SWG\Property(property="success", type="boolean"),
* @SWG\Property(property="code", type="string"),
* @SWG\Property(property="data", type="object"),
* @SWG\Property(property="message", type="string")
* )
* )
*
* @SWG\Response(
* response=404,
* description="Что-то не найдено",
* @SWG\Schema(
* @SWG\Property(property="success", type="boolean"),
* @SWG\Property(property="code", type="string"),
* @SWG\Property(property="data", type="object"),
* @SWG\Property(property="message", type="string")
* )
* )
*/
public function someAction(string $startDate, string $endDate)
{
/** Do something here... */
}
Так же, вы можете указать общий роут у класса:
/**
* @Route("/api/get")
* @SWG\Tag(name="Название раздела для данного класса")
*/
class YourClassController extends AbstractFOSRestController