Как построить пользовательскую конечную точку API REST
Pimcore предлагает пакет под названием DataHub, предлагающий высоко настраиваемый интерфейс GraphQL на большинстве сущностей.
Однако общий вариант использования для приложений с помощью Pimcore интегрируется с внешними системами, который требует пользовательского ответа от конечных точек API.
Одним из способов достижения этого требования является создание пользовательского действия контроллера, которое раскрывает только правильные данные в желаемом формате.
Пример
<?php
namespace App\Controller;
use Pimcore\Model\DataObject;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use \Pimcore\Controller\FrontendController;
class CustomRestController extends FrontendController
{
/**
* @Route("/custom-pimcore-webservice/rest/get-products")
*/
public function defaultAction(Request $request): JsonResponse
{
// do some authorization here ...
$blogs = new DataObject\BlogArticle\Listing();
foreach ($blogs as $key => $blog) {
$data[] = array(
"title" => $blog->getTitle(),
"description" => $blog->getText(),
"tags" => $blog->getTags());
}
return $this->json(["success" => true, "data" => $data]);
}
}
Sometimes it is necessary to serialize complete element for API response.
This can be achieved by {P1}
which implements the \JsonSerializable interface and implementing jsonSerialize method to return the data you require to be serialized.
<?php
namespace App\Model\DataObject;
class BlogArticle extends \Pimcore\Model\DataObject\BlogArticle implements \JsonSerializable
{
public function jsonSerialize(): array
{
$vars = get_object_vars($this);
return $vars;
}
}
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.