次の方法で共有


CRUD API プラグイン

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

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 がセキュリティで保護されているかどうかを判断します。 使用できる値: noneentra。 既定の 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 開発プロキシがデータと対話する方法を定義します。 使用できる値: getAllgetOnegetManycreatemergeupdatedelete はい 何一つ
auth アクションがセキュリティで保護されているかどうかを判断します。 使用できる値: noneentra いいえ 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"
  }
]

次のステップ