メインコンテンツまでスキップ
バージョン: 2.0.0

開発者用ドキュメント


NewtZero

API SDK

NewtZeroの拡張が容易になります。

利用方法

newtzeroリポジトリをクローンします。 リポジトリの/nodes/newtzero/src/cms/以下にフォルダを作成し、作成したいコレクション名のフォルダを作成し 直下にindex.tsを配置する。同ファイルにて、CollectionConfig型のObjectをエクスポートすることで、自動でcms用のエンドポイントが作成されます。

export type CollectionConfig = {
projectName?:string;
slug: string;
metrics: MetricsCustom[];

// Collection作成時に自動でアセットが作成されます。未指定の場合、slugの値がアセット名となります。
assetName?: string;
// Assetタグを指定できます。
// デフォルトで slug:[value], assetName:[value] がタグとして付与されます。
additionalAssetTags?: string[];


uniqueKeys: string[];
ttlIndexes: { key: string, expired: number }[];
//Array of metrics names to ignore auto indexing.
indexIgnores: string[];

// primaryKeyを指定した場合、URLで/:idの値はprimaryKeyの値であるとみなされます。
primaryKey: string;

//任意のオプティマイザーロジックを設定できます。
optimizer?: (data, metrics)=> data;

callbacks?: {
beforeEffect?:
beforeCreate?: BeforeChangeCallback;
afterCreate?: AfterChangeCallback;
beforeUpdate?: BeforeChangeCallback;
afterUpdate?: AfterChangeCallback;
beforeRead?: BeforeReadCallback;
afterReadEach?: after
afterRead?: AfterReadCallback;
beforeDelete?: BeforeDeleteCallback;
afterDelete?: AfterDeleteCallback;
afterError?: AfterErrorCallback;
beforeNewtQuery?: BeforeQueryCallback;
beforeMongoQuery?: BeforeMongoQueryCallback;
};

authorize?: {
create?: (req) => boolean;
read?: (req) => boolean;
readMany?: (req) => boolean;
dataProvider: (req) => boolean;
update?: (req) => boolean;
delete?: (req) => boolean;
unlock?: (req) => boolean;
}
/**
* Access control
*/
access?: {
create?: Access;
read?: Access;
readMany?: Access;
dataProvider: Access;
update?: Access;
delete?: Access;
unlock?: Access;
};

validate?: {
create?: Validate;
read?: Validate;
readMany?: Validate;
dataProvider?: Validate;
update?: Validate;
delete?: Validate;
unlock?: Validate;
}

// Customize Endpoint path
customUrl?: {
create?: string;
read?: string;
readMany?: string;
dataProvider?: string;
update?: string;
delete?: string;
unlock?: string;
};

// trueの場合、ドキュメント全体を与えられたオブジェクトで更新します。部分更新を防ぎ、データの一貫性を保持しやすくします。
immutable?: boolean; //default true

// trueの場合、データのルートが配列の場合、それぞれを個別のレコードとして保存します。
splitArray?: boolean; // default true

};

Callback

callbackに指定できる関数は以下の通りです。

  • beforeEffect
  • afterEffect
  • beforeCreate
  • afterCreate
  • beforeUpdate
  • afterUpdate
  • beforeRead
  • afterRead
  • beforeDelete
  • afterDelete
  • afterError
  • beforeNewtQuery
  • beforeMongoQuery

実行順

create

Authorization -> Access -> Validation -> filterMetrics -> beforeEffect -> Optimize -> beforeCreate -> save -> afterCreate -> response

DataProvider

Authorization -> Access -> Validation -> beforeRead -> buildMongoQuery -> beforeMongoQuery -> mongoose.aggregate -> filterMetrics -> afterEffect -> afterRead -> response

read

Authorization -> Access -> Validation -> read -> filterMetrics -> afterEffect -> afterRead -> response

readMany

Authorization -> Access -> Validation -> beforeRead -> find -> filterMetrics -> afterEffect -> afterRead -> response

update

Authorization -> Access -> Validation -> filterMetrics -> beforeEffect -> Optimize -> beforeUpdate -> updateOne -> afterUpdate -> response

delete

Authorization -> Access -> Validation -> beforeDelete -> deleteOne -> afterDelete -> response

beforeEffect

NewtZeroConfigのpluginが呼ばれる直前に呼び出されます。 callbackに渡される引数・戻り値は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管します。express.jsのRequest型です。
dataanyリクエストデータ
userUserAPIリクエストしたユーザー

戻り値

カラム説明
dataany加工したデータを返却します。

afterEffect

データが読み込まれ、メトリクスのフィルタリング処理の直後に呼び出されます。 callbackに渡される引数・戻り値は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管します。express.jsのRequest型です。
userUserAPIリクエストしたユーザー
dataanyリクエストデータ

戻り値

カラム説明
dataany加工したデータを返却します。

beforeCreate

データをセーブする直前に呼び出されます。callback関数によってデータを加工し、データベースへ保存します。 callbackに渡される引数は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管する、express.jsのRequest型です。
dataanyリクエストデータ
userUserAPIリクエストしたユーザー

戻り値

カラム説明
dataany加工したデータを返却します。

afterCreate

データをセーブした直後に呼び出されます。callback関数によってレスポンスを加工し、データを返却します。 callbackに渡される引数は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管する、express.jsのRequest型です。
docany保存するデータ
userUserAPIリクエストしたユーザーです。

戻り値

カラム説明
docany加工したデータを返却します。

beforeUpdate

データを更新する直前に呼び出されます。callback関数によってデータを加工し、データベースへ保存します。 callbackに渡される引数は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管する、express.jsのRequest型です。
userUserAPIリクエストしたユーザーです。
dataanyリクエストデータ

戻り値

カラム説明
dataany加工したデータを返却します。

afterUpdate

データを更新した直後に呼び出されます。callback関数によってレスポンスを加工し、データを返却します。 callbackに渡される引数は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管する、express.jsのRequest型です。
userUserAPIリクエストしたユーザーです。
docanyリクエストメソッド

戻り値

カラム説明
docany加工したデータを返却します。

beforeNewtQuery

DataProvider APIをリクエストする際にQueryが実行される前に呼び出されます。callback関数によってNewtQueryを加工し、データを読み込みます。 callbackに渡される引数は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管する、express.jsのRequest型です。
userUserAPIリクエストしたユーザーです。
newtQueryNewtQuery or undefined
orderQnewtQueryのorder部分
limitQnewtQueryのlimit部分
skipQnewtQueryのskip部分
searchQnewtQueryのsearch部分
matchQnewtQueryのmatch部分
mqlmongoQuery (beforeMongoQuery以外はundefined)

戻り値

カラム説明
newtQueryNewtQuery加工したNewtQueryを返却します。

beforeMongoQuery

NewtQueryから変換されたMongoQueryが実行される前に呼び出されます。 callback関数によってMongoQueryを加工し、データを読み込みます。 callbackに渡される引数・戻り値は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管する、express.jsのRequest型です。
userUserAPIリクエストしたユーザーです。
newtQueryNewtQuery or undefined
orderQnewtQueryのorder部分
limitQnewtQueryのlimit部分
skipQnewtQueryのskip部分
searchQnewtQueryのsearch部分
matchQnewtQueryのmatch部分
mqlmongoQuery (beforeMongoQuery以外はundefined)

戻り値

カラム説明
newtQueryNewtQuery加工したNewtQueryを返却します。

beforeRead

データの読込前に、呼び出されます。callback関数によってMongoQueryを作成し、データを読み込みます。 callbackに渡される引数・戻り値は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管する、express.jsのRequest型です。
userUserAPIリクエストしたユーザーです。
idstringURLのパスパラメータです。リソースの一意な識別子です。

戻り値

カラム説明
MongoQueryanyMongoDBのデータ検索に使用するqueryを返却します。

afterRead

データの読込後、読み込んだデータを加工し、レスポンスデータとして返します。 callbackに渡される引数は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管する、express.jsのRequest型です。
dataanyリクエストデータ
userUserAPIリクエストしたユーザー

戻り値

カラム説明
docany加工したデータを返却します。

beforeDelete

データを削除する直前に呼び出されます。 callbackに渡される引数は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管する、express.jsのRequest型です。
userUserAPIリクエストしたユーザー
dataanyリクエストデータ

戻り値

カラム説明
dataany加工したデータを返却します。

afterDelete

データを削除した直後に呼び出されます。 callbackに渡される引数は以下の通りです。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管する、express.jsのRequest型です。
userUserAPIリクエストしたユーザー
dataanyリクエストデータ

戻り値

カラム説明
docany加工したデータを返却します。

afterError

エラーが出力された際に呼び出されます。

カラム説明
reqRequestリクエストメソッド・ボディ・クエリパラメータ等のリクエスト情報を保管する、express.jsのRequest型です。
userUserAPIリクエストしたユーザー
dataanyリクエストデータ
erranyエラーデータ

戻り値

カラム説明
docany加工したデータを返却します。

また、callbackに渡される引数は以下の通りです。

Meta情報

カラム
updatedCountnumber
updatedTimestampDate
req.methodリクエストメソッド
id操作を行うデータのid or undefined
newtQueryNewtQuery or undefined
orderQnewtQueryのorder部分
limitQnewtQueryのlimit部分
skipQnewtQueryのskip部分
searchQnewtQueryのsearch部分
matchQnewtQueryのmatch部分
mqlmongoQuery (beforeMongoQuery以外はundefined)

フィールド(Metrics)のフィルタリング

GETメソッドの場合、データ返却前に metricsによって返却するフィールドを強制的にフィルタリングできます。 POST、UPDATEメソッドの場合、falseを返したフィールドは書き込まれません。(更新されません。)


type MetricsCustom {
metricName: string;
access?: {
create?: (req)=>boolean;
update?: (req)=>boolean;
delete?: (req)=>boolean;
read?: (req)=>boolean;
};
}

リクエストデータのバリデーション

リクエストしたデータ(クエリパラメータ、ボディ)のデータをコールバック関数で検証できます。 無効なデータがある場合、コールバック関数に戻り値を指定することで、ステータスコード400とともにレスポンスのエラーメッセージとして返却されます。

type ValidateCallback = (req, user) => any

参考:Main関数内

const nz = new NewtZero();

await nz.load();
await nz.start();

Asset v2

新機能1

保存テーブルの指定機能が追加されます。 Assetのデータは従来、RawData,TxnData,TopDataテーブルに保存されます。 しかし、アプリケーションを堅牢にしたい場合、それぞれのデータを独立したテーブルに保存したくなる場合があるでしょう。 新しいAssetでは保存先テーブルを指定することができる様になります。

Assetに追加された新しいフィールド

カラム説明デフォルト
collection保存先テーブルstring(Collection名)undefined
metaTemplateデータに付与するメタ情報のテンプレートgif23 or allegrobotallegrobot
dataFormat保存されるデータ型を定義します。separate or allegrobot or combineallegrobot

gif23 ... 政府相互運用性フレームワーク(GIF)  

allegrobot ... 従来のAllegrobotで採用されていたメタ情報

データフォーマット

allegrobotデータフォーマット

bases:{

}

contents:{
rawdata:{

},
optdata:{

}
}
meta:{

}

orgin:{

}

metrics:{

}

Custom Endpoints

パスのID変更

デフォルトでは、read, update, deleteAPIではNewtZeroが発行したIDを指定します。 これをカスタマイズするために、CollectionConfig.primaryKeyを指定することでNewtZeroの発行IDの代わりに データの任意のフィールドを指定できます。 例えば、primaryKey: "contents.rawdata.itemId"と定義した場合、 /api/1/item/:idのidは、data.contents.rawdata.itemIdを参照します。

エンドポイントの追加

NewtZeroSDKで提供するCRUD機能以外のエンドポイントを追加する場合、NewtZeroSDK.addRoute関数を利用できます。 この関数はexpress.jsのapp.use()関数のwrapper関数であり、ミドルウェア関数をパスにマウントすることでエンドポイントを追加できます。

import express from "express";
import {NewtZeroSDK} from "newtzero-sdk";

const app = express();
app.use('/:id', (req, res, next) => {
console.log('Request Type:', req.method);
next();
})

nz = NewtZeroSDK();
nz.load();
nz.addRoute("/api/1", app);
nz.start();

Metrics v2

metricsに追加されたフィールド

カラム説明
valueType値の種類を指定します。指定した値に基づいて解釈エンジンがデータを解釈し、データを自動整形します。anyを指定した場合は値の整形は行われません。any, string, date, number
interpretationEngine解釈エンジンを指定します。gpt3...AIによって解釈します。(未リリース)gif23...政府相互運用性フレームワークの2023年時点の仕様に基づき解釈します。 allegrobot...従来の解釈エンジンです。gpt3, gif23, allegrobot

nAuth

コントラクタの予約語

Group

RoleのCRUD

GroupのCRUD

Support OAuth2.0

私たちはOAuth2.0をサポートします。