CrudApiPlugin
メモリ内データ ストアを使用して CRUD API をシミュレートします。 JSON 応答を送信します。 クライアント側アプリケーションからのクロスドメイン使用に対して CORS をサポートします。 必要に応じて、Microsoft Entraでセキュリティ保護された CRUD API をシミュレートします。
プラグイン インスタンスの定義
{
"name": "CrudApiPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"configSection": "customersApi"
}
構成の例
{
"customersApi": {
"apiFile": "customers-api.json"
}
}
構成プロパティ
プロパティ | 説明 |
---|---|
apiFile |
CRUD API の定義を含むファイルへのパス |
コマンド ライン オプション
なし
API ファイルの例
顧客に関する情報を得るための CRUD API を定義する API ファイルの例をいくつか次に示します。
匿名 CRUD API
顧客に関する情報を得るための匿名 CRUD API を定義する API ファイルの例を次に示します。
{
"$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.14.1/crudapiplugin.schema.json",
"baseUrl": "https://api.contoso.com/v1/customers",
"dataFile": "customers-data.json",
"actions": [
{
"action": "getAll"
},
{
"action": "getOne",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "create"
},
{
"action": "merge",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "update",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "delete",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
}
]
}
単一のスコープを使用してMicrosoft Entraでセキュリティ保護された CRUD API
次に、Microsoft Entraでセキュリティ保護された顧客に関する情報を得るための CRUD API を定義する API ファイルの例を示します。 すべてのアクションは、1 つのスコープで保護されます。 CrudApiPlugin は、トークンの対象ユーザー、発行者、スコープを検証します。
{
"$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.14.1/crudapiplugin.schema.json",
"baseUrl": "https://api.contoso.com/v1/customers",
"dataFile": "customers-data.json",
"auth": "entra",
"entraAuthConfig": {
"audience": "https://api.contoso.com",
"issuer": "https://login.microsoftonline.com/contoso.com",
"scopes": ["api://contoso.com/user_impersonation"]
},
"actions": [
{
"action": "getAll"
},
{
"action": "getOne",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "create"
},
{
"action": "merge",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "update",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "delete",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
}
]
}
特定のスコープを使用してMicrosoft Entraでセキュリティ保護された CRUD API
次に、Microsoft Entraでセキュリティ保護された顧客に関する情報を得るための CRUD API を定義する API ファイルの例を示します。 アクションは、特定のスコープでセキュリティ保護されます。 CrudApiPlugin は、トークンの対象ユーザー、発行者、スコープを検証します。
{
"$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.14.1/crudapiplugin.schema.json",
"baseUrl": "https://api.contoso.com/v1/customers",
"dataFile": "customers-data.json",
"auth": "entra",
"entraAuthConfig": {
"audience": "https://api.contoso.com",
"issuer": "https://login.microsoftonline.com/contoso.com"
},
"actions": [
{
"action": "getAll",
"auth": "entra",
"entraAuthConfig": {
"scopes": ["api://contoso.com/customer.read"]
}
},
{
"action": "getOne",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]",
"auth": "entra",
"entraAuthConfig": {
"scopes": ["api://contoso.com/customer.read"]
}
},
{
"action": "create",
"auth": "entra",
"entraAuthConfig": {
"scopes": ["api://contoso.com/customer.write"]
}
},
{
"action": "merge",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]",
"auth": "entra",
"entraAuthConfig": {
"scopes": ["api://contoso.com/customer.write"]
}
},
{
"action": "update",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]",
"auth": "entra",
"entraAuthConfig": {
"scopes": ["api://contoso.com/customer.write"]
}
},
{
"action": "delete",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]",
"auth": "entra",
"entraAuthConfig": {
"scopes": ["api://contoso.com/customer.write"]
}
}
]
}
API ファイルのプロパティ
プロパティ | 説明 | 必須 |
---|---|---|
actions |
API がサポートするアクションの一覧。 | Yes |
auth |
API がセキュリティで保護されているかどうかを判断します。 使用できる値: none 、entra 。 既定 none |
いいえ |
baseUrl |
開発プロキシが URL を公開するベース URL。 開発プロキシは、アクションで定義した URL の前にベース URL を付加します。 | Yes |
dataFile |
API のデータを含むファイルへのパス。 | Yes |
entraAuthConfig |
Microsoft Entra認証の構成。 | はい。次のように構成 auth する場合 entra |
絶対パスまたは相対パスを使用して を参照 dataFile
できます。 開発プロキシは、API 定義ファイルに対する相対パスを相対的に解決します。
は dataFile
JSON 配列を定義する必要があります。 配列は空にすることも、オブジェクトの初期セットを含めることもできます。
EntraAuthConfig プロパティ
プロパティを にauth
entra
構成する場合は、 プロパティを定義するentraAuthConfig
必要があります。 これを定義しないと、CrudApiPlugin に警告が表示され、API は匿名で使用できます。
API ファイルと各 API アクションで を定義 entraAuthConfig
できます。 API ファイルで定義すると、すべてのアクションに適用されます。 アクションで定義すると、この特定のアクションの API ファイル構成がオーバーライドされます。
entraAuthConfig
プロパティには、次のプロパティがあります。
プロパティ | 説明 | 必須 | Default |
---|---|---|---|
audience |
トークンの有効な対象ユーザーを指定します。 指定すると、CrudApiPlugin はトークンの対象ユーザーをこの対象ユーザーと比較します。 それらが異なる場合、CrudApiPlugin は 401 Unauthorized 応答を返します。 | いいえ | なし |
issuer |
有効なトークン発行者を指定します。 指定すると、CrudApiPlugin はトークンの発行者をこの発行者と比較します。 それらが異なる場合、CrudApiPlugin は 401 Unauthorized 応答を返します。 | いいえ | なし |
scopes |
有効なスコープの配列を指定します。 指定すると、CrudApiPlugin は、いずれかのスコープがトークンに存在するかどうかを制御します。 どちらのスコープも存在しない場合、CrudApiPlugin は 401 Unauthorized 応答を返します。 | いいえ | なし |
roles |
有効なロールの配列を指定します。 指定すると、CrudApiPlugin は、いずれかのロールがトークンに存在するかどうかを制御します。 どちらのロールも存在しない場合、CrudApiPlugin は 401 Unauthorized 応答を返します。 | いいえ | なし |
validateLifetime |
トークンの有効期限が切れていないかどうかを検証するには、CrudApiPlugin の を に true 設定します。 CrudApiPlugin は、期限切れのトークンを検出すると、401 Unauthorized 応答を返します。 |
いいえ | false |
validateSigningKey |
トークンが本物かどうかを検証するには、CrudApiPlugin の を に true 設定します。 CrudApiPlugin が無効な署名を持つトークンを検出すると (たとえば、トークンを手動で変更したため)、401 Unauthorized 応答が返されます。 |
いいえ | false |
アクションのプロパティ
リスト内の actions
各アクションには、次のプロパティがあります。
プロパティ | 説明 | 必須 | Default |
---|---|---|---|
action |
Dev Proxy がデータと対話する方法を定義します。 指定できる値は、 getAll 、 getOne 、、 getMany 、 create 、 merge 、 update 、 delete です。 |
はい | なし |
auth |
アクションがセキュリティで保護されているかどうかを判断します。 使用できる値: none 、entra 。 |
いいえ | none |
entraAuthConfig |
Microsoft Entra認証の構成。 | はい。を構成 auth する場合は entra |
なし |
method |
Dev Proxy がアクションを公開するために使用する HTTP メソッド。 | いいえ | アクションによって異なります |
query |
Dev Proxy がデータ ファイル内のデータを検索するために使用する Newtonsoft JSONPath クエリ。 | いいえ | Empty |
url |
開発プロキシがアクションを公開する URL。 Dev Proxy は、URL をベース URL に追加します。 | いいえ | Empty |
プロパティで指定された URL には、パラメーターを url
含めることができます。 パラメーターを定義する場合は、パラメーター名を中かっこで囲みます (例: {customer-id}
)。 要求をルーティングするときに、Dev Proxy は パラメーターを要求 URL の値に置き換えます。
クエリで同じパラメーターを使用できます。 たとえば、 と query
/customers/{customer-id}
を url
として$.[?(@.id == {customer-id})]
定義した場合、Dev Proxy はクエリのパラメーターを{customer-id}
要求 URL の値に置き換えます。
重要
Dev Proxy は、Newtonsoft.Json を使用して プロパティに query
JSONPath を実装します。 使用にはいくつかの制限があります。たとえば、単一引用符のみをサポートしています。 問題を送信する前に、必ずクエリを検証してください。
プラグインがクエリを使用してデータ ファイル内のデータを見つけることができない場合は、応答を 404 Not Found
返します。
各アクションの種類には、既定の HTTP メソッドがあります。 プロパティを指定することで、既定値を method
オーバーライドできます。 たとえば、アクションの get
種類の既定の GET
メソッドは です。 代わりに を使用POST
する場合は、 プロパティを としてPOST
指定しますmethod
。
配列は actions
、モックするアクションのコレクションを定義しました。 同じ HTTP メソッドとアクションの種類に対して複数のアクションを定義できます。 たとえば、2 つの getOne
アクションを定義できます。1 つは顧客を ID で取得し、もう 1 つはメール アドレスで取得します。 アクションごとに一意の URL を定義してください。
アクション
開発プロキシでは、CRUD API に対して次のアクションがサポートされています。
アクション | 説明 | Default メソッド |
---|---|---|
getAll |
データ ファイルからすべての項目を返します。 | GET |
getOne |
データ ファイルから 1 つの項目を返します。 クエリが複数の項目と一致すると失敗します。 | GET |
getMany |
データ ファイルから複数の項目を返します。 クエリが項目と一致しない場合は、空の配列を返します。 | GET |
create |
データ コレクションに新しい項目を追加します。 | POST |
merge |
要求のデータをデータ ファイルのデータとマージします。 | PATCH |
update |
データ ファイル内のデータを要求のデータに置き換えます。 | PUT |
delete |
データ ファイルから項目を削除します。 | DELETE |
アクションを使用して新しい項目を create
作成すると、プラグインは図形を検証せず、そのままデータ コレクションに追加します。
データ ファイルの例
[
{
"id": 1,
"name": "Contoso",
"address": "4567 Main St Buffalo, NY 98052"
},
{
"id": 2,
"name": "Fabrikam",
"address": "4567 Main St Buffalo, NY 98052"
}
]
Dev Proxy