概要
Nodeblocksとは
Nodeblocksはモバイルアプリケーション・ウェブサービスのバックエンドを高速・低コスト に開発するためのローコード・アプリケーション 開発プラットフォーム。
ブロックと呼ばれる基礎となるサービスを利用することで、開発リソースをコアのビジネスロジックとユースケースに専念させ、自由にアーキテクチャを 構築できます。
ソリューション比較
Nodeblocksの原則の二つは、透明性と拡張性です。そのおかげ、コアのビジネスロジックは簡潔に実装出来る事と同時に、必要に応じて望むアーキテクチャやカスタムソリューションを利用できる利点があります。
Nodeblocksは、ノーコードのプレファブソリューションと、一からのサービス作成の中間に位置します。
ブロック
Nodeblocksにおける単一のサービスはブロックとも呼ばれます。これらのブロックは全体のシステムの個別にデプロイ可能な独立した部品であり、それぞれ独自のプロセス、データベース、機能を持っています。各ブロックは、他のサービスやフロントエンドが連携できるAPIを提供します。プロジェクトに合う必要なブロックを自由に選ぶことができます。
アダプタ
Nodeblocksの各ブロックは、表面の下でアダプタを使用して実装されています。これらのアダプタは、ブロックの機能がどのように実装されるかを制御し、検証、ビジネスロジック、データベースやメールプロバイダなどの外部との通信を定義します。
各サービスが提供するデフォルトの動作をカスタマイズしたい時は、開発側で独自のアダプタを作成することを推薦します。
実際のところ、デフォルトの動作自体はサービスの一部として提供されているDefaultAdapterと呼ばれるアダプタとして実装されています。このDefaultAdapterはNodeblocks側で作成されて、ライブラリーの一部として提供されています。
アダプタの概念は、OSドライバーの概念に類似と思えば分かりやすいかもしれません。
Nodeblocksの各サービスのadapterのパラメーターを使用する事で、サービスが定義する各エンドポイントにどのhandlersとvalidatorsを関連付けるかを指定します。
nodeblocksCatalogApp.startService({ adapter: myAdapter });
構造
一体どうやってアダプタを使ってサービスをカスタマイズ出来るのを理解するには、まず各レイヤーでリクエストがどのように処理されるかを理解する方が一番です。
Nodeblocksの各ブロックへのリクエストは、ブロックの外部APIを介してアダプタに渡されます。このアダプタの処理は、APIの各エンドポイントごとにバリデータとハンドラに分解されます。
バリデータ
バリデータは、**述語 (Predicate)**としても知られ、クライアントのリクエストが実行される前に通過しなければならない条件や検証の役割をしています。バリデータが使用例をいくつか挙げると:
Authorization
ヘッダーの確認- ユーザーがこのリクエストを実行する許可の有無
- リクエストが正しい形式であることの確認
- 複数の条件のうち、少なくとも1つが正しい場合に通過する処理
ブロックの各エンドポイントのvalidators
プロパティは、Predicate(述語)と呼ばれる小さな関数の配列であり、これらはPromise<number>
を返す。返される数字はHTTPステータスを表します。
各バリデータは、リクエストのLogger
とContext
を受け取ります。これらはクライアントのリクエストを実行するために使用できます。
バリデータが失敗すると、エラーステータスが返されるか、カスタムメッセージのエラーがスローされてクライアントに返される場合があります。詳細については、デフォルトアダプタのカスタマイズを参照してください。
ハンドラ
ハンドラは、CRUDデータベース操作や他のサービスの呼び出しなど、コアのビジネスロジックを実行する関数です。バリデータと同様に、ハンドラもLogger
とContext
を受け取ります。
ハンドラのレスポンスは、ユーザーに返されるデータとHTTPステータスになります。
{
data?: object | string // このエンドポイントから返されるデータ
status: number // HTTPステータス
}
バリデータ同様、ハンドラもデフォルトアダプタから自由にカスタマイズできます。詳しくは、 フォルトアダプタのカスタマイズの例を参照してください。