Формат відповіді

← Формат відповіді

Ashterix

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]. Опис для старих версій — у перемикачі версій угорі сторінки.