Simulación de una API CRUD protegida con una clave de API

De un vistazo
Objetivo: Simular una API CRUD con autenticación mediante clave de API
Hora: 10 minutos
Plugins:CrudApiPlugin
Requisitos previos:Configuración del proxy de desarrollo

Al desarrollar aplicaciones, a menudo interactúas con las API del backend. A veces, estas API aún no están disponibles u otros equipos los están actualizando para cumplir los requisitos más recientes. Para evitar esperar, normalmente se crea una API ficticia que devuelve los datos que necesita. Aunque este enfoque le desbloquea, requiere que dedique tiempo a crear una API que finalmente reemplace por la real. Se complica aún más, cuando necesita proteger la API con una clave de API. Para evitar perder el tiempo, puede usar dev Proxy para simular una API CRUD y acelerar el desarrollo.

Con el CrudApiPlugin, puede simular una API CRUD (crear, leer, actualizar y eliminar) con un almacén de datos en memoria. Con un archivo de configuración simple, puede definir qué direcciones URL admite la API ficticia y qué datos devuelve. El complemento también admite CORS para el uso entre dominios desde aplicaciones del lado cliente. El complemento también admite la autenticación de clave de API, por lo que puede proteger la API ficticia con una clave de API y probar que la aplicación envía la clave correctamente.

Escenario

Supongamos que va a crear una aplicación que permita a los usuarios administrar clientes. Para obtener los datos, tiene que llamar al endpoint /customers de la API del backend. La API está protegida con una clave de API. Para evitar esperar a que el equipo back-end finalice su trabajo, decide usar el proxy de desarrollo para simular la API y devolver los datos que necesita.

Antes de empezar

Para empezar, cree una API CRUD simulada con los datos del cliente. Después de confirmar que la API funciona, puede protegerla con una clave de API.

Ejemplo 1: Simulación de una API CRUD protegida con una clave de API en un encabezado

En el primer ejemplo, se protege toda la API con una clave de API que los clientes envían en un encabezado HTTP.

En el archivo customers-api.json, agregue la información sobre la autenticación mediante clave de API.

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

Al establecer la propiedad auth en apiKey, se especifica que la API está protegida con una clave de API. En la apiKeyAuthConfig propiedad , especifique los detalles de configuración. La apiKey propiedad especifica la clave de API válida y la headerName propiedad especifica el encabezado HTTP donde el complemento busca la clave.

Si intenta hacer una llamada a la API sin la cabecera X-API-Key establecida en my-secret-key, obtendrá una respuesta 401 Unauthorized.

Ejemplo 2: Simulación de una API CRUD protegida con una clave de API en un parámetro de consulta

En algunas API, los clientes envían la clave de API como parámetro de cadena de consulta. Puede simular este comportamiento configurando la queryParameterName propiedad .

Actualice el archivo customers-api.json de la siguiente forma:

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

En este ejemplo, el complemento busca la clave de API en el api_key parámetro query-string. Por ejemplo, invocar https://api.contoso.com/v1/customers?api_key=my-secret-key se realiza correctamente, mientras que invocar https://api.contoso.com/v1/customers devuelve una respuesta 401 Unauthorized.

Ejemplo 3: Simula una API CRUD que acepta una clave de la API tanto en la cabecera como en el parámetro de consulta

También puede configurar el complemento para que acepte la clave de API de un encabezado y un parámetro de consulta. El complemento comprueba primero el encabezado. Si el encabezado no contiene la clave de API, el complemento comprueba el parámetro de consulta.

Actualice el archivo customers-api.json de la siguiente manera:

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

En este ejemplo, se autoriza una solicitud que incluye la clave de API en el X-API-Key encabezado o el api_key parámetro de consulta.

Paso siguiente

Obtenga más información sobre CrudApiPlugin.

Samples

Vea también los ejemplos relacionados del proxy de desarrollo: