Зміни в документі #[RPC\Info]

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

Від версії 4.1
редаговано Ashterix
дата 2024/05/19 21:05
Змінити коментар: Немає коментарів для цієї версії
До версії 1.1
редаговано Ashterix
дата 2024/05/10 10:59
Змінити коментар: Немає коментарів для цієї версії

Підсумок

Подробиці

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