Псевдоніми класів

Summary

Classname Info
Namespace Ufo\RpcObject\RPC
Target class
public function __construct(
    public string $alias,
    public string $concat = '.',
    ?int $version = 1,
    array $removedMethods = [],
)

Псевдоніми класів

Інколи потрібна альтернативна назва для методів API — наприклад, якщо назва класу задовга через домовленості щодо іменування в проєкті. Атрибут #[RPC\Info] задає псевдонім, під яким методи класу будуть доступні в API.

<?php

namespace App\Api\Procedures;

use Ufo\JsonRpcBundle\ApiMethod\Interfaces\IRpcService;
use Ufo\RpcObject\RPC;

#[RPC\Info('users')]
class MySpecificApiUserServiceWithLongClassName implements IRpcService
{
    public function getList(): array { return []; }
}

В API буде доступний метод users.getList. Оригінальна назва (MySpecificApiUserServiceWithLongClassName.getList) більше не працює.

Псевдонім також стає тегом методів у документації, а повна назва класу — описом тегу.

Символ конкатенації

Другий аргумент concat задає символ (або символи) між псевдонімом і назвою методу. За замовчуванням — . (крапка).

#[RPC\Info('users', concat: '_')]
class UserApi implements IRpcService
{
    public function getList(): array { return []; }
}

В API буде доступний метод users_getList.

Версії 10.0.0–10.3.0

У цих версіях concat ігнорувався, і методи завжди мали роздільник .. З 10.3.1 він знову застосовується: якщо у вас задано concat, а клієнти викликають методи через ., після оновлення назви методів зміняться — оновіть клієнтів або приберіть concat.

Версія API та видалені методи

Аргументи version і removedMethods описують, до якої версії API належить клас і які методи попередніх версій у ній прибрано:

#[RPC\Info('user', version: 2, removedMethods: ['legacySearch'])]
class UserApiV2 implements IRpcService
{
    public function get(string $uuid): array { /* ... */ }
}

Детально — в розділі Версії API.

Застереження

Дві реалізації з однаковою назвою методу в межах однієї групи й версії API бандл відхиляє (з урахуванням правил успадкування класів). Однакові назви в різних групах API дозволені, але для незалежних реалізацій краще використовувати різні назви.