メインコンテンツまでスキップ
バージョン: 0.14.0 (最新)

🛍️ プロダクト

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 を返し、作成は認可された呼び出し元のパイプライン結果を返します。

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 セットアップ内で合成します。カスタムホストは、選択したルートで必要となる同じ注入済み dataStoresconfiguration、省略可能な 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 は、共通のトークン転送と認証動作を文書化しています。