Simulera ett CRUD-API som skyddas med en API-nyckel

Överblick
Mål: Simulera CRUD API med API-nyckelautentisering
Tid: 10 minuter
Plugin:CrudApiPlugin
Krav:Konfigurera Dev Proxy

När du skapar appar interagerar du ofta med serverdels-API:er. Ibland är dessa API:er ännu inte tillgängliga, eller så uppdaterar andra team dem för att uppfylla de senaste kraven. För att undvika att vänta skapar du vanligtvis ett falskt API som returnerar de data du behöver. Även om den här metoden avblockerar dig, kräver det att du ägnar tid åt att bygga ett API som du så småningom ersätter med det riktiga. Det blir ännu mer komplicerat när du behöver skydda ditt API med en API-nyckel. För att undvika slöseri med tid kan du använda Dev Proxy för att simulera ett CRUD-API och påskynda utvecklingen.

Med hjälp av CrudApiPluginkan du simulera ett CRUD-API (Skapa, Läsa, Uppdatera, Ta bort) med ett minnesinternt datalager. Med hjälp av en enkel konfigurationsfil kan du definiera vilka URL:er som ditt falska API stöder och vilka data som returneras. Plugin-programmet stöder även CORS för användning mellan domäner från program på klientsidan. Plugin-programmet stöder även API-nyckelautentisering, så att du kan skydda ditt falska API med en API-nyckel och testa att appen skickar nyckeln korrekt.

Scenario

Anta att du skapar en app som gör det möjligt för användare att hantera kunder. För att hämta data måste du anropa /customers slutpunkten för serverdels-API:et. API:et skyddas med en API-nyckel. För att undvika att vänta på att serverdelsteamet ska slutföra sitt arbete bestämmer du dig för att använda Dev Proxy för att simulera API:et och returnera de data du behöver.

Innan du börjar

Du börjar med att skapa ett simulerat CRUD-API med kunddata. När du har bekräftat att API:et fungerar kan du skydda det med en API-nyckel.

Exempel 1: Simulera ett CRUD-API som skyddas med en API-nyckel i en rubrik

I det första exemplet skyddar du hela API:et med en API-nyckel som klienter skickar i ett HTTP-huvud.

Lägg till information om API-nyckelautentisering i customers-api.json filen.

Filen:customers-api.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.0.0/crudapiplugin.apifile.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "apiKey",
  "apiKeyAuthConfig": {
    "apiKey": "my-secret-key",
    "headerName": "X-API-Key"
  },
  "actions": [
    {
      "action": "getAll"
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "create"
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    }
  ]
}

Genom att ange egenskapen auth till apiKey anger du att API:et är skyddat med en API-nyckel. I egenskapen apiKeyAuthConfig anger du konfigurationsinformationen. Egenskapen apiKey anger den giltiga API-nyckeln och headerName egenskapen anger HTTP-huvudet där plugin-programmet letar efter nyckeln.

Om du försöker anropa API:et utan att ha X-API-Key headern inställd på my-secret-key får du ett 401 Unauthorized-svar.

Exempel 2: Simulera ett CRUD-API som skyddas med en API-nyckel i en frågeparameter

I vissa API:er skickar klienter API-nyckeln som en frågesträngsparameter. Du kan simulera det här beteendet genom att queryParameterName konfigurera egenskapen.

Uppdatera filen på customers-api.json följande sätt:

Filen:customers-api.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.0.0/crudapiplugin.apifile.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "apiKey",
  "apiKeyAuthConfig": {
    "apiKey": "my-secret-key",
    "queryParameterName": "api_key"
  },
  "actions": [
    {
      "action": "getAll"
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "create"
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    }
  ]
}

I det här exemplet letar plugin-programmet efter API-nyckeln i frågesträngsparametern api_key . Till exempel lyckas anrop av https://api.contoso.com/v1/customers?api_key=my-secret-key, medan anrop av https://api.contoso.com/v1/customers returnerar svaret 401 Unauthorized.

Exempel 3: Simulera ett CRUD-API som accepterar en API-nyckel från både sidhuvud och frågeparameter

Du kan också konfigurera plugin-programmet så att det accepterar API-nyckeln från både en rubrik och en frågeparameter. Pluginet kontrollerar sidhuvudet först. Om HTTP-headern inte innehåller API-nyckeln kontrollerar insticksprogrammet frågeparametern.

Uppdatera filen på customers-api.json följande sätt:

Filen:customers-api.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.0.0/crudapiplugin.apifile.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "apiKey",
  "apiKeyAuthConfig": {
    "apiKey": "my-secret-key",
    "headerName": "X-API-Key",
    "queryParameterName": "api_key"
  },
  "actions": [
    {
      "action": "getAll"
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "create"
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    }
  ]
}

I det här exemplet godkänns en begäran som innehåller API-nyckeln i antingen X-API-Key huvudet eller api_key frågeparametern.

Nästa steg

Läs mer om CrudApiPlugin.

Exempel

Se även relaterade Dev Proxy-exempel: