🛍️ プロダクト
Product サービスは、SDK のプロダクトコレクションを基盤として、パブリックなプロダクト一覧と、保護されたプロダクト、画像、バリアント、組織、いいね操作を公開します。
はじめに
これは統合フラグメントです。返されるサービスをマウントする前に、ホストは MongoDB コレクション、本文解析、Cookie トランスポートの場合は Cookie 解析を提供する必要があります。
import express from 'express';
import cookieParser from 'cookie-parser';
import { services } from '@nodeblocks/backend-sdk';
app.use(express.json());
app.use(cookieParser()); // authMode が 'cookie' の場合のみ必須。
app.use(
'/api',
services.productService(
{
identities,
products,
profiles,
productVariants,
organizations,
},
{
authSecrets: {
authEncSecret: 'development-encryption-secret',
authSignSecret: 'development-signing-secret',
},
},
{ fileStorageDriver }
)
);
| 構成 | デフォルト / ソース動作 | 効果 |
|---|---|---|
authSecrets.authEncSecret | 必須。実行時デフォルトなし | トークン暗号化の構成。 |
authSecrets.authSignSecret | 必須。実行時デフォルトなし | トークン署名の構成。 |
authMode | 省略または 'bearer' は Bearer トークンを使用 | 'cookie' は Cookie トークンを使用し、Cookie ミドルウェアが必要です。 |
identity.typeIds | 指定時は構成済みバリデーターに渡される | アイデンティティタイプ検査をサポートします。 |
organization.roles | 指定時は構成済みバリデーターに渡される | 組織ロール検査をサポートします。 |
よくあるタスク
| タスク | 開始地点 | 契約 |
|---|---|---|
| プロダクトを作成、更新、コピー、削除する | createProductFeature | 機能、ルート、スキーマ |
| プロダクト画像をアップロードまたは添付する | createProductImageFeature | 画像機能 と 画像ルート |
| プロダクトバリアントを管理する | createProductVariantFeature | バリアント機能 と バリアントスキーマ |
| 再利用可能な動作またはエラーを追跡する | ブロック | ブロック と ハンドラー |
| アクセス検査を確認する | バリデーター | バリデーター |
Bearer HTTP ワークフロー
パブリックな findProductsRoute でプロダクトを一覧表示するか、保護された createProductRoute で作成します。作成本文は createProductSchema で定義されます。リクエストには有効な管理者 Bearer アイデンティティが必要で、パイプライン結果を返します。
API_BASE_URL='http://localhost:8080/api'
ACCESS_TOKEN='replace-with-a-valid-access-token'
curl "$API_BASE_URL/products?page=1&limit=20"
curl -X POST "$API_BASE_URL/products" \
-H "authorization: Bearer $ACCESS_TOKEN" \
-H 'content-type: application/json' \
-d '{"name":"Example product","description":"Short description"}'
一覧はページネーション済みプロダクトデータを含む 200 を返し、作成は認可された呼び出し元のパイプライン結果を返します。
Cookie HTTP ワークフロー
authMode: 'cookie' を設定し、マウント前にホストで Cookie 解析を登録します。保護されたルートは同じスキーマとバリデーターを使用しますが、isAuthenticated() は Bearer ヘッダーではなく Cookie からアクセストークンを読み取ります。
API_BASE_URL='http://localhost:8080/api'
ACCESS_COOKIE='accessToken=replace-with-a-valid-access-token'
curl -X POST "$API_BASE_URL/products" \
-H "cookie: $ACCESS_COOKIE" \
-H 'content-type: application/json' \
-d '{"name":"Example product","description":"Short description"}'
カスタム機能の合成
選択したエンドポイントセットのみをマウントする場合、createProductFeature などのパブリック SDK 機能をカスタム defService セットアップ内で合成します。カスタムホストは、選択したルートで必要となる同じ注入済み dataStores、configuration、省略可能な fileStorageDriver を提供する必要があります。
import {partial} from 'ramda';
import {features, primitives, utils} from '@nodeblocks/backend-sdk';
const productRouter = primitives.defService(
partial(primitives.compose(features.createProductFeature, features.findProductsFeature), [{
authenticate: utils.getBearerTokenInfo,
configuration: {authSecrets},
dataStores: {identities, products, profiles, productVariants, organizations},
fileStorageDriver,
}]),
);
app.use('/api', productRouter);
リファレンスマップ
| ページ | 目的 |
|---|---|
| ブロック | 再利用可能なプロダクト操作とエラー。 |
| 機能 | スキーマからルートへのコンポーザー。 |
| ハンドラー | ルートパイプライン操作。 |
| ルート | 正規の HTTP エンドポイントマトリックスとパイプライン。 |
| スキーマ | フィールドレベルのリクエストおよび再利用可能なデータ契約。 |
| バリデーター | Product ルートが組み合わせる共通アクセス検査。 |
関連モジュール
組織スキーマ は、組織一覧ルートが使用する共通の組織 ID リクエストスキーマを提供します。ファイルストレージスキーマ は、画像アップロード URL が使用する署名付きアップロードリクエストスキーマを提供します。Authentication は、共通のトークン転送と認証動作を文書化しています。