0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SOCKET-MANAGERを使ったREST-APIサーバー開発の手引き<APIフレームワークとしての特徴>

0
Posted at

はじめに

SOCKET-MANAGER Framework の REST-API サーバー開発環境は、リアルタイム通信基盤の上に構築された高速・堅牢な PHP 製 API フレームワークです。
ステートマシン内蔵のイベントループにより、Chunked Transfer・SSE・Range 送信などの段階的なレスポンス処理を安定して実行できます。

REST-API は CUEI アーキテクチャ上で動作し、通信方式に依存しない統一モデルを採用しています。
これにより、WebSocket/TCP/UDP と REST-API を同一プロセス内で安全に共存させることが可能です。
また、PSR-7 準拠の Request/Response を採用しているため、OAuth2 を含む外部ライブラリとの統合や既存 PHP アプリケーションとの連携も自然に行えます。

実装方式は「イベントハンドラ型(即時処理)」と「ステートマシン型(段階処理)」の 2 方式から選択でき、軽量な CRUD API から状態遷移を伴う高度な API まで柔軟に対応します。
Laravel とのネイティブ連携にも対応しており、Logger・Eloquent・Service Container などのリソースを追加実装なしで利用できます。
 
REST-API の基盤となる内部構造(CUEI / Event / IPC)については、 以下のページもあわせて参照してください。

Laravel とのネイティブ連携方法については、以下のページで詳しく解説しています。

(REST-API 環境を連携する場合は MainForRestApi のメイン処理クラスも別途変換する必要があります。上記リンク先で紹介されているビルトインコマンドを使って変換できます。)

基盤技術について(REST-API から見た概要)

REST-API サーバー開発環境は、SOCKET-MANAGER Framework 本体が提供するSocketManager / RuntimeManager / SimpleSocketといった基盤モジュールの上に構築されています。

これらのモジュールは、フレームワークに内蔵されたUNIT(処理単位)とキュー(状態遷移)によるステートマシンを用いて動作し、複数のモジュールが同一プロセス内で共存できる柔軟なアーキテクチャを持っています。

REST-API 環境では、この基盤技術のうちSocketManager の特定構成をプリセット化したものを利用しており、開発者は REST-API に必要な部分だけを扱えばよいように設計されています。

また、ステートマシンを基盤に持つことで、一般的なイベント駆動型ソリューションでは難しい Chunked Transfer / SSE / Range送信 / IPC(サーバー間通信) といった高度な処理を安定して実現できます。

基盤技術の詳細なアーキテクチャについては、以下のページを参照してください。

特徴

REST-API / RESTful-API 対応

  • 標準的な REST-API 設計に加え、RESTful-API のリソース指向設計にも対応
  • PSR-7準拠の Request / Response を採用
  • OAuth2 など PSR-7 対応モジュールとの連携が容易

PSR-7 公式仕様:
https://www.php-fig.org/psr/psr-7/

クロスプラットフォーム(PHP環境)

  • PHP が動作する環境であれば OS を問わず利用可能
  • Linux / Windows で動作確認済み

ステートマシン内蔵

  • Chunked Transfer(チャンク転送)
  • Server-Sent Events(SSE)
  • Range送信
  • IPC(サーバー間通信)
  • 長時間接続・状態遷移を伴う API に最適

イベントハンドラ型 / ステートマシン型の2方式

  • イベントハンドラ型:単一のイベントハンドラで完結する一般的な REST API に最適
  • ステートマシン型:状態遷移を伴う API(Chunked / SSE / Range)に最適

実装形態

イベントハンドラタイプ

単一のイベントハンドラで処理を行うシンプルな方式。
一般的な CRUD API や短時間で完結する処理に適しています。

  • シンプルで学習コストが低い
  • 小規模〜中規模 API に最適

ステートマシンタイプ

UNIT(状態)単位で処理を分割し、状態遷移を伴う API を実装する方式。
以下のようなケースで特に強みを発揮します。

  • Chunked Transfer(確実な分割送信)
  • SSE(再接続後の継続受信)
  • Range送信(部分的なデータ送信)
  • IPC を伴う複雑な状態管理
  • 長時間接続が必要な API

サンプル構成

REST-API サーバー開発環境には、動作確認用のサンプルが同梱されています。
イベントハンドラ型 / ステートマシン型の両方を用意しています。

● ユーザー情報操作(CRUD)

  • GET:ユーザー一覧取得
  • POST:新規ユーザー作成
  • PUT:ユーザー全体更新
  • PATCH:ユーザー部分更新
  • DELETE:ユーザー削除

● Multipart アップロード

  • アップロード済みファイルの確認
  • Multipart形式でのファイルアップロード

● Chunked アップロード

  • Chunkedアップロード済みファイルの確認
  • curl コマンドによるアップロード(ブラウザ制約回避のため)

● チャンク転送デモ

ステートマシンタイプでは、Chunked Transfer による分割送信が確実に行われます。
以下の GIF アニメでは、5秒間隔でチャンクが送信される様子を確認できます。

Chunked Transfer による5秒間隔の分割送信デモ

● SSE(再接続対応)デモ

Server-Sent Events(SSE)では、クライアントが切断された場合でも再接続後に続きから受信できます。
以下の GIF アニメでは、接続断 → 再接続 → 続きのイベント受信までの流れを確認できます。

SSE の再接続後に続きを受信するデモ

● Rangeヘッダを使った分割送信デモ

バイナリ/ファイル形式データパターンの実装例。

● IPC / マルチサーバーサンプル

サーバー間通信を利用したランチャーのカスタムモニタリング(同時接続ユーザー数など)連携の実装例。

導入方法

以下のコマンドで REST-API 開発環境を作成します。

導入コマンド
composer create-project socket-manager/rest-api <任意のプロジェクトフォルダ>

サンプルの起動方法

● イベントハンドラタイプのサーバー起動

サーバー起動
php worker app:event-handler-sample

● ステートマシンタイプのサーバー起動

サーバー起動
php worker app:state-machine-sample

● ブラウザでサンプル画面を表示

サンプル画面のURL
http://localhost:10000/sample.html

サンプルサーバーが Web サーバーを兼ねているため、別途 Web サーバーは不要

ドキュメントルートは ./setting/parameter-sample.php で変更可能(デフォルト:public/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?