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"
}
}
設定屬性
屬性 | 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 是否受到保護。 允許值:none 和 entra 。 預設 none |
No |
baseUrl |
開發人員 Proxy 公開 URL 的基底 URL。 開發人員 Proxy 會在動作中定義的 URL 前面加上基底 URL。 | Yes |
dataFile |
包含 API 資料的檔案路徑。 | Yes |
entraAuthConfig |
Microsoft Entra 驗證的組態。 | 是,當您設定 auth 為 entra |
您可以使用絕對路徑或相對路徑來 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 、、、getOne 、getMany create 、merge 、delete update 。 |
Yes | 無 |
auth |
判斷動作是否受到保護。 允許值:none 和 entra 。 |
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"
}
]