Simuler une API CRUD sécurisée avec une clé API

En un clin d’œil
Objectif: Simuler l’API CRUD avec l’authentification de clé API
Heure : 10 minutes
Plugins :CrudApiPlugin
Prérequis :configurer le proxy de développement

Lors de la création d’applications, vous interagissez souvent avec les API principales. Parfois, ces API ne sont pas encore disponibles, ou d’autres équipes les mettent à jour pour répondre aux dernières exigences. Pour éviter d’attendre, vous créez généralement une API fictive qui retourne les données dont vous avez besoin. Bien que cette approche vous débloque, il vous oblige à passer du temps à créer une API que vous remplacez par la vraie. Il devient encore plus compliqué quand vous devez sécuriser votre API avec une clé API. Pour éviter de perdre du temps, vous pouvez utiliser le proxy de développement pour simuler une API CRUD et accélérer le développement.

À l’aide du CrudApiPluginfichier , vous pouvez simuler une API CRUD (Créer, Lire, Mettre à jour, Supprimer) avec un magasin de données en mémoire. À l’aide d’un fichier de configuration simple, vous pouvez définir les URL que votre API fictif prend en charge et les données qu’elle retourne. Le plug-in prend également en charge CORS pour l’utilisation inter-domaines à partir d’applications côté client. Le plug-in prend également en charge l’authentification par clé API, ce qui vous permet de sécuriser votre API fictif avec une clé API et de tester que votre application envoie la clé correctement.

Scénario

Supposons que vous créez une application qui permet aux utilisateurs de gérer les clients. Pour obtenir les données, vous devez appeler le /customers point de terminaison de l’API back-end. L’API est sécurisée avec une clé API. Pour éviter d’attendre que l’équipe back-end termine son travail, vous décidez d’utiliser le proxy de développement pour simuler l’API et retourner les données dont vous avez besoin.

Avant de commencer

Vous commencez par créer une API CRUD simulée avec des données client. Après avoir confirmé que l’API fonctionne, vous pouvez la sécuriser avec une clé API.

Exemple 1 : Simuler une API CRUD sécurisée avec une clé API dans un en-tête

Dans le premier exemple, vous sécurisez toute l’API avec une clé API que les clients envoient dans un en-tête HTTP.

Dans le fichier customers-api.json, ajoutez des informations sur l’authentification par clé API.

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

En définissant la propriété auth sur apiKey, vous indiquez que l’API est sécurisée par une clé API. Dans la apiKeyAuthConfig propriété, vous spécifiez les détails de configuration. La apiKey propriété spécifie la clé API valide et la headerName propriété spécifie l’en-tête HTTP où le plug-in recherche la clé.

Si vous essayez d’appeler l’API sans l’en-tête X-API-Key défini sur my-secret-key, vous obtenez une 401 Unauthorized réponse.

Exemple 2 : Simuler une API CRUD sécurisée avec une clé API dans un paramètre de requête

Dans certaines API, les clients envoient la clé API en tant que paramètre de chaîne de requête. Vous pouvez simuler ce comportement en configurant la queryParameterName propriété.

Mettez à jour le customers-api.json fichier comme suit :

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

Dans cet exemple, le plug-in recherche la clé API dans le api_key paramètre de chaîne de requête. Par exemple, l’appel https://api.contoso.com/v1/customers?api_key=my-secret-key réussit, tandis que l’appel https://api.contoso.com/v1/customers retourne une 401 Unauthorized réponse.

Exemple 3 : Simuler une API CRUD qui accepte une clé API à partir de l’en-tête et du paramètre de requête

Vous pouvez également configurer le plug-in pour accepter la clé API à partir d’un en-tête et d’un paramètre de requête. Le plug-in vérifie d’abord l’en-tête. Si l’en-tête ne contient pas la clé API, le plug-in vérifie le paramètre de requête.

Mettez à jour le customers-api.json fichier comme suit :

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

Dans cet exemple, une requête qui inclut la clé API dans l’en-tête X-API-Key ou le api_key paramètre de requête est autorisée.

Étape suivante

En savoir plus sur crudApiPlugin.

Samples

Consultez également les exemples de proxy de développement associés :