Dela via


CrudApiPlugin

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.

Skärmbild av en kommandotolk med Dev Proxy som simulerar ett CRUD-API.

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"
  }
]

Nästa steg