Simulare un'API CRUD protetta con una chiave API

A colpo d'occhio
Obiettivo: Simulare l'API CRUD con l'autenticazione della chiave API
Tempo: 10 minuti
Plugins:CrudApiPlugin
Prerequisiti:Configurare il proxy di sviluppo

Quando si creano app, spesso si interagisce con le API back-end. A volte, queste API non sono ancora disponibili o altri team li aggiornano per soddisfare i requisiti più recenti. Per evitare l'attesa, in genere si crea un'API fittizia che restituisce i dati necessari. Anche se questo approccio sblocca, richiede di dedicare tempo alla creazione di un'API che alla fine verrà sostituita con quella reale. Diventa ancora più complicato, quando è necessario proteggere l'API con una chiave API. Per evitare perdite di tempo, è possibile usare Dev Proxy per simulare un'API CRUD e velocizzare lo sviluppo.

Usando il CrudApiPlugin, è possibile simulare un'API CRUD (Create, Read, Update, Delete) utilizzando una memoria dati interna. Usando un file di configurazione semplice, è possibile definire gli URL supportati dall'API fittizia e i dati restituiti. Il plug-in supporta anche CORS per l'utilizzo tra domini da applicazioni lato client. Il plug-in supporta anche l'autenticazione della chiave API, in modo da poter proteggere l'API fittizia con una chiave API e verificare che l'app invii correttamente la chiave.

Scenario

Si supponga di creare un'app che consenta agli utenti di gestire i clienti. Per ottenere i dati, è necessario chiamare l'endpoint /customers dell'API back-end. L'API è protetta con una chiave API. Per evitare di attendere il completamento del lavoro del team back-end, si decide di usare Dev Proxy per simulare l'API e restituire i dati necessari.

Prima di iniziare

Per iniziare , creare un'API CRUD simulata con i dati dei clienti. Dopo aver verificato il funzionamento dell'API, è possibile proteggerla con una chiave API.

Esempio 1: Simulare un'API CRUD protetta con una chiave API in un'intestazione

Nel primo esempio si protegge l'intera API con una chiave API inviata dai client in un'intestazione HTTP.

customers-api.json Nel file aggiungere informazioni sull'autenticazione della chiave API.

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

Impostando la auth proprietà su apiKey si specifica che l'API è protetta con una chiave API. apiKeyAuthConfig Nella proprietà specificare i dettagli di configurazione. La apiKey proprietà specifica la chiave API valida e la headerName proprietà specifica l'intestazione HTTP in cui il plug-in cerca la chiave.

Se si tenta di chiamare l'API senza l'intestazione X-API-Key impostata su my-secret-key, si ottiene una 401 Unauthorized risposta.

Esempio 2: Simulazione di un'API CRUD protetta tramite una chiave API in un parametro di query

In alcune API, i client inviano la chiave API come parametro di stringa di query. È possibile simulare questo comportamento configurando la queryParameterName proprietà .

Aggiornare il customers-api.json file come segue:

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

In questo esempio il plug-in cerca la chiave API nel api_key parametro query-string. Ad esempio, la chiamata ha esito positivo, mentre la chiamata https://api.contoso.com/v1/customers?api_key=my-secret-keyhttps://api.contoso.com/v1/customers restituisce una 401 Unauthorized risposta.

Esempio 3: Simulare un'API CRUD che accetta una chiave API sia dall'intestazione che dal parametro di query

È anche possibile configurare il plug-in per accettare la chiave API da un'intestazione e da un parametro di query. Il plug-in controlla per prima l'intestazione. Se l'intestazione non contiene la chiave API, il plug-in controlla il parametro di query.

Aggiornare il customers-api.json file come segue:

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

In questo esempio, una richiesta che include la chiave API nell'intestazione X-API-Key oppure nel parametro di query api_key è autorizzata.

Passo successivo

Altre informazioni su CrudApiPlugin.

Esempi

Vedere anche gli esempi correlati di Dev Proxy: