共用方式為


CrudApiPlugin

使用記憶體內部數據存放區模擬 CRUD API。 傳送 JSON 回應。 支援從用戶端應用程式使用跨網域的CORS。 選擇性地模擬使用 Microsoft Entra 保護的 CRUD API。

使用 Dev Proxy 模擬 CRUD API 的命令提示字元螢幕快照。

外掛程式實例定義

{
  "name": "CrudApiPlugin",
  "enabled": true,
  "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
  "configSection": "customersApi"
}

設定範例

{
  "customersApi": {
    "apiFile": "customers-api.json"
  }
}

設定屬性

屬性 Description
apiFile 包含 CRUD API 定義的檔案路徑

命令列選項

API 檔案範例

以下是數個 API 檔案範例,這些檔案會定義 CRUD 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

以下是 API 檔案的範例,該檔案會定義 CRUD API,以取得使用 Microsoft Entra 保護的客戶相關信息。 所有動作都會受到一個範圍保護。 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

以下是 API 檔案的範例,該檔案會定義 CRUD API,以取得使用 Microsoft Entra 保護的客戶相關信息。 動作會受到特定範圍保護。 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 檔案屬性

屬性 Description 必要
actions API 支援的動作清單。 Yes
auth 判斷 API 是否受到保護。 允許值:noneentra。 預設 none No
baseUrl 開發人員 Proxy 公開 URL 的基底 URL。 開發人員 Proxy 會在動作中定義的 URL 前面加上基底 URL。 Yes
dataFile 包含 API 資料的檔案路徑。 Yes
entraAuthConfig Microsoft Entra 驗證的組態。 是,當您設定 authentra

您可以使用絕對路徑或相對路徑來 dataFile 參考 。 Dev Proxy 會解析相對於 API 定義檔的相對路徑。

dataFile必須定義 JSON 陣列。 數位可以是空的,也可以包含一組初始物件。

EntraAuthConfig 屬性

當您將 auth 屬性設定為 entra時,必須定義 entraAuthConfig 屬性。 如果您未定義它,CrudApiPlugin 會顯示警告,且 API 可供匿名使用。

您可以在 API 檔案與每個 API 動作上定義 entraAuthConfig 。 當您在 API 檔案上定義它時,它會套用至所有動作。 當您在動作上定義它時,它會覆寫此特定動作的 API 檔案組態。

屬性 entraAuthConfig 具有下列屬性。

屬性 Description 必要 預設
audience 指定令牌的有效物件。 指定時,CrudApiPlugin 會比較令牌中的物件與此物件。 如果兩者不同,CrudApiPlugin 會傳回 401 未經授權回應。 No
issuer 指定有效的令牌簽發者。 指定時,CrudApiPlugin 會比較來自令牌的簽發者與此簽發者。 如果兩者不同,CrudApiPlugin 會傳回 401 未經授權回應。 No
scopes 指定有效範圍的陣列。 指定時,CrudApiPlugin 會控制令牌上是否有任一範圍。 如果兩個範圍都不存在,CrudApiPlugin 會傳回 401 未經授權回應。 No
roles 指定有效角色的陣列。 指定時,CrudApiPlugin 會控制令牌上是否有任一角色。 如果兩個角色都不存在,CrudApiPlugin 會傳回 401 未經授權回應。 No
validateLifetime 針對 CrudApiPlugin 設定為 true ,以驗證令牌是否已過期。 當 CrudApiPlugin 偵測到過期的令牌時,它會傳回 401 未經授權回應。 No false
validateSigningKey 針對 CrudApiPlugin 設定為 true ,以驗證令牌是否為驗證。 例如,當 CrudApiPlugin 偵測到簽章無效的令牌 (,因為您手動修改了令牌) ,所以會傳回 401 未經授權回應。 No false

動作屬性

清單中的每個動作 actions 都有下列屬性。

屬性 Description 必要 預設
action 定義 Dev Proxy 如何與數據互動。 可能的值:getAll、、、getOnegetManycreatemergedeleteupdate Yes
auth 判斷動作是否受到保護。 允許值:noneentra No none
entraAuthConfig Microsoft Entra 驗證的組態。 是,當您設定 auth 為 時 entra
method 開發 Proxy 用來公開動作的 HTTP 方法。 No 視動作而定
query Dev Proxy 用來尋找數據文件中數據的 Newtonsoft JSONPath 查詢。 No Empty
url 開發人員 Proxy 公開動作所在的URL。 Dev Proxy 會將URL附加至基底 URL。 No Empty

屬性中指定的 url URL 可以包含參數。 您可以藉由將參數名稱包裝在大括弧中來定義參數,例如 。 {customer-id} 路由要求時,Dev Proxy 會將 參數取代為來自要求URL的值。

您可以在查詢中使用相同的參數。 例如,如果您將 定義為 url/customers/{customer-id}query$.[?(@.id == {customer-id})]Dev Proxy 會將 查詢中的 參數取代 {customer-id} 為來自要求 URL 的值。

重要

Dev Proxy 會使用 Newtonsoft.Json 在 query 屬性中實作 JSONPath。 使用它有一些限制,例如,它只支援單引號。 提交問題之前,請務必驗證您的查詢。

當外掛程式無法使用查詢在資料檔中找到數據時,它會傳 404 Not Found 回回應。

每個動作類型都有預設的 HTTP 方法。 您可以藉由指定 method 屬性來覆寫預設值。 例如, get 動作類型的預設方法為 GET。 如果您要改用 POST ,請將 method 屬性指定為 POST

actions陣列定義了您想要仿真的動作集合。 您可以針對相同的 HTTP 方法和動作類型定義多個動作。 例如,您可以定義兩 getOne 個動作,一個動作會依其標識符擷取客戶,另一個動作則由其電子郵件位址擷取。 請務必為每個動作定義唯一的URL。

動作

Dev Proxy 支援 CRUD API 的下列動作。

動作 描述 Default 方法
getAll 傳回資料檔中的所有專案。 GET
getOne 從數據檔傳回單一專案。 當查詢符合多個項目時失敗。 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"
  }
]