Laravel Sajyaの導入から基本的な使い方まで
使い方を簡単にまとめたものになります。
英語が得意な方は公式をご覧ください。
Laravel Sajyaとは
Laravelフレームワーク向けにJSON-RPC 2.0サーバーの仕様を簡単に実装することを目指したオープンソースプロジェクトだそうです。API作成に便利かも?
導入
まずは、Laravel Sajyaをプロジェクトに導入します。以下のコマンドを実行して、Sajyaをインストールします
composer require sajya/server
Procedureファイル作成
以下のコマンドでファイルを作成します
php artisan make:procedure TestProcedure
作成したファイルにテスト用のコードを入力します(メソッド以外ほぼ自動生成されます)
declare(strict_types=1);
namespace App\Http\Procedures;
use Sajya\Server\Procedure;
class TestProcedure extends Procedure
{
/**
* The name of the procedure that will be
* displayed and taken into account in the search
*/
public static string $name = 'test';
/**
* Execute the procedure.
*
* @return string
*/
public function ping()
{
return 'pong';
}
}
ルートの設定(エンドポンイント)
次に、Sajyaのルートを設定します。routeファイルに以下のコードを追加します
use Illuminate\Support\Facades\Route;
use App\Http\Procedures\TestProcedure;
Route::rpc('/v1', [TestProcedure::class])->name('rpc.endpoint');
上記のコードでは、/v1というエンドポイントに対して、TestProcedureクラスを割り当てています。
APIテスト
まずは、ローカル環境のサーバーを立ち上げます。
次にcurlを用いてリクエストを送信します。(私はGitBashを使用していますが、自分の環境に合わせてください)
curl --location --request POST 'http://127.0.0.1:8000/api/v1'
--header 'Content-Type: application/json'
--data-raw '{
"jsonrpc":"2.0",
"method":"test.ping",
"id":1
}'
※Postmanのようなツールを使えばもっと簡単ですし、毎回コマンド打たなくても良くなります。
成功すれば下記のようなレスポンスが返ってきます。
{
"id": "1",
"result": "pong",
"jsonrpc": "2.0"
}
エラーハンドリングについて
Exceptionファイルを作成し、throwします
Excepotionファイル作成
以下のコマンドでファイルを作成します
php artisan make:exception ErrorTest
次に、テスト用にコードを入力します(ほとんど自動生成されます)
namespace App\Exceptions;
use Sajya\Server\Exceptions\RpcException;
class ErrorTest extends RpcException
{
/**
* Get the default error message for the exception.
* @return string
*/
protected function getDefaultMessage(): string
{
return 'Error Message Daze';
}
/**
* Get the default error code for the exception.
* @return int
*/
protected function getDefaultCode(): int
{
return -13000;
}
}
Procedureファイル編集
先ほど作成したProcedureファイルを以下のように編集します
namespace App\Http\Procedures;
use App\Exceptions\ErrorTest;
use Sajya\Server\Procedure;
class TennisProcedure extends Procedure
{
public static string $name = 'test';
public function ping()
{
throw new ErrorTest();
}
}
直接throwしていますが、条件を付けることももちろん可能です。
これでリクエストを送信すると以下のようなエラーレスポンスが返ってきます。
{
"id": "1",
"error": {
"code": -13000,
"message": "Error Message Daze."
....
},
"jsonrpc": "2.0"
}
参考サイト
記事を読んでくださった方は、是非弊社開発課のXもフォローしてね
毎日エンジニアに向けた情報発信を行っています