Summary
Classname | Info | |
Namespace | Ufo\RpcObject\RPC | |
Target | class | |
Arguments: | ||
$alias | type | string |
optional | true | |
default | null | |
$concat | type | string |
optional | true | |
default | '.' |
Псевдоніми класів
Інколи може знадобитися задати альтернативну назву для API метода, наприклад якщо у вас занадто довга назва класу, що обумовлена якимись стандатрами або домовленностями до іменувань класів в вашому проєкті.
В такому разі ви можете додати до вашого класу атрибут#[RPC\Info] вказавши псевдонім для класу, це дасть вказівку RPC серверу сприймати цей псевдонім асоційовано до цього класу.
2
3
4
5
6
7
8
9
10
namespace App\Api\Procedures;
use Ufo\RpcObject\RPC;
#[RPC\Info(alias: 'users')]
class MySpecificApiUserServiceWithLongClassName implements IRpcService
{
public function getList(): void {}
}
В такому випадку буде доступний API метод users.getList.
Символ конкатенації
Атрибут Info також приймає другий аргумент concat, який вказує символ або символи, що поєднують назву класу і назву методу при генерації ServiceMap для RPC серверу.
Значення за замовченням "." (крапка), але ви можете це легко змінити, вказавши потрібний вам символ або символи.
2
3
4
5
6
7
8
9
10
namespace App\Api\Procedures;
use Ufo\RpcObject\RPC;
#[RPC\Info(alias: 'users', concat: '>')]
class MySpecificApiUserServiceWithLongClassName implements IRpcService
{
public function getList(): void {}
}
Приклад коду вище призведе до того, що в API буде доступний метод users>getList.
Застереження
ЗАУВАЖТЕ, що ніякої додаткової валідації щодо використаних псевдонімів або символів конкатенації не існує, тож ваші дії можуть призвести до підміни псевдонімом іншого існуючого класу.
Наприклад в вашому додатку вже є клас Foo з методом bar, який доданий в API як метод Foo.bar, ви створюєте клас Baz з методом bar і задаєте йому псевдонім Foo, що призведе до
реєстрації двох API сервісів з однаковою назвою. Результат цих дій непередбачуваний.
В майбутньому
В подальших планах реалізувати можливість задавати псевдоніми кожному конкретному API методу, а не тільки класам.