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/dev-proxy-plugins.dll",
  "configSection": "customersApi"
}

Konfigurationsexempel

{
  "customersApi": {
    "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.

Anonym 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/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})]"
    }
  ]
}

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

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/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-filegenskaper

Egenskap Beskrivning Krävs
actions Lista över åtgärder som API:et stöder. Yes
auth Avgör om API:et är skyddat eller inte. Tillåtna värden: none, entra. Standard none No
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. Yes
dataFile Sökväg till filen som innehåller data för API:et. Yes
entraAuthConfig Konfiguration för Microsoft Entra autentisering. Ja, när du konfigurerar auth till entra

Du kan referera till med hjälp av dataFile en absolut eller en 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 auth egenskapen till entramåste du definiera entraAuthConfig egenskapen . 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 Standardvärde
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 annorlunda returnerar CrudApiPlugin ett 401-otillåtet svar. No 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 annorlunda returnerar CrudApiPlugin ett 401-otillåtet svar. No 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-otillåtet svar. No 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-otillåtet svar. No 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. No 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) returneras ett 401-otillåtet svar. No false

Åtgärdsegenskaper

Varje åtgärd i actions listan har följande egenskaper.

Egenskap Beskrivning Krävs Standardvärde
action Definierar hur Dev Proxy interagerar med data. Möjliga värden: getAll, getOne, getMany, create, merge, update, delete. Yes Ingen
auth Avgör om åtgärden är skyddad eller inte. Tillåtna värden: none, entra. No 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. No Beror på åtgärden
query Newtonsoft JSONPath-fråga som Dev Proxy använder för att hitta data i datafilen. No Tom
url URL där Dev Proxy exponerar åtgärden. Dev Proxy lägger till URL:en till bas-URL:en. No Tom

Url:en som anges i url egenskapen kan innehålla parametrar. Du definierar parametrar genom att omsluta parameternamnet i klammerparenteser, {customer-id}till exempel . 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.

Viktigt

Dev Proxy implementerar JSONPath i query egenskapen med newtonsoft.Json. Det finns vissa begränsningar för att använda det, till exempel att det bara stöder enkla citattecken. Innan du skickar ett problem måste du verifiera frågan.

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 standardinställningen genom att method ange egenskapen . Åtgärdstypen get har till exempel standardmetoden GET. Om du vill använda POST i stället anger du method egenskapen som POST.

Matrisen actions definierade 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 efter deras ID och den andra med 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.

Åtgärd 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 hjälp av en create åtgärd validerar plugin-programmet inte dess form och lägger till det i datainsamlingen som det är.

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