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