JSON-RPC Client (Laravel 5.6, Lumen 5.6)
, (*1)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
JsonRpc ΠΊΠ»ΠΈΠ΅Π½Ρ - ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π΄Π»Ρ JsonRpc-ΡΠ΅ΡΠ²Π΅ΡΠ°.
Π Π°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ JsonRpc 2.0. ΠΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ JsonRpc ΠΎΡ Tochka., (*2)
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
Laravel
composer require tochka-developers/jsonrpc-client
- ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
php artisan vendor:publish --provider="Tochka\JsonRpcClient\JsonRpcClientServiceProvider"
Lumen
composer require tochka-developers/jsonrpc-client
- Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° (
vendor/tochka-developers/jsonrpc/config/jsonrpc-client.php
) Π² ΠΏΡΠΎΠ΅ΠΊΡ
(config/jsonrpc-client.php
)
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²
bootstrap/app.php
:
$app->configure('jsonrpc-client');
- ΠΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠ°ΡΠ°Π΄ΠΎΠ² Π²
bootstrap/app.php
:
$app->withFacades();
- ΠΡΠ»ΠΈ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΏΡΠΎΠΊΡΠΈ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° - Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡ-ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ
Tochka\JsonRpcClient\JsonRpcClientServiceProvider
Π² bootstrap/app.php
:
$app->register(Tochka\JsonRpcClient\JsonRpcClientServiceProvider::class);
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ app/jsonrpc-client.php
.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ
JsonRpc-ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
* clientName
- ΠΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠ°Π½Π½ΠΎΠ΅ ΠΈΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡΡΡ Π² ID-Π²ΡΠ΅Ρ
Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°.
ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ.
* default
- ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
* connections
- ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ)., (*3)
ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ:
* url
- URL-Π°Π΄ΡΠ΅Ρ (ΠΈΠ»ΠΈ IP) Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ JsonRpc-ΡΠ΅ΡΠ²Π΅ΡΡ. ΠΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΡΠΎΡΠΊΠ΅ Π²Ρ
ΠΎΠ΄Π°
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: https://api.jsonrpc.com/v1/jsonrpc).
* clientClass
- ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΠΊΡΠΈ-ΠΊΠ»Π°ΡΡΠ°. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅
(Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½). ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠΊΡΠΈ-ΠΊΠ»Π°ΡΡΠ°.
* extendedStubs
- Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΠΠ Π² Π²ΠΈΠ΄Π΅ ΠΊΠ»Π°ΡΡΠΎΠ²-Ρ
Π΅Π»ΠΏΠ΅ΡΠΎΠ² Π΄Π»Ρ Π²Ρ
ΠΎΠ΄Π½ΡΡ
ΠΈ Π²ΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
* options
- ΠΌΠ°ΡΡΠΈΠ² ΠΎΠΏΡΠΈΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (ΡΠΌ. https://docs.guzzlephp.org/en/stable/request-options.html)
* middleware
- ΡΠΏΠΈΡΠΎΠΊ ΠΊΠ»Π°ΡΡΠΎΠ²-middleware, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅
ΠΊΠ»Π°ΡΡΠΎΠ²-middleware Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°, Π»ΠΈΠ±ΠΎ, Π΅ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² ΠΊΠ»Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ - Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅
ΠΊΠ»ΡΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΊΠ»Π°ΡΡΡ-middleware, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ - ΠΌΠ°ΡΡΠΈΠ² Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ., (*4)
Π ΠΏΠ°ΠΊΠ΅ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π΄Π²Π΅ middleware:
* AuthTokenMiddleware
- ΠΊΠ»Π°ΡΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎ ΡΠΎΠΊΠ΅Π½Ρ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ: name
- ΠΈΠΌΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, value
- Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
ΡΠΎΠΊΠ΅Π½Π°
* AuthBasicMiddleware
- ΠΊΠ»Π°ΡΡ Basic-Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ: scheme
- ΡΠΈΠΏ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ (basic
, digest
, ntlm
),
username
ΠΈ password
- Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ
* AdditionalHeadersMiddleware
- ΠΊΠ»Π°ΡΡ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ
Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ². ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ: headers
- Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ²
Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ, Π³Π΄Π΅ ΠΊΠ»ΡΡ - ΠΈΠΌΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°., (*5)
ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΏΡΠΎΠΊΡΠΈ-ΠΊΠ»Π°ΡΡΠ°
ΠΡΠΎΠΊΡΠΈ-ΠΊΠ»Π°ΡΡ - ΡΡΠΎ ΡΠ°ΡΠ°Π΄ JsonRpcClient, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ
Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
JsonRpc-ΡΠ΅ΡΠ²Π΅ΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΠΌ Π΄Π΅Π»Π°Π΅Ρ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ
Π² ΠΌΠ΅ΡΠΎΠ΄, Π² Π²ΠΈΠ΄Π΅ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΌΠ΅Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ SMD-ΡΡ
Π΅ΠΌΡ, ΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ., (*6)
ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:, (*7)
php artisan jsonrpc:generateClient connection
ΠΠ»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠΉ:
1. JsonRpc-ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²ΠΎΠ·Π²ΡΠ°Ρ SMD-ΡΡ
Π΅ΠΌΡ (ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ GET-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ?smd)
2. ΠΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ tochka-developers/jsonrpc
. ΠΠ°Π½Π½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΡΠΌΠ΅Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ
ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠΊΡΠΈ-ΠΊΠ»Π°ΡΡΠ°
3. ΠΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠΎΠΏΠΈΡΠ°Π½ URL-Π°Π΄ΡΠ΅Ρ JsonRpc-ΡΠ΅ΡΠ²Π΅ΡΠ°
4. ΠΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΏΡΠΎΠΊΡΠΈ-ΠΊΠ»Π°ΡΡΠ°. ΠΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΊΠ»Π°ΡΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΡ
ΠΎΠ΄Ρ ΠΈΠ·
ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΈ Π½Π°ΡΡΡΠΎΠ΅ΠΊ composer
.
5. ΠΠ°ΠΏΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ ΠΏΡΠΎΠΊΡΠΈ-ΠΊΠ»Π°ΡΡ, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ°Π²Π° Π½Π° Π·Π°ΠΏΠΈΡΡ., (*8)
ΠΡΠ»ΠΈ Π²ΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ - ΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΠΏΡΠΎΠΊΡΠΈ-ΠΊΠ»Π°ΡΡ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅.
ΠΠ»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΊΡΠΈ-ΠΊΠ»Π°ΡΡΠ° (Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ΅ΡΠ²Π΅ΡΠ°) - ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΠΊΠ°Π·Π°Π½Π½ΡΡ
ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ - Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±Π΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ:, (*9)
php artisan jsonrpc:generateClient
ΠΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
ΠΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° JsonRpc:, (*10)
//....
$result = Api::fooBar('Some text');
ΠΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²ΡΠ·ΠΎΠ² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ΅ΡΠ΅Π· ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΏΡΠΎΡ:, (*11)
$api = Api::batch();
$api->foo('params');
$api->bar(123);
$api->someMethod(1, true);
[$resultFoo, $resultBar, $resultSome] = $api->execute();
ΠΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° cache
:, (*12)
$result = Api::cache(10)->fooBar('Some text');
ΠΡΠΈ ΡΠ°ΠΊΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π±ΡΠ΄ΡΡ Π·Π°ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½Ρ Π½Π° 10 ΠΌΠΈΠ½ΡΡ, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ
Π²ΡΠ·ΠΎΠ²Π°Ρ
ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ -
Π·Π°ΠΏΡΠΎΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠ»Π°ΡΡΡΡ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π·Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ ΠΈΠ· ΠΊΠ΅ΡΠ°. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΊΠ΅ΡΠΈΡΡΡΡΡΡ
ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΡΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ²., (*13)
Π’Π°ΠΊΠΆΠ΅ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ²:, (*14)
$api = Api::batch();
$resultFoo = $api->cache(10)->foo('params');
$resultBar = $api->bar(123);
$resultSome = $api->cache(60)->someMethod(1, true);
[$resultFoo, $resultBar, $resultSome] = $api->execute();
Π£ΡΡΠΈΡΠ΅, ΡΡΠΎ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΡΠΎΡΡΠΌ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ cache
., (*15)
Middleware
ΠΠ»Π°ΡΡΡ-middleware ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π½Π΅ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΡ
Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ, Π»ΠΈΠ±ΠΎ Π²Π½Π΅ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ°ΠΌΠΎ ΡΠ΅Π»ΠΎ Π·Π°ΠΏΡΠΎΡΠ°., (*16)
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΊΠ»Π°ΡΡΡ, ΡΠΊΠ°Π·Π°Π² ΠΈΡ
ΠΈΠΌΠ΅Π½Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΡΡΡ Π΄Π²Π° ΡΠΈΠΏΠ° middleware. ΠΠ΅ΡΠ²ΡΠΉ ΡΠ°ΡΡΡΠΈΡΠ°Π½ Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ JsonRpc-Π·Π°ΠΏΡΠΎΡΠΎΠΌ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ
Π·Π°ΠΏΡΡΠ΅Π½Ρ Π² batch-ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΏ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π½Π° Π²Π΅ΡΡ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΡΠΉ Π·Π°ΠΏΡΠΎΡ., (*17)
ΠΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΏ middleware Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅Ρ. Π’ΠΎ Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π±ΡΠ» ΡΠ΄Π΅Π»Π°Π½
batch-Π·Π°ΠΏΡΠΎΡ Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ 3Ρ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² - ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠ°ΠΊΠ°Ρ middleware Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ°Π·Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΡΠ·Π²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°., (*18)
ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΏ middleware Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°, ΠΈ Π² Π½Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ Π²Π΅ΡΡ ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΏ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ middleware, Π·Π°Π½ΠΈΠΌΠ°ΡΡΠΈΡ
ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°Ρ ΡΠΎΠΌΠ½ΡΡ
Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΡΠΎΡΠΈΡ
ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ
ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°., (*19)
Π ΠΊΠ»Π°ΡΡΠ΅ middleware Π΄ΠΎΠ»ΠΆΠ½Π΅ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ - handle
.
ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅.
ΠΡΠΈΠΌΠ΅Ρ middleware Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π² Π·Π°ΠΏΡΠΎΡΠ΅ (ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΏ):, (*20)
class SomeMiddleware
{
public function handle(\Tochka\JsonRpcClient\Request $request, \Closure $next): void
{
// ...
return $next($request);
}
}
ΠΡΠΈΠΌΠ΅Ρ middleware Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ:, (*21)
class SomeMiddleware implements \Tochka\JsonRpcClient\Contracts\OnceExecutedMiddleware
{
/**
* @param \Tochka\JsonRpcClient\Standard\JsonRpcRequest[] $requests
* @param \Closure $next
*/
public function handle(array $requests, \Closure $next): void
{
// ...
return $next($requests);
}
}
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΡΠΊΠΈ middleware, Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ $next, ΠΏΠ΅ΡΠ΅Π΄Π°Π² ΡΡΠ΄Π°
Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ $request.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ
ΠΌΠ΅ΡΠΎΠ΄Π° handle
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
* Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:, (*22)
// config
'middleware' => [
\Tochka\JsonRpcClient\Middleware\AuthTokenMiddleware::class => [
'name' => 'X-Access-Key',
'value' => 'TokenValue',
],
]
// middleware
use Tochka\JsonRpcClient\Request;
class AuthTokenMiddleware implements \Tochka\JsonRpcClient\Contracts\OnceExecutedMiddleware
{
public function handle(array $request, \Closure $next, $value, $name = 'X-Access-Key')
{
// ...
return $next($request);
}
}
ΠΠΎΡΡΠ΄ΠΎΠΊ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π½Π΅ Π²Π°ΠΆΠ΅Π½, ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ Π² middleware ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
* ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Tochka\JsonRpcClient\Contracts\TransportClient
ΠΈ Tochka\JsonRpcClient\ClientConfig
.
ΠΡΠ»ΠΈ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΊΠ°Π·Π°Π½Π½ΡΡ
ΡΠΈΠΏΠΎΠ², ΡΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΡΠ΅ΠΊΡΡΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ²,
ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΡ
Π·Π° ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ°
Tochka\JsonRpcClient\Client\HttpClient
) Π»ΠΈΠ±ΠΎ ΠΊΠ»Π°ΡΡ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
* Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»Π°ΡΡ/ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ/ΡΠ°ΡΠ°Π΄, Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² DI Laravel, (*23)
[]: https://docs.guzzlephp.org/en/stable/request-options.html(ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, (*24)