Misanthropist
@Misanthropist
Web-developer

REST API для сущности не из коллекции?

Разбираюсь с Apigility. Допустим, хочу, чтобы по REST GET запросу api.site/version возвращалась версия API.
По сути, имеем Entity и Collection. Что из этого должно возвращать инфу о версии? Может кто-нить видел реализацию, порыть для примера?
  • Вопрос задан
  • 380 просмотров
Решения вопроса 1
@snow_wons
Для этого нужно использовать не REST, а RPC сервис.

Если делать через HAL, то вот так:
Api\src\V1\Rpc\Version\VersionController.php
namespace Api\V1\Rpc\Version;

use Zend\Mvc\Controller\AbstractActionController;
use ZF\ContentNegotiation\ViewModel;

class VersionController extends AbstractActionController
{
    public function versionAction()
    {
        $hal = $this->getPluginManager()->get('hal');
        
        $o = $hal->createEntityFromMetadata(
            new Entity(), 
            $hal->getMetadataMap()->get('Api\\V1\\Rpc\\Version\\Entity')
        );
                
        return new ViewModel(array(
            'payload' => $o
        ));
    }
}

Api\src\V1\Rpc\Version\Entity.php
namespace Api\V1\Rpc\Version;

class Entity
{
    public $version = 1;
}

И в конфиге модуля
'zf-hal' => array(
        'metadata_map' => array(
            'Api\\V1\\Rpc\\Version\\Entity' => array(
                'route_name' => 'api.rpc.version',
                'entity_identifier_name' => 'version',
                'route_identifier_name' => 'version_id',
                'hydrator' => 'Zend\\Stdlib\\Hydrator\\ObjectProperty',
            ),


Если же HAL не нужен и достаточно простого ответа:
Api\src\V1\Rpc\Version\VersionController.php
namespace Api\V1\Rpc\Version;

use Zend\Mvc\Controller\AbstractActionController;

class VersionController extends AbstractActionController
{
    public function versionAction()
    {
        return ['version'=>1];
    }
}

Entity и код в конфиге не нужен.

Но если вдруг очень хочется использовать REST, то тоже есть способ.
Api\src\V1\Rest\Version\VersionController.php
namespace Api\V1\Rest\Version;

use ZF\Rest;

class VersionController extends Rest\RestController {

    protected function getIdentifier($routeMatch, $request)
    {
        return 'version';
    }

}

Api\src\V1\Rest\Version\Entity.php
namespace Api\V1\Rest\Version;

class Entity
{
    public $version = 1;
}

Api\src\V1\Rest\Version\VersionResource.php
namespace Api\V1\Rest\Version;

use ZF\Rest\AbstractResourceListener;

class VersionResource extends AbstractResourceListener
{
    public function fetch($id)
    {
         return new Entity();
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы