次の方法で共有


CrudApiPlugin

メモリ内データ ストアを使用して CRUD API をシミュレートします。 JSON 応答を送信します。 クライアント側アプリケーションからのクロスドメイン使用に対して CORS をサポートします。 必要に応じて、Microsoft Entraでセキュリティ保護された CRUD API をシミュレートします。

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 がセキュリティで保護されているかどうかを判断します。 使用できる値: noneentra。 既定 none いいえ
baseUrl 開発プロキシが URL を公開するベース URL。 開発プロキシは、アクションで定義した URL の前にベース URL を付加します。 Yes
dataFile API のデータを含むファイルへのパス。 Yes
entraAuthConfig Microsoft Entra認証の構成。 はい。次のように構成 auth する場合 entra

絶対パスまたは相対パスを使用して を参照 dataFile できます。 開発プロキシは、API 定義ファイルに対する相対パスを相対的に解決します。

dataFile JSON 配列を定義する必要があります。 配列は空にすることも、オブジェクトの初期セットを含めることもできます。

EntraAuthConfig プロパティ

プロパティを にauthentra構成する場合は、 プロパティを定義する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 がデータと対話する方法を定義します。 指定できる値は、 getAllgetOne、、 getManycreatemergeupdatedeleteです。 はい なし
auth アクションがセキュリティで保護されているかどうかを判断します。 使用できる値: noneentra いいえ 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"
  }
]