#[RPC\Info]

Остання зміна 2024/05/19 21:26 автором Ashterix

Summary

ClassnameInfo
NamespaceUfo\RpcObject\RPC
Targetclass
Arguments:
$aliastypestring
optionaltrue
defaultnull
$concattypestring
optionaltrue
default'.'

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

Інколи може знадобитися задати альтернативну назву для API метода, наприклад якщо у вас занадто довга назва класу, що обумовлена якимись стандатрами або домовленностями до іменувань класів в вашому проєкті.

В такому разі ви можете додати до вашого класу атрибут#[RPC\Info] вказавши псевдонім для класу, це дасть вказівку RPC серверу сприймати цей псевдонім асоційовано до цього класу.

1
2
3
4
5
6
7
8
9
10
<?php
namespace App\Api\Procedures;

use Ufo\RpcObject\RPC;

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

В такому випадку буде доступний API метод users.getList.

Зауважте, що оригінальний неймінг метод буде видалений із ServiceMap і більше не буде доступним.

Тобто MySpecificApiUserServiceWithLongClassName.getList більше не буде працювати!

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

Атрибут Info також приймає другий аргумент concat, який вказує символ або символи, що поєднують назву класу і назву методу при генерації ServiceMap для RPC серверу.

Значення за замовченням "." (крапка), але ви можете це легко змінити, вказавши потрібний вам символ або символи.

1
2
3
4
5
6
7
8
9
10
<?php
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 методу, а не тільки класам.