🏠 住所
住所は、ホストが提供する findAddressDriver をバックエンドとした認証済み日本の郵便番号検索サービスを提供します。
ここから始める
import {drivers, services} from '@nodeblocks/backend-sdk';
const findAddressDriver = drivers.createJapanPostDriver(
process.env.JAPAN_POST_CLIENT_ID!,
process.env.JAPAN_POST_SECRET_KEY!,
);
app.use(
'/api',
services.addressService(
{identities},
{authSecrets: {authEncSecret: 'replace-me', authSignSecret: 'replace-me'}},
{findAddressDriver},
),
);
| 設定 | デフォルト/ソースの動作 | 効果 |
|---|---|---|
authSecrets | 必須;選択された認証ユースルに渡される | アクセストークンの検証を行う。 |
authMode | 省略または 'bearer' はBearerトークンを選択 | 'cookie' はCookie認証を選択する。 |
identity.typeIds | 提供された場合、設定を通じてそのまま渡される | 住所ルートでは消費されない。 |
findAddressCache | 省略時はキャッシュなし | 正規化された郵便番号で住所をキャッシュする。 |
findAddressDriver オプション | 検索に必須;デフォルトは undefined | findAddress(postalCode) を提供する。 |
よくあるタスク
| タスク | 該当ドキュメント | コントラクト |
|---|---|---|
| 住所を検索する | findAddressFeature | findAddressFeature と findAddressRoute |
| Japan Postドライバーを作成する | createJapanPostDriver | createJapanPostDriver |
| 住所のリクエスト定義を再利用する | 住所スキーマ | 住所スキーマ |
| 検索サービスをマウントする | addressService | findAddressDriver オプション付きの addressService |
Bearer HTTPワークフロー
authMode を省略するか authMode: 'bearer' に設定した場合、有効なアクセストークンと findAddressSchema が受け付けるクエリ値を送信します:
ADDRESS_API='https://api.example.test'
ACCESS_TOKEN='replace-with-a-valid-access-token'
curl "$ADDRESS_API/addresses?postalCode=100-0001" \
-H "Authorization: Bearer $ACCESS_TOKEN"
findAddressRoute は、Expressのデフォルト 200 ステータスで住所のJSONオブジェクトを返します。選択されたBearerアダプタは 401 で認証を拒否する可能性があります。存在しない住所は 404 にマッピングされます。ユーザーのアクセストークンのセキュリティチェックは、設定された/デフォルトの認証ユースルによって必要なリクエスト検証データを使用します。
Cookie HTTPワークフロー
authMode: 'cookie' を設定し、サービスをマウントする前にcookie-parserを登録します。認証サービスによって確立されたアクセストークンのCookieと同じクエリパラメータを送信します:
ADDRESS_API='https://api.example.test'
ACCESS_TOKEN='replace-with-a-valid-access-token'
curl "$ADDRESS_API/addresses?postalCode=100-0001" \
--cookie "accessToken=$ACCESS_TOKEN"
エンドポイント、リクエストスキーマ、応答、404 の動作は変更されていません。存在しないまたは無効なCookieはCookie認証アダプタによって拒否されます。トークンCookieの設定については認証を参照してください。
カスタム機能合成
findAddressFeature はスキーマとルートのコンポーザーです。このフラグメントは、addressService なしでマウントするために必要なソース同等のサービスコンテキストを示しています:
import {partial} from 'ramda';
import {features, primitives, utils} from '@nodeblocks/backend-sdk';
const router = primitives.defService(
partial(primitives.compose(features.findAddressFeature), [
{
authenticate: utils.getBearerTokenInfo,
configuration,
dataStores: {identities},
findAddressDriver,
},
]),
);
app.use('/api', router);
このフラグメントは configuration.authSecrets、identities コレクション、および findAddressDriver を必要とします。エンドポイントコントラクトには findAddressRoute と findAddressSchema を使用してください。
リファレンスマップ
| ページ | 目的 |
|---|---|
| ブロック | 検索コントラクト、エラー、公開型 |
| 機能 | スキーマからルートへの合成 |
| ルート | 保護された住所エンドポイント |
| スキーマ | 再利用可能な住所データと検索リクエストスキーマ |
| バリデーター | 共有の認証要件 |
住所サービス は、このカテゴリのマウント可能な統合 surface です。
関連モジュール
Japan Postドライバー が検索実装を提供します。認証 は、この保護されたルートで使用されるトークントランスポートを文書化しています。