Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Simulerar ett CRUD-API med ett minnesinternt datalager. Skickar JSON-svar. Stöder CORS för användning mellan domäner från program på klientsidan. Du kan också simulera CRUD-API:er som skyddas med Microsoft Entra.
Definition av plugin-instans
{
"name": "CrudApiPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "customersApi"
}
Konfigurationsexempel
{
"customersApi": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.schema.json",
"apiFile": "customers-api.json"
}
}
Konfigurationsegenskaper
| Egenskap | Beskrivning |
|---|---|
apiFile |
Sökväg till filen som innehåller definitionen av CRUD-API:et |
Kommandoradsalternativ
Ingen
API-filexempel
Här följer flera exempel på API-filer som definierar ett CRUD-API för information om kunder.
Anonymt CRUD-API
Följande är ett exempel på en API-fil som definierar ett anonymt CRUD-API för information om kunder.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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})]"
}
]
}
CRUD-API:et skyddas med Microsoft Entra med ett enda omfång
Följande är ett exempel på en API-fil som definierar ett CRUD-API för information om kunder som skyddas med Microsoft Entra. Alla åtgärder skyddas med ett omfång. CrudApiPlugin validerar tokenpubliken, utfärdaren och omfånget.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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})]"
}
]
}
CRUD-API:et skyddas med Microsoft Entra med hjälp av specifika omfång
Följande är ett exempel på en API-fil som definierar ett CRUD-API för information om kunder som skyddas med Microsoft Entra. Åtgärder skyddas med specifika omfång. CrudApiPlugin validerar tokenpubliken, utfärdaren och omfånget.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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-filegenskaper
| Egenskap | Beskrivning | Krävs |
|---|---|---|
actions |
Lista över åtgärder som API:et stöder. | Ja |
auth |
Avgör om API:et är skyddat eller inte. Tillåtna värden: none, entra. Standard none |
Nej |
baseUrl |
Bas-URL där Dev Proxy exponerar URL:en. Dev Proxy förbereder bas-URL:en till URL:er som du definierar i åtgärder. | Ja |
dataFile |
Sökväg till filen som innehåller data för API:et. | Ja |
entraAuthConfig |
Konfiguration för Microsoft Entra-autentisering. | Ja, när du konfigurerar auth till entra |
Du kan referera till dataFile med hjälp av en absolut- eller relativ sökväg. Dev Proxy löser relativa sökvägar relativt till API-definitionsfilen.
dataFile måste definiera en JSON-matris. Matrisen kan vara tom eller innehålla en inledande uppsättning objekt.
Egenskaper för EntraAuthConfig
När du konfigurerar egenskapen auth till entramåste du definiera egenskapen entraAuthConfig. Om du inte definierar det visar CrudApiPlugin en varning och API:et är tillgängligt anonymt.
Du kan definiera entraAuthConfig i API-filen och för varje API-åtgärd. När du definierar den i API-filen gäller den för alla åtgärder. När du definierar den för en åtgärd åsidosätter den API-filkonfigurationen för den här specifika åtgärden.
Egenskapen entraAuthConfig har följande egenskaper.
| Egenskap | Beskrivning | Krävs | Standard |
|---|---|---|---|
audience |
Ange den giltiga målgruppen för token. När det anges jämför CrudApiPlugin målgruppen från token med den här målgruppen. Om de är olika returnerar CrudApiPlugin ett 401 Obehörigt svar. | Nej | Ingen |
issuer |
Ange den giltiga token utfärdaren. När detta anges jämför CrudApiPlugin utfärdaren från token med den här utfärdaren. Om de är olika returnerar CrudApiPlugin ett 401 Obehörigt svar. | Nej | Ingen |
scopes |
Ange matrisen med giltiga omfång. När detta anges styr CrudApiPlugin om något av omfången finns på token. Om inget av omfången finns returnerar CrudApiPlugin ett 401 Unauthorized-svar. | Nej | Ingen |
roles |
Ange matrisen med giltiga roller. När detta anges styr CrudApiPlugin om någon av rollerna finns på token. Om ingen av rollerna finns returnerar CrudApiPlugin ett 401 Obehörigt svar. | Nej | Ingen |
validateLifetime |
Ange till true för CrudApiPlugin för att verifiera om token inte har upphört att gälla. När CrudApiPlugin identifierar en token som har upphört att gälla returneras ett 401-otillåtet svar. |
Nej | false |
validateSigningKey |
Ange till true för CrudApiPlugin för att verifiera om token är autentiserad. När CrudApiPlugin identifierar en token med en ogiltig signatur (till exempel eftersom du ändrade token manuellt) returnerar den ett 401 Obehörigt svar. |
Nej | false |
Åtgärdsegenskaper
Varje åtgärd i listan actions har följande egenskaper.
| Egenskap | Beskrivning | Krävs | Standard |
|---|---|---|---|
action |
Definierar hur Dev Proxy interagerar med data. Möjliga värden: getAll, getOne, getMany, create, merge, update, delete. |
Ja | Ingen |
auth |
Avgör om åtgärden är skyddad eller inte. Tillåtna värden: none, entra. |
Nej | none |
entraAuthConfig |
Konfiguration för Microsoft Entra-autentisering. | Ja, när du konfigurerar auth till entra |
Ingen |
method |
HTTP-metod som Dev Proxy använder för att exponera åtgärden. | Nej | Beror på åtgärden |
query |
Newtonsoft JSONPath fråga som Dev Proxy använder för att hitta data i datafilen. | Nej | Tom |
url |
URL där Dev Proxy exponerar åtgärden på. Dev Proxy lägger till URL:en till bas-URL:en. | Nej | Tom |
Url:en som anges i egenskapen url kan innehålla parametrar. Du definierar parametrar genom att omsluta parameternamnet i klammerparenteser, till exempel {customer-id}. Vid routning av begäran ersätter Dev Proxy parametern med värdet från begärande-URL:en.
Du kan använda samma parameter i frågan. Om du till exempel definierar url som /customers/{customer-id} och query som $.[?(@.id == {customer-id})]ersätter Dev Proxy parametern {customer-id} i frågan med värdet från begärande-URL:en.
Viktig
Dev Proxy implementerar JSONPath i egenskapen query med newtonsoft.Json. Det finns vissa begränsningar för att använda den, till exempel att den endast stöder enkla citattecken. Kontrollera frågan innan du skickar ett problem.
När plugin-programmet inte kan hitta data i datafilen med hjälp av frågan returneras ett 404 Not Found svar.
Varje åtgärdstyp har en STANDARD-HTTP-metod. Du kan åsidosätta standardvärdet genom att ange egenskapen method. Till exempel har get-åtgärdstypen en standardmetod för GET. Om du vill använda POST i stället anger du egenskapen method som POST.
Matrisen actions har definierat en samling åtgärder som du vill simulera. Du kan definiera flera åtgärder för samma HTTP-metod och åtgärdstyp. Du kan till exempel definiera två getOne åtgärder, en som hämtar en kund med deras ID och den andra via deras e-postadress. Se till att definiera unika URL:er för varje åtgärd.
Åtgärder
Dev Proxy stöder följande åtgärder för CRUD-API:er.
| Handling | Beskrivning | Standardmetod |
|---|---|---|
getAll |
Returnerar alla objekt från datafilen. | GET |
getOne |
Returnerar ett enskilt objekt från datafilen. Misslyckas när frågan matchar flera objekt. | GET |
getMany |
Returnerar flera objekt från datafilen. Returnerar en tom matris om frågan inte matchar några objekt. | GET |
create |
Lägger till ett nytt objekt i datainsamlingen. | POST |
merge |
Sammanfogar data från begäran med data från datafilen. | PATCH |
update |
Ersätter data i datafilen med data från begäran. | PUT |
delete |
Tar bort objektet från datafilen. | DELETE |
När du skapar ett nytt objekt med en create åtgärd verifierar plugin-programmet inte dess form och lägger till det i datainsamlingen as-is.
Exempel på datafil
[
{
"id": 1,
"name": "Contoso",
"address": "4567 Main St Buffalo, NY 98052"
},
{
"id": 2,
"name": "Fabrikam",
"address": "4567 Main St Buffalo, NY 98052"
}
]