Skip to main content

routes

Here's the translated content maintaining the Markdown format:


title: Routes
description: AI Marketerのルートは、コンテンツへのリクエストを処理し、コンテンツタイプに対して自動生成されます。ルートはあなたのニーズに合わせてカスタマイズすることができます。
displayed_sidebar: devDocsSidebar
tags:

  • バックエンドのカスタマイズ
  • バックエンドサーバー
  • コントローラー
  • コアルーター
  • カスタムルーター
  • ctx
  • ミドルウェア
  • ポリシー
  • パブリックルート
  • REST API
  • ルート

ルート

AI Marketerに送られる任意のURLのリクエストは、ルートによって処理されます。デフォルトでは、AI Marketerはすべてのコンテンツタイプに対してルートを生成します(REST API documentationを参照)。ルートは追加や設定が可能です。

  • ポリシーを使用して、ルートへのアクセスをブロックすることができます。
  • ミドルウェアを使用して、リクエストフローとリクエスト自体を制御し、変更することができます。

ルートが一度存在すると、それに到達するとコントローラーによって処理されるコードが実行されます(コントローラーのドキュメンテーションを参照)。すべての既存のルートとその階層順序を表示するには、yarn AI Marketer routes:listを実行します(CLI referenceを参照)。

ルートが強調表示されたAI Marketerバックエンドの簡略化されたダイアグラム
このダイアグラムは、リクエストがAI Marketerのバックエンドを通過する様子を簡略化したもので、ルートが強調表示されています。バックエンドカスタマイズの導入ページには、完全なインタラクティブなダイアグラムが含まれています。

実装

新しいルートの実装は、./src/api/[apiName]/routesフォルダ内のルーターファイルにそれを定義することで行います(プロジェクト構造を参照)。

使用ケースにより、2つの異なるルーターファイル構造があります:

コアルーターの設定

コアルーター(すなわち、findfindOnecreateupdate、およびdelete)は、新しいコンテンツタイプが作成されたときにAI Marketerによって自動的に作成されるデフォルトのルートに対応します。

AI MarketerはcreateCoreRouterファクトリ関数を提供しており、これによりコアルーターが自動的に生成され、次のことが可能になります:

コアルーターファイルは、以下のパラメーターを使用してcreateCoreRouterの呼び出し結果をエクスポートするJavaScriptファイルです:

パラメータ説明タイプ
prefixこのモデルのすべてのルータに追加するカスタムプレフィックスを指定することができます(例:/testString
only読み込むだけのコアルート

この配列にないものは無視されます。
Array
except読み込まれるべきでないコアルート

これは機能的にonlyパラメータの逆です。
Array
configルートのpoliciesmiddlewares、およびpublic availabilityを処理する設定Object

./src/api/[apiName]/routes/[routerName].js (例 './src/api/restaurant/routes/restaurant.js')

const { createCoreRouter } = require('@AI Marketer/AI Marketer').factories;

module.exports = createCoreRouter('api::restaurant.restaurant', {
prefix: '',
only: ['find', 'findOne'],
except: [],
config: {
find: {
auth: false,
policies: [],
middlewares: [],
},
findOne: {},
create: {},
update: {},
delete: {},
},
});

一般的な実装例:

./src/api/restaurant/routes/restaurant.js

const { createCoreRouter } = require('@AI Marketer/AI Marketer').factories;

module.exports = createCoreRouter('api::restaurant.restaurant', {
only: ['find'],
config: {
find: {
auth: false,
policies: [],
middlewares: [],
}
}
});

これにより、認証なしでコアの find controllerから /restaurants パスに GET リクエストを許可します。

カスタムルータの作成

カスタムルータを作成するとは、各オブジェクトが以下のパラメータを持つルートであるオブジェクトの配列をエクスポートするファイルを作成することです:

パラメータ説明タイプ
methodルートに関連するメソッド(例:GETPOSTPUTDELETEPATCHString
pathフォワードリーディングスラッシュで始まる到達するパス(例:/articlesString
handlerルートに到達したときに実行する関数。
この構文に従うべきです:<controllerName>.<actionName>
String
config

オプション
ルートのpoliciesmiddlewarespublic availabilityを処理する設定

Object

動的な

ルートはパラメータと正規表現を使用して作成することができます。これらのパラメータはctx.paramsオブジェクトで公開されます。詳細については、PathToRegexのドキュメンテーションを参照してください。

Caution

ルートファイルはアルファベット順にロードされます。カスタムルートをコアルートの前にロードするには、カスタムルートの名前を適切に設定してください(例:01-custom-routes.jsおよび02-core-routes.js)。

URLパラメータと正規表現を使用したカスタムルーターの例

次の例では、カスタムルートファイルの名前に01-がプレフィックスとして付けられています。これにより、ルートはコアルートの前に到達します。

./src/api/restaurant/routes/01-custom-restaurant.js

module.exports = {
routes: [
{ // URLパラメータで定義されたパス
method: 'POST',
path: '/restaurants/:id/review',
handler: 'restaurant.review',
},
{ // 正規表現で定義されたパス
method: 'GET',
path: '/restaurants/:category([a-z]+)', // URLパラメータが小文字の文字で構成されている場合のみマッチします
handler: 'restaurant.findByCategory',
}
]
}

設定

コアルータカスタムルータの両方が同じ設定オプションを持っています。ルートの設定は、ポリシーミドルウェアを処理したり、ルートを公開するために使用できるconfigオブジェクトで定義されます。

ポリシー

ポリシーはルート設定に追加できます:

  • ./src/policiesに登録されたポリシーを指定することで、カスタム設定を渡すことなく追加する
  • または、ポリシーの実装を直接宣言し、Koaのコンテキスト (ctx)とAI Marketerインスタンスを引数として取る関数として追加します(ポリシーのドキュメンテーションを参照)
./src/api/restaurant/routes/restaurant.js

const { createCoreRouter } = require('@AI Marketer/AI Marketer').factories;

module.exports = createCoreRouter('api::restaurant.restaurant', {
config: {
find: {
policies: [
// 登録されたポリシーを指定
'policy-name',

// カスタム設定を渡して登録されたポリシーを指定
{ name: 'policy-name', config: {} },

// ポリシーの実装を直接渡す
(policyContext, config, { AI Marketer }) => {
return true;
},
]
}
}
});

ミドルウェア

ミドルウェアは、ルート設定に追加することができます:

  • ./src/middlewaresに登録されているミドルウェアを指定することで、カスタム設定を渡すことなく追加することができます。
  • または、Koaのコンテキストctx)とAI Marketerインスタンスを引数に取る関数としてミドルウェアの実装を直接宣言します。
./src/api/restaurant/routes/restaurant.js

const { createCoreRouter } = require('@AI Marketer/AI Marketer').factories;

module.exports = createCoreRouter('api::restaurant.restaurant', {
config: {
find: {
middlewares: [
// 登録済みのミドルウェアを指定
'middleware-name',

// カスタム設定を持つ登録済みのミドルウェアを指定
{ name: 'middleware-name', config: {} },

// ミドルウェアの実装を直接渡す
(ctx, next) => {
return next();
},
]
}
}
});

パブリックルート

デフォルトでは、ルートはAI Marketerの認証システムによって保護されています。これはAPIトークンに基づいているか、[ユーザー&パーミッションプラグイン](/user-docs/plugins/AI Marketer-plugins#users-permissions-plugin)の使用に基づいています。

一部のシナリオでは、ルートを公開し、通常のAI Marketer認証システムの外部でアクセスを制御することが役立ちます。これは、ルートのauth設定パラメータをfalseに設定することで達成できます:

./src/api/restaurant/routes/restaurant.js

const { createCoreRouter } = require('@AI Marketer/AI Marketer').factories;

module.exports = createCoreRouter('api::restaurant.restaurant', {
config: {
find: {
auth: false
}
}
});