JSONRPC Doc (Laravel 5.4-5.5, Lumen 5.4-5.5)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ JsonRpc-ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ SMD-ΡΡ
Π΅ΠΌΡ.
ΠΠ΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ SMD-ΡΡ
Π΅ΠΌΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΉ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ Tochka-Developers/JsonRpc Π²Π΅ΡΡΠΈΠΈ >1.1.11, (*1)
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
Laravel
composer require tochka-developers/jsonrpc-doc
- ΠΠΎΠ±Π°Π²ΡΡΠ΅
Tochka\JsonRpcDoc\ServiceProvider
Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΡΠ²ΠΈΡ-ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ² Π² config/app.php
:
'providers' => [
//...
\Tochka\JsonRpcDoc\ServiceProvider::class,
],
- ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ ΡΠ΅ΡΡΡΡΡ:
php artisan vendor:publish --tag=config
php artisan vendor:publish --tag=public
- ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ ΡΠΎΡΡΠΈΠ½Π³ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ (Π²
App\RouteServiceProvider
):
protected function mapWebRoutes()
{
// Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄Π΄ΠΎΠΌΠ΅Π½ (Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ SUBDOMAIN Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΉ):
// Π²Π°ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΡΠΈΠ½Π³ Ρ ΠΏΠΎΠ΄Π΄ΠΎΠΌΠ΅Π½ΠΎΠ½ΠΎΠΌ ΠΠ«Π¨Π ΡΠΎΡΡΠΈΠ½Π³Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ΅Π½Π°
Route::group([
'domain' => 'SUBDOMAIN.{domain}.{tld}',
'middleware' => \Tochka\JsonRpcDoc\Middleware\DomainClear::class
], function() {
\Tochka\JsonRpcDoc\ServiceProvider::route();
});
// Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ Π² ΠΏΡΡΠΈ:
Route::group([
'prefix' => 'docs'
], function() {
\Tochka\JsonRpcDoc\ServiceProvider::route();
});
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
Lumen
composer require tochka-developers/jsonrpc-doc
- ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡ-ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ
Tochka\JsonRpcDoc\ServiceProvider
Π² bootstrap/app.php
:
$app->register(Tochka\JsonRpcDoc\ServiceProvider::class);
- Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° (
vendor/tochka-developers/jsonrpc-doc/config/jsonrpcdoc.php
) Π² ΠΏΡΠΎΠ΅ΠΊΡ (config/jsonrpcdoc.php
)
- Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΡΡΡΡΡ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° (
vendor/tochka-developers/jsonrpc-doc/assets/*
) Π² ΠΏΡΠΎΠ΅ΠΊΡ (public/vendor/jsonrpcdoc/*
)
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²
bootstrap/app.php
:
$app->configure('jsonrpcdoc');
- ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ ΡΠΎΡΡΠΈΠ½Π³ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π²
bootstrap/app.php
:
// Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ Π² ΠΏΡΡΠΈ:
$app->group([
'prefix' => 'docs',
], function() {
\Tochka\JsonRpcDoc\ServiceProvider::route();
});
// Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄Π΄ΠΎΠΌΠ΅Π½ (Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ SUBDOMAIN Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΉ):
$app->routeMiddleware([
'subdomain' => \Tochka\JsonRpcDoc\Middleware\SubDomain::class,
]);
$app->group([
'middleware' => 'subdomain:SUBDOMAIN',
], function() {
\Tochka\JsonRpcDoc\ServiceProvider::route();
});
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ jsonrpcdoc
. ΠΠ°ΠΊΠ΅Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΡΠ°Π·Ρ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
JsonRpc-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ².
ΠΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π² ΡΠΏΠΈΡΠΊΠ΅ connections
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°., (*2)
ΠΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ default
.
ΠΡΠ»ΠΈ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ ΡΠΊΠ°Π·Π°Π½, ΡΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π² ΡΠΏΠΈΡΠΊΠ΅., (*3)
ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ²ΠΎΡ ΡΠΎΡΠΊΡ Π²Ρ
ΠΎΠ΄Π°.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² ΡΠΎΡΡΠΈΠ½Π³Π΅ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° \Tochka\JsonRpcDoc\ServiceProvider::route($serviceName)
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ $serviceName
Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
ΠΡΠ»ΠΈ ΠΈΠΌΡ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ - Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ., (*4)
ΠΡΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ tochka-developers/jsonrpc-doc
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ tochka-developers/jsonrpc
, ΡΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅
url
Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null
. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°Π΄ΡΠ΅Ρ ΡΠΎΡΠΊΠΈ Π²Ρ
ΠΎΠ΄Π° JsonRpc-ΡΠ΅ΡΠ²Π΅ΡΠ° Π±ΡΠ΄Π΅Ρ Π²Π·ΡΡ
ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° jsonrpc
. Π‘ΡΠΎΠΈΡ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ
ΡΠΎΡΡΠΈΠ½Π³Π° (Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΠ°Π·Π΄Π΅Π» Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ).
Π’Π°ΠΊΠΆΠ΅, Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠΎΡΠ΅ΠΊ Π²Ρ
ΠΎΠ΄Π° - Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²Π°Ρ Π² ΡΠΏΠΈΡΠΊΠ΅., (*5)
ΠΠ°Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² Laravel. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Lumen Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Ρ
ΠΎΡΡΠ° ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΈΠ· ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ $_SERVER['SERVER_NAME']
ΠΈ $_SERVER['SERVER_PORT']
Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΈΠΌΡ Ρ
ΠΎΡΡΠ° Π² .env
:, (*6)
APP_URL=http://example.org
Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ°Π±ΠΎΡΡ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π².
ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Ρ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ ΡΠΈΠΏΠ° [ERROR] The host did not return the SMD-scheme. Generating a client is not possible.
,
ΡΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΏΡΡΡ ΠΊ JsonRpc-ΡΠ΅ΡΠ²Π΅ΡΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ url
., (*7)
ΠΠΎΡΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ΅ (SMD-ΡΡ
Π΅ΠΌΡ). ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ artisan:, (*8)
php artisan jsonrpc:generateDocumentation
ΠΡΠ»ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²Ρ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ [OK] Saving SMD for connection "api" successfull.
, Π·Π½Π°ΡΠΈΡ Π²ΡΠ΅ ΠΏΡΠΎΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π‘ΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
ΠΠΎΠ΄ΡΠ»Ρ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ ΡΡ
Π΅ΠΌΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡ Π΅Π΅. ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½ΠΎΠ²Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ jsonrpc:generateDocumentation
., (*9)