Вікі-код для #[RPC\Info]

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

Показати останніх авторів
1 {{box cssClass="floatinginfobox"}}
2 == (% style="display:block; margin-top:-30px; text-align:center" %)Summary(%%) ==
3
4 (% style="margin-right:auto" %)
5 |**Classname**|(% colspan="2" rowspan="1" %)Info
6 |**Namespace**|(% colspan="2" %)Ufo\RpcObject\RPC
7 |**Target**|(% colspan="2" rowspan="1" style="width:79px" %)class
8 |(% colspan="3" %)**Arguments:**
9 |(% colspan="1" rowspan="3" %)**$alias**|**type**|string
10 |**optional**|true
11 |**default**|null
12 |(% colspan="1" rowspan="3" %)**$concat**|**type**|string
13 |**optional**|true
14 |**default**|'.'
15 {{/box}}
16
17 = Псевдоніми класів =
18
19 Інколи може знадобитися задати альтернативну назву для API метода, наприклад якщо у вас занадто довга назва класу, що обумовлена якимись стандатрами або домовленностями до іменувань класів в вашому проєкті.
20
21 В такому разі ви можете додати до вашого класу атрибут{{code language="none"}}#[RPC\Info]{{/code}} вказавши псевдонім для класу, це дасть вказівку RPC серверу сприймати цей псевдонім асоційовано до цього класу.
22
23 {{code language="php" layout="LINENUMBERS"}}
24 <?php
25 namespace App\Api\Procedures;
26
27 use Ufo\RpcObject\RPC;
28
29 #[RPC\Info(alias: 'users')]
30 class MySpecificApiUserServiceWithLongClassName implements IRpcService
31 {
32 public function getList(): void {}
33 }
34 {{/code}}
35
36 В такому випадку буде доступний API метод {{code language="none"}}users.getList{{/code}}.
37
38 {{warning}}
39 Зауважте, що оригінальний неймінг метод буде видалений із ServiceMap і більше не буде доступним.
40
41 Тобто //**MySpecificApiUserServiceWithLongClassName.getList**// більше не буде працювати!
42 {{/warning}}
43
44 = Символ конкатенації =
45
46 Атрибут Info також приймає другий аргумент {{code language="none"}}concat{{/code}}, який вказує символ або символи, що поєднують назву класу і назву методу при генерації ServiceMap для RPC серверу.
47
48 Значення за замовченням "." (крапка), але ви можете це легко змінити, вказавши потрібний вам символ або символи.
49
50 {{code language="php" layout="LINENUMBERS"}}
51 <?php
52 namespace App\Api\Procedures;
53
54 use Ufo\RpcObject\RPC;
55
56 #[RPC\Info(alias: 'users', concat: '>')]
57 class MySpecificApiUserServiceWithLongClassName implements IRpcService
58 {
59 public function getList(): void {}
60 }
61 {{/code}}
62
63 Приклад коду вище призведе до того, що в API буде доступний метод {{code language="none"}}users>getList{{/code}}.
64
65 = Застереження =
66
67 {{warning}}
68 (% id="cke_bm_1386S" style="display:none" %) (%%)ЗАУВАЖТЕ, що ніякої додаткової валідації щодо використаних псевдонімів або символів конкатенації не існує, тож ваші дії можуть призвести до підміни псевдонімом іншого існуючого класу.
69
70 Наприклад в вашому додатку вже є клас {{code language="none"}}Foo{{/code}} з методом {{code language="none"}}bar{{/code}}, який доданий в API як метод {{code language="none"}}Foo.bar{{/code}}, ви створюєте клас {{code language="none"}}Baz{{/code}} (% id="cke_bm_372757S" style="display:none" %) (%%)з методом {{code language="none"}}bar{{/code}}(% id="cke_bm_372757E" style="display:none" %) (%%) і задаєте йому псевдонім {{code language="none"}}Foo{{/code}}, що призведе до реєстрації двох API сервісів з однаковою назвою. Результат цих дій непередбачуваний.
71 {{/warning}}
72
73 {{error}}
74 Використовуючи цей механізм, ви дієте на свій страх і ризик!
75 {{/error}}
76
77 = В майбутньому =
78
79 В подальших планах реалізувати можливість задавати псевдоніми кожному конкретному API методу, а не тільки класам.