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を参照)。

実装
新しいルートの実装は、./src/api/[apiName]/routesフォルダ内のルーターファイルにそれを定義することで行います(プロジェクト構造を参照)。
使用ケースにより、2つの異なるルーターファイル構造があります:
コアルーターの設定
コアルーター(すなわち、find、findOne、create、update、およびdelete)は、新しいコンテンツタイプが作成されたときにAI Marketerによって自動的に作成されるデフォルトのルートに対応します。
AI MarketerはcreateCoreRouterファクトリ関数を提供しており、これによりコアルーターが自動的に生成され、次のことが可能になります:
- 各ルーターに設定オプションを渡す
- 一部のコアルーターを無効にしてカスタムルーターを作成する。
コアルーターファイルは、以下のパラメーターを使用してcreateCoreRouterの呼び出し結果をエクスポートするJavaScriptファイルです:
| パラメータ | 説明 | タイプ |
|---|---|---|
prefix | このモデルのすべてのルータに追加するカスタムプレフィックスを指定することができます(例:/test) | String |
only | 読み込むだけのコアルート この配列にないものは無視されます。 | Array |
except | 読み込まれるべきでないコアルート これは機能的に onlyパラメータの逆です。 | Array |
config | ルートのpolicies、middlewares、およびpublic availabilityを処理する設定 | Object |
- JavaScript
- TypeScript
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: {},
},
});
import { factories } from '@AI Marketer/AI Marketer';
export default factories.createCoreRouter('api::restaurant.restaurant', {
prefix: '',
only: ['find', 'findOne'],
except: [],
config: {
find: {
auth: false,
policies: [],
middlewares: [],
},
findOne: {},
create: {},
update: {},
delete: {},
},
});
一般的な実装例:
- JavaScript
- TypeScript
const { createCoreRouter } = require('@AI Marketer/AI Marketer').factories;
module.exports = createCoreRouter('api::restaurant.restaurant', {
only: ['find'],
config: {
find: {
auth: false,
policies: [],
middlewares: [],
}
}
});
import { factories } from '@AI Marketer/AI Marketer';
export default factories.createCoreRouter('api::restaurant.restaurant', {
only: ['find'],
config: {
find: {
auth: false,
policies: [],
middlewares: [],
}
}
});
これにより、認証なしでコアの find controllerから /restaurants パスに GET リクエストを許可します。
カスタムルータの作成
カスタムルータを作成するとは、各オブジェクトが以下のパラメータを持つルートであるオブジェクトの配列をエクスポートするファイルを作成することです:
| パラメータ | 説明 | タイプ |
|---|---|---|
method | ルートに関連するメソッド(例:GET、POST、PUT、DELETE、PATCH) | String |
path | フォワードリーディングスラッシュで始まる到達するパス(例:/articles) | String |
handler | ルートに到達したときに実行する関数。 この構文に従うべきです: <controllerName>.<actionName> | String |
configオプション | ルートのpolicies、middlewares、public availabilityを処理する設定 | Object |
動的な
ルートはパラメータと正規表現を使用して作成することができます。これらのパラメータはctx.paramsオブジェクトで公開されます。詳細については、PathToRegexのドキュメンテーションを参照してください。
ルートファイルはアルファベット順にロードされます。カスタムルートをコアルートの前にロードするには、カスタムルートの名前を適切に設定してください(例:01-custom-routes.jsおよび02-core-routes.js)。
URLパラメータと正規表現を使用したカスタムルーターの例
次の例では、カスタムルートファイルの名前に01-がプレフィックスとして付けられています。これにより、ルートはコアルートの前に到達します。
- JavaScript
- TypeScript
module.exports = {
routes: [
{ // URLパラメータで定義されたパス
method: 'POST',
path: '/restaurants/:id/review',
handler: 'restaurant.review',
},
{ // 正規表現で定義されたパス
method: 'GET',
path: '/restaurants/:category([a-z]+)', // URLパラメータが小文字の文字で構成されている場合のみマッチします
handler: 'restaurant.findByCategory',
}
]
}
export default {
routes: [
{ // URLパラメータで定義されたパス
method: 'GET',
path: '/restaurants/:category/:id',
handler: 'Restaurant.findOneByCategory',
},
{ // 正規表現で定義されたパス
method: 'GET',
path: '/restaurants/:region(\\d{2}|\\d{3})/:id', // 最初のパラメータが2または3桁の数字を含んでいる場合のみマッチします。
handler: 'Restaurant.findOneByRegion',
}
]
}
設定
コアルータとカスタムルータの両方が同じ設定オプションを持っています。ルートの設定は、ポリシーとミドルウェアを処理したり、ルートを公開するために使用できるconfigオブジェクトで定義されます。
ポリシー
ポリシーはルート設定に追加できます:
./src/policiesに登録されたポリシーを指定することで、カスタム設定を渡すことなく追加する- または、ポリシーの実装を直接宣言し、Koaのコンテキスト (
ctx)とAI Marketerインスタンスを引数として取る関数として追加します(ポリシーのドキュメンテーションを参照)
- コアルータポリシー
- カスタムルータポリシー
- JavaScript
- TypeScript
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;
},
]
}
}
});
import { factories } from '@AI Marketer/AI Marketer';
export default factories.createCoreRouter('api::restaurant.restaurant', {
config: {
find: {
policies: [
// 登録されたポリシーを指定
'policy-name',
// カスタム設定を渡して登録されたポリシーを指定
{ name: 'policy-name', config: {} },
// ポリシーの実装を直接渡す
(policyContext, config, { AI Marketer }) => {
return true;
},
]
}
}
});
- JavaScript
- TypeScript
module.exports = {
routes: [
{
method: 'GET',
path: '/articles/customRoute',
handler: 'api::api-name.controllerName.functionName', // or 'plugin::plugin-name.controllerName.functionName' for a plugin-specific controller
config: {
policies: [
// 登録されたポリシーを指定
'policy-name',
// カスタム設定を渡して登録されたポリシーを指定
{ name: 'policy-name', config: {} },
// ポリシーの実装を直接渡す
(policyContext, config, { AI Marketer }) => {
return true;
},
]
},
},
],
};
export default {
routes: [
{
method: 'GET',
path: '/articles/customRoute',
handler: 'api::api-name.controllerName.functionName', // または 'plugin::plugin-name.controllerName.functionName' プラグイン固有のコントローラーの場合
config: {
policies: [
// 登録済みのポリシーを指定
'policy-name',
// カスタム設定を持つ登録済みのポリシーを指定
{ name: 'policy-name', config: {} },
// ポリシーの実装を直接渡す
(policyContext, config, { AI Marketer }) => {
return true;
},
]
},
},
],
};
ミドルウェア
ミドルウェアは、ルート設定に追加することができます:
./src/middlewaresに登録されているミドルウェアを指定することで、カスタム設定を渡すことなく追加することができます。- または、Koaのコンテキスト(
ctx)とAI Marketerインスタンスを引数に取る関数としてミドルウェアの実装を直接宣言します。
- Core router middleware
- Custom router middleware
- JavaScript
- TypeScript
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();
},
]
}
}
});
import { factories } from '@AI Marketer/AI Marketer';
export default factories.createCoreRouter('api::restaurant.restaurant', {
config: {
find: {
middlewares: [
// 登録済みのミドルウェアを指定
'middleware-name',
// カスタム設定を持つ登録済みのミドルウェアを指定
{ name: 'middleware-name', config: {} },
// ミドルウェアの実装を直接渡す
(ctx, next) => {
return next();
},
]
}
}
});
- JavaScript
- TypeScript
module.exports = {
routes: [
{
method: 'GET',
path: '/articles/customRoute',
handler: 'api::api-name.controllerName.functionName', // or 'plugin::plugin-name.controllerName.functionName' for a plugin-specific controller
config: {
auth: false,
middlewares: [
// point to a registered middleware
'middleware-name',
// point to a registered middleware with some custom configuration
{ name: 'middleware-name', config: {} },
// pass a middleware implementation directly
(ctx, next) => {
return next();
},
],
},
},
],
};
export default {
routes: [
{
method: 'GET',
path: '/articles/customRoute',
handler: 'api::api-name.controllerName.functionName', // or 'plugin::plugin-name.controllerName.functionName' for a plugin-specific controller
config: {
auth: false,
middlewares: [
// point to a registered middleware
'middleware-name',
// point to a registered middleware with some custom configuration
{ name: 'middleware-name', config: {} },
// pass a middleware implementation directly
(ctx, next) => {
return next();
},
],
},
},
],
};
パブリックルート
デフォルトでは、ルートはAI Marketerの認証システムによって保護されています。これはAPIトークンに基づいているか、[ユーザー&パーミッションプラグイン](/user-docs/plugins/AI Marketer-plugins#users-permissions-plugin)の使用に基づいています。
一部のシナリオでは、ルートを公開し、通常のAI Marketer認証システムの外部でアクセスを制御することが役立ちます。これは、ルートのauth設定パラメータをfalseに設定することで達成できます:
- パブリックルート付きコアルータ
- パブリックルート付きカスタムルータ
- JavaScript
- TypeScript
const { createCoreRouter } = require('@AI Marketer/AI Marketer').factories;
module.exports = createCoreRouter('api::restaurant.restaurant', {
config: {
find: {
auth: false
}
}
});
import { factories } from '@AI Marketer/AI Marketer';
export default factories.createCoreRouter('api::restaurant.restaurant', {
config: {
find: {
auth: false
}
}
});
- JavaScript
- TypeScript
module.exports = {
routes: [
{
method: 'GET',
path: '/articles/customRoute',
handler: 'api::api-name.controllerName.functionName', // or 'plugin::plugin-name.controllerName.functionName' for a plugin-specific controller
config: {
auth: false,
middlewares: [
// point to a registered middleware
'middleware-name',
// point to a registered middleware with some custom configuration
{ name: 'middleware-name', config: {} },
// pass a middleware implementation directly
(ctx, next) => {
return next();
},
],
},
},
],
};
export default {
routes: [
{
method: 'GET',
path: '/articles/customRoute',
handler: 'api::api-name.controllerName.functionName', // or 'plugin::plugin-name.controllerName.functionName' for a plugin-specific controller
config: {
auth: false,
middlewares: [
// point to a registered middleware
'middleware-name',
// point to a registered middleware with some custom configuration
{ name: 'middleware-name', config: {} },
// pass a middleware implementation directly
(ctx, next) => {
return next();
},
],
},
},
],
};