📮 住所サービス
住所サービス (addressService) は、認証済み郵便番号による住所検索を公開し、注入された findAddressDriver へ検索を委譲します。組み込みのデフォルトドライバーは存在せず — デフォルトドライバーを注入する必要があります(例えば createJapanPostDriver(...) 経由で)。または検索はブロックのラップされたサービスエラーで失敗します。ルートスキーマは部分郵便番号を受け付けますが、バンドルされた JapanPost ドライバーは最終的にハイフンを削除した後に正規化された 7 桁の郵便番号を必要とします。オプションのインメモリキャッシュも設定可能です。
🚀 クイックスタート
import express from 'express';
import {middlewares, services, drivers, utils} from '@nodeblocks/backend-sdk';
const {nodeBlocksErrorMiddleware} = middlewares;
const {addressService} = services;
const {withMongo, createJapanPostDriver} = drivers;
const {createCache} = utils;
const connectToDatabase = withMongo('mongodb://localhost:27017/?authSource=admin', 'dev', 'user', 'password');
const findAddressDriver = createJapanPostDriver(
process.env.JAPAN_POST_CLIENT_ID!,
process.env.JAPAN_POST_SECRET_KEY!,
// オプションの第3引数: ホスト名、デフォルト 'api.da.pf.japanpost.jp'
);
express()
.use(
addressService(
{
...(await connectToDatabase('identities')),
},
{
authSecrets: {
authEncSecret: 'your-encryption-secret',
authSignSecret: 'your-signing-secret',
},
authMode: 'bearer', // または 'cookie'
findAddressCache: createCache(),
},
{findAddressDriver},
),
)
.use(nodeBlocksErrorMiddleware())
.listen(8089, () => console.log('Server running'));
🍪 Cookie 認証:
authMode: 'cookie'の場合、保護されたルートはクッキーからアクセストークンを読み取ります。ホストアプリはcookie-parserを登録する必要があります。
📋 エンドポイント一覧
| メソッド | パス | 説明 | 認証 |
|---|---|---|---|
GET | /addresses?postalCode=... | 日本の郵便番号による住所検索 | 認証済み |
🗄️ レスポンス形状
正常な検索は以下の内容を返します:
{
prefecture: string;
city: string;
town?: string;
postalCode: string;
}
| フィールド | タイプ | 説明 |
|---|---|---|
prefecture | string | 都道府県名 |
city | string | 市区町村名 |
town | string | オプションの町名 |
postalCode | string | 正規化された郵便番号 |
🔐 認証ヘッダー
Authorization: Bearer <access_token>
x-nb-fingerprint: <device_fingerprint>
x-nb-fingerprintヘッダーは、ログイン時にフィンガープリントが指定された場合、認証済みリクエストに必須です。
🔧 API エンドポイント
1. 住所検索
リクエスト:
- メソッド:
GET - パス:
/addresses - 認証: 認証済み
クエリパラメータ:
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
postalCode | string | ✅ | 部分または完全な日本の郵便番号 (^\d{3}-?\d{0,4}$、例: 100 または 100-0001)。createJapanPostDriver を使用する場合、正規化値は 7 桁である必要があります。 |
レスポンス: ルートは住所オブジェクトを返します。サービスは Express のデフォルト JSON ステータス (200) で送信します。
例:
curl "{{host}}/addresses?postalCode=100-0001" \
-H "Authorization: Bearer <access-token>"
一般的なエラー:
| ステータス | 説明 |
|---|---|
| 400 | バリデーションエラー (欠落/無効な postalCode) |
| 401 | 欠落または無効な認証 |
| 404 | 住所が見つからない |
| 500 | 住所検索ドライバーの失敗 |
⚙️ 設定オプション
interface AddressServiceConfiguration {
authSecrets: {
authEncSecret: string;
authSignSecret: string;
};
authMode?: 'bearer' | 'cookie';
identity?: {
typeIds?: {
admin: string;
guest: string;
regular: string;
};
};
findAddressCache?: ReturnType<typeof createCache>;
}
データストア
| コレクション | 必須 | 説明 |
|---|---|---|
identities | ✅ | サービスタイプに必須ですが、住所ルート自体では使用されません |
オプション (第3引数)
| オプション | 必須 | 説明 |
|---|---|---|
findAddressDriver | ✅ (検索の場合) | 住所検索ドライバー ({ findAddress(postalCode): Promise<Address> })。日本の郵便局には createJapanPostDriver を使用します。これがない場合、住所検索リクエストは失敗します。 |
🚨 エラーハンドリング
| ステータス | エラーメッセージ | 説明 |
|---|---|---|
| 400 | バリデーションエラー | 欠落または無効な postalCode クエリパラメータ |
| 401 | 認証失敗 | 認証レイヤーがリクエストを拒否しました |
| 404 | 一致する住所が見つかりません。 | 検索結果に住所がありません |
| 500 | 住所の検索に失敗しました。 | 住所検索ドライバーが失敗しました |
🔗 関連ドキュメント
- 認証サービス - ログインとトークン管理
- アイデンティティサービス - アイデンティティのライフサイクル
- エラーハンドリング - エラーパターン