JsonRpcClientSdk

Остання зміна 2024/05/27 10:35 автором Ashterix

Актуальна версія  https://img.shields.io/github/v/tag/ufo-tech/json-rpc-client-sdk?color=blue&label=&logo=alienware&logoColor=white&labelColor=7b8185
 Категорія  Api
 Тип  Library
 Залежності https://img.shields.io/packagist/dependency-v/ufo-tech/json-rpc-client-sdk/php?logo=PHP&logoColor=white
https://img.shields.io/packagist/dependency-v/ufo-tech/json-rpc-client-sdk/symfony/maker-bundle?label=SymfonyMaker&logo=Symfony&logoColor=white
https://img.shields.io/packagist/dependency-v/ufo-tech/json-rpc-client-sdk/symfony/http-client?label=SymfonyHttp&logo=Symfony&logoColor=white
https://img.shields.io/packagist/dependency-v/ufo-tech/json-rpc-client-sdk/symfony/cache?label=SymfonyCache&logo=Symfony&logoColor=white
https://img.shields.io/packagist/dependency-v/ufo-tech/json-rpc-client-sdk/ufo-tech/rpc-objects?label=UfoRpcObject&logo=alienware&logoColor=white
 Розмір  https://img.shields.io/github/repo-size/ufo-tech/json-rpc-client-sdk?label=Size%20of%20the%20repository
 Ліцензія  https://img.shields.io/badge/license-MIT-green?labelColor=7b8185

Проста бібліотека, що генерує SDK для звертання до сторонніх сервісів, що працюють по протоколу Json-RPC API з бібліотекою JsonRpcBundle. Генератор зчитує Json документацію API та створює зручні класи-сервіси і типізовані DTO класи відповідей. 

Генерація SDK

Запустіть інтерактивну CLI команду php bin/make.php, введіть назву сервісу та url, по якому доступна документація.

php bin/make.php
> Enter API vendor name: some_vendor
> Enter the API url: http://some.url/api

ВАЖЛИВО: генератор використовує кешування документації на 30 хвилин. 

Приклад використання SDK

Цей приклад демонструє роботу зі згенерованим SDK.

ВАЖЛИВО: Ви можете мати інші класи процедур. Приклад показує лише концепцію взаємодії.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php

use Symfony\Component\HttpClient\CurlHttpClient;
use Ufo\RpcSdk\Client\Shortener\UserProcedure;
use Ufo\RpcSdk\Client\Shortener\PingProcedure;
use Ufo\RpcSdk\Procedures\AbstractProcedure;

require_once __DIR__ . '/../vendor/autoload.php';

$headers = [
   'Ufo-RPC-Token'=>'some_security_token'
];

try {
   $pingService = new PingProcedure(
        headers: $headers
    );
   echo $pingService->ping(); // print "PONG"

// ...

   $userService = new UserProcedure(
        headers: $headers,
        requestId: uniqid(),
        rpcVersion: AbstractProcedure::DEFAULT_RPC_VERSION,
        httpClient: new CurlHttpClient(),
        httpRequestOptions: []
    );
   $user = $userService->createUser(
        login: 'some_login',
        password: 'some_password'
    );
   var_dump($user);
   // array(3) {
   //  ["id"]=> int(279232969)
   //  ["login"]=> string(3) "some_login"
   //  ["status"]=> int(0)
   
} catch (\Throwable $e) {
   echo $e->getMessage() . PHP_EOL;
}
// ...

Налагодження запитів та відповідей

1
2
3
4
5
6
7
8
9
10
11
12
<?php

// ...
use Ufo\RpcSdk\Procedures\RequestResponseStack;
// ...

$fullStack = RequestResponseStack::getAll(); // отримати всі попередні запити та відповіді
$lastStack = RequestResponseStack::getLastStack(); // отримати останні запити та відповіді

$lastRequest = RequestResponseStack::getLastRequest(); // отримати останній запит
$lastResponse = RequestResponseStack::getLastResponse(); // отримати останню відповідь
// ...

Власні налаштування генератору

Ви можете генерувати SDK і у власний спосіб.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
use Ufo\RpcSdk\Maker\Maker;

require_once __DIR__ . '/../vendor/autoload.php';

$maker = new Maker(
    apiUrl: $apiUrl,
    apiVendorAlias: $vendorName,
   namespace: Maker::DEFAULT_NAMESPACE, // 'Ufo\RpcSdk\Client'
   projectRootDir: getcwd(), // project_dir
   cacheLifeTimeSecond: Maker::DEFAULT_CACHE_LIFETIME // 3600
);

$maker->make();

Також ви можете передати callback в метод make для можливої додаткової обробки генерації.

1
2
3
4
5
6
7
<?php

//...

$maker->make(function (ClassDefinition $classDefinition) {
   // additional traversal of generated classes after generation
});

Переваги

Цей SDK забезпечує простоту у використанні та ефективну взаємодію з json-RPC серверами.