docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api
uk/docs/api/json-rpc-bundle/add_rpc_service/response/README.md
новий файл +85
−0
Формат відповіді
Схема результату в документації будується автоматично з типу, який повертає метод. Окремий атрибут потрібен лише тоді, коли тип не можна вивести з сигнатури.
Скалярні типи
Для string, int, float, bool, nullable- і union-типів схема береться з нативного типу повернення.
public function ping(): string
Масиви: тип з PHPDoc
Для array точний тип вказується в @return. Він має пріоритет над нативним типом.
/**
* @return array<string, int>
*/
public function stats(): array
DTO
Якщо метод повертає клас (або масив класу в @return), цей клас стає форматом результату: в OpenRPC з'являється схема DTO з усіма властивостями, а об'єкт серіалізується у відповідь.
final class UserDto
{
public function __construct(
public int $id,
public string $email,
public ?string $name = null,
) {}
}
public function get(int $id): UserDto
/**
* @return UserDto[]
*/
public function list(): array
Request
{"jsonrpc": "2.0", "id": 1, "method": "User.get", "params": {"id": 5}}
Response
{
"jsonrpc": "2.0",
"id": 1,
"result": {"id": 5, "email": "user@example.com", "name": null}
}
Типи властивостей DTO беруться з нативних типів і PHPDoc (@var, @param конструктора для promoted-властивостей). Властивості, для яких є конвертор (enum, дата, UUID, сутність Doctrine), у відповіді перетворюються на скаляри.
#[RPC\DTO]
Коли метод повертає array або object, а формат відомий, вкажіть його атрибутом на методі:
use Ufo\RpcObject\RPC;
#[RPC\DTO(UserDto::class)]
public function getRaw(int $id): array
#[RPC\DTO(UserDto::class, collection: true)]
public function listRaw(): array
Сигнатура: DTO(string $dtoFQCN, bool $collection = false, array $context = []). Для колекції на методі використовуйте саме collection: true: #[RPC\DTOCollection] на методі зараз не зчитується (див. Актуальні помилки). Атрибут також працює на властивостях DTO, щоб задати тип вкладених об'єктів і колекцій.
#[RPC\Response] не зчитується з версії 7.6, а #[RPC\ResultAsDTO] замінено на #[RPC\DTO]. Опис для старих версій — у перемикачі версій угорі сторінки.