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