Встановлення 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
Що далі?
- Змініть налаштування під власні потреби.
- Додайте власні методи.