🛠️ サービス
NodeBlocksバックエンドは、モジュール化されたサービスで構成されており、それぞれが特定のビジネスロジックとデータのピースを担当します。 すべてのサービスが同じ規則に従うため、統合、拡張、または交換が容易に行えます。
🔍 サービスとは何ですか?
サービスは、1つ以上の機能(ルート、スキーマ、ハンドラーを含むユースケースバンドル)の薄いラッパーです。 実行時に、ラッパーは依存関係(例:MongoDBコレクション)を接続し、コードから呼び出せる型付きインターフェースを公開したり、提供されたルーターユーティリティを通じてHTTPエンドポイントに自動的にマッピングしたりします。
┌─────────────┐
│ サービス │ userService(db)
├─────────────┤
│ 機能 ▷ createUserFeature
│ ▷ getUserFeatures
│ ▷ editUserFeatures
│ ▷ ...
└─────────────┘
主要なポイント:
- 純粋関数 – グローバル状態なし、すべての依存関係が明示的に渡されます(テストに最適!)。
- 合成可能 – サービス間で機能を再利用/合成するか、自分で構築します。
- データベース非依存 –
Collection
インターフェースのみが必要。テストでMongoをスタブに交換可能。
📑 利用可能なサービス
サービス | NPMインポート | 責任 | ドキュメント |
---|---|---|---|
Authentication | authService | ユーザー認証(登録、ログイン、ログアウト、JWTトークン) | Docs » |
User | userService | アプリケーションユーザーの管理(CRUD、ロック/ロック解除) | Docs » |
Organization | organizationService | 組織/ワークスペースの作成と管理 | Docs » |
Product | productService | 複雑な製品管理(バッチ操作、コピー操作を含む) | Docs » |
Category | categoryService | 製品またはコンテンツのカテゴリの維持 | Docs » |
Attribute | attributeService | キー値属性と属性グループの管理 | Docs » |
Order | orderService | アイテムと価格を含むEコマース注文管理 | Docs » |
Chat | chatService | チャンネル、サブスクリプション、メッセージによるリアルタイムメッセージング | Docs » |
ℹ️ すべてのサービスはライブAPIエンドポイントでテストされており、包括的なBrunoテストスイートが含まれています。SDKにさらにサービスが追加される予定です。提案があれば、ぜひIssueやPRを開いてください!
🧑💻 サービスをプログラムで使用
すべてのサービスは同じ署名を共有します:名前付きコレクションを持つデータベースオブジェクト、設定、オプションのドライバー(メール/ファイルストレージ/OAuth)を受け取り、Expressルーターを返すファクトリ関数です。
import express from 'express';
import { MongoClient } from 'mongodb';
import { middlewares, services } from '@nodeblocks/backend-sdk';
const { nodeBlocksErrorMiddleware } = middlewares;
const { userService } = services;
const client = new MongoClient('mongodb://localhost:27017').db('dev');
express()
.use(
userService(
{
users: client.collection('users'),
identity: client.collection('identity'),
},
{
authSecrets: {
authEncSecret: 'your-encryption-secret',
authSignSecret: 'your-signing-secret',
},
},
{
// Optional drivers (when needed)
// mailService,
// fileStorageDriver,
// googleOAuthDriver,
}
)
)
.use(nodeBlocksErrorMiddleware())
.listen(8089, () => console.log('Server running'));
📐 設計原則
• 単一責任 – 各サービスは1つのドメインエンティティを対象とします。 • 拡張性優先 – コードベースをフォークすることなく、機能を合成、オーバーライド、またはデコレートします。
➡️ 次へ
ユーザー認証のためのAuthentication Serviceから始め、またはニーズに基づいて他のサービスを探索してください。すべてのサービスは同じパターンと規則に従います!