Встановлення JsonRpcBundle

Встановлення JsonRpcBundle

Вимоги версії 10.x: PHP >= 8.4, Symfony ^7.2 або ^8.0, розширення ext-dom і ext-sysvsem.

Крок 0: Налаштування composer.json

Щоб Symfony Flex автоматично зробив усі налаштування при встановленні пакета, додайте репозиторій рецептів UFO-Tech у ваш composer.json:

{
    "extra" : {
        "symfony": {
            "endpoint": [
                "https://api.github.com/repos/ufo-tech/recipes/contents/index.json?ref=main",
                "flex://defaults"
            ]
        }
    }
}

Детально про приватні рецепти Symfony Flex — в документації Symfony.

Крок 1: Встановлення

У теці проєкту виконайте команду, щоб завантажити останню версію пакета:

composer require ufo-tech/json-rpc-bundle

Крок 2: Реєстрація пакета

Переконайтесь, що пакет зареєструвався в config/bundles.php:

return [
    // ...
    Ufo\JsonRpcBundle\UfoJsonRpcBundle::class => ['all' => true],
    // ...
];

Крок 3: Налаштування

Якщо ви виконали «Крок 0», файл створено автоматично і цей крок можна пропустити.

Додайте файл config/packages/ufo_json_rpc.yaml з мінімальною конфігурацією:

# config/packages/ufo_json_rpc.yaml
ufo_json_rpc:
    security:
        protected_api: true               # перевіряти токен для RPC-запитів
        protected_doc: false              # документація відкрита
        token_name: 'Ufo-RPC-Token'       # назва заголовка з токеном
        clients_tokens:
            - '%env(resolve:UFO_API_TOKEN)%'

    docs:
        project_name: 'My Project'

і токен у .env.local:

UFO_API_TOKEN=change-me

Усі параметри описані в розділі Налаштування бандлу.

Крок 4: Реєстрація маршрутів

Якщо ви виконали «Крок 0», файл створено автоматично і цей крок можна пропустити.

Додайте файл config/routes/ufo_json_rpc.yaml:

# config/routes/ufo_json_rpc.yaml
ufo_json_rpc:
    resource: ../../vendor/ufo-tech/json-rpc-bundle/config/router.yaml
    prefix: /rpc
    trailing_slash_on_root: false

API буде доступне за адресою https://example.com/rpc. Щоб змінити шлях, змініть prefix.

До версії 10 шаблон встановлення використовував префікс /api. Наявні файли маршрутів при оновленні не змінюються, тож старі проєкти працюють за попередньою адресою.

Один застосунок може мати кілька точок входу з різними наборами методів — див. Групи API.

Крок 5: Profit

Вітаю!!!

Ваш RPC сервер готовий до роботи!!!

Перевірка

А воно точно працює? (с)

Запит Що повертає
GET /rpc Документ OpenRPC з усіма методами
GET /rpc?info Лише заголовок документа (info, servers), без методів
GET /rpc/postman Колекцію Postman
POST /rpc Виконує JSON-RPC запит

Метод ping встановлено одразу, тож можна виконати POST запит:

Request:

curl -X POST https://example.com/rpc \
  -H 'Content-Type: application/json' \
  -H 'Ufo-RPC-Token: change-me' \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "ping"}'

Response:

{
    "jsonrpc": "2.0",
    "id": 1,
    "result": "PONG"
}

Те саме з консолі:

php bin/console ufo:rpc:process '{"jsonrpc": "2.0", "id": 1, "method": "ping"}' --ufo-rpc-token=change-me

Що далі?