Перейти к основному содержимому

Как построить пользовательскую конечную точку 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;
}
}


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.