Partager via


CrudApiPlugin (plugin pour API CRUD)

Simule une API CRUD avec un magasin de données en mémoire. Envoie des réponses JSON. Prend en charge CORS pour l’utilisation inter-domaines à partir d’applications côté client. Si vous le souhaitez, simule les API CRUD sécurisées avec Microsoft Entra.

Capture d’écran d’une invite de commandes avec le proxy de développement simulant une API CRUD.

Définition de l’instance de plug-in

{
  "name": "CrudApiPlugin",
  "enabled": true,
  "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
  "configSection": "customersApi"
}

Exemple de configuration

{
  "customersApi": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.schema.json",
    "apiFile": "customers-api.json"
  }
}

Propriétés de configuration

Propriété Descriptif
apiFile Chemin d’accès au fichier qui contient la définition de l’API CRUD

Options de ligne de commande

Aucun

Exemple de fichier API

Voici plusieurs exemples de fichiers API qui définissent une API CRUD pour plus d’informations sur les clients.

API CRUD anonyme

Voici un exemple de fichier API qui définit une API CRUD anonyme pour obtenir des informations sur les clients.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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})]"
    }
  ]
}

API CRUD sécurisée avec Microsoft Entra à l’aide d’une seule étendue

Voici un exemple de fichier d’API qui définit une API CRUD pour obtenir des informations sur les clients sécurisés avec Microsoft Entra. Toutes les actions sont sécurisées avec une seule étendue. CrudApiPlugin valide l’audience du jeton, l’émetteur et l’étendue.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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})]"
    }
  ]
}

API CRUD sécurisée avec Microsoft Entra à l’aide d’étendues spécifiques

Voici un exemple de fichier d’API qui définit une API CRUD pour obtenir des informations sur les clients sécurisés avec Microsoft Entra. Les actions sont sécurisées avec des étendues spécifiques. CrudApiPlugin valide l’audience du jeton, l’émetteur et l’étendue.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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"]
      }
    }
  ]
}

Propriétés du fichier API

Propriété Descriptif Obligatoire
actions Liste des actions prises en charge par l’API. Oui
auth Détermine si l’API est sécurisée ou non. Valeurs autorisées : none, entra. none par défaut Non
baseUrl URL de base où le proxy de développement expose l’URL. Le proxy de développement ajoute l’URL de base aux URL que vous définissez dans les actions. Oui
dataFile Chemin d’accès au fichier qui contient les données de l’API. Oui
entraAuthConfig Configuration de l’authentification Microsoft Entra. Oui, lorsque vous configurez auth sur entra

Vous pouvez faire référence au dataFile à l’aide d’un chemin absolu ou relatif. Le proxy de développement résout les chemins relatifs relativement au fichier de définition d’API.

Le dataFile doit définir un tableau JSON. Le tableau peut être vide ou contenir un ensemble initial d’objets.

Propriétés EntraAuthConfig

Lorsque vous configurez la propriété auth sur entra, vous devez définir la propriété entraAuthConfig. Si vous ne le définissez pas, CrudApiPlugin affiche un avertissement et l’API est disponible anonymement.

Vous pouvez définir entraAuthConfig sur le fichier API et sur chaque action d’API. Lorsque vous la définissez sur le fichier API, elle s’applique à toutes les actions. Lorsque vous la définissez sur une action, elle remplace la configuration du fichier API pour cette action spécifique.

La propriété entraAuthConfig a les propriétés suivantes.

Propriété Descriptif Obligatoire Faire défaut
audience Spécifiez l’audience valide pour le jeton. Lorsqu’il est spécifié, CrudApiPlugin compare l’audience du jeton à ce public. S’ils sont différents, CrudApiPlugin retourne une réponse non autorisée 401. Non Aucun
issuer Spécifiez l’émetteur de jeton valide. Lorsqu’il est spécifié, CrudApiPlugin compare l’émetteur du jeton à cet émetteur. S’ils sont différents, CrudApiPlugin retourne une réponse non autorisée 401. Non Aucun
scopes Spécifiez le tableau d’étendues valides. Quand elle est spécifiée, CrudApiPlugin contrôle si l’une des étendues est présente sur le jeton. Si aucune des étendues n’est présente, CrudApiPlugin retourne une réponse non autorisée 401. Non Aucun
roles Spécifiez le tableau de rôles valides. Lorsqu’il est spécifié, CrudApiPlugin contrôle si l’un des rôles est présent sur le jeton. Si aucun des rôles n’est présent, CrudApiPlugin retourne une réponse non autorisée 401. Non Aucun
validateLifetime Définissez la valeur true pour que CrudApiPlugin valide si le jeton n’a pas expiré. Quand CrudApiPlugin détecte un jeton expiré, il retourne une réponse non autorisée 401. Non false
validateSigningKey Définissez la valeur true pour que CrudApiPlugin valide si le jeton est authentique. Lorsque CrudApiPlugin détecte un jeton avec une signature non valide (par exemple, car vous avez modifié le jeton manuellement), il retourne une réponse non autorisée 401. Non false

Propriétés d’action

Chaque action de la liste actions possède les propriétés suivantes.

Propriété Descriptif Obligatoire Faire défaut
action Définit la façon dont le proxy de développement interagit avec les données. Valeurs possibles : getAll, getOne, getMany, create, merge, update, delete. Oui Aucun
auth Détermine si l’action est sécurisée ou non. Valeurs autorisées : none, entra. Non none
entraAuthConfig Configuration de l’authentification Microsoft Entra. Oui, lorsque vous configurez auth sur entra Aucun
method Méthode HTTP utilisée par le proxy de développement pour exposer l’action. Non Dépend de l’action
query Newtonsoft JSONPath requête utilisée par le proxy de développement pour rechercher les données dans le fichier de données. Non Vide
url URL sur laquelle le proxy de développement expose l’action. Le proxy de développement ajoute l’URL à l’URL de base. Non Vide

L’URL spécifiée dans la propriété url peut contenir des paramètres. Vous définissez des paramètres en encapsulant le nom du paramètre dans les accolades, par exemple, {customer-id}. Lors du routage de la requête, le proxy de développement remplace le paramètre par la valeur de l’URL de la requête.

Vous pouvez utiliser le même paramètre dans la requête. Par exemple, si vous définissez le url en tant que /customers/{customer-id} et le query en tant que $.[?(@.id == {customer-id})], le proxy de développement remplace le paramètre {customer-id} dans la requête par la valeur de l’URL de la requête.

Important

Le proxy de développement implémente JSONPath dans la propriété query à l’aide de Newtonsoft.Json. Il existe certaines limitations pour l’utiliser, par exemple, elle ne prend en charge que des guillemets simples. Avant de soumettre un problème, veillez à valider votre requête.

Lorsque le plug-in ne trouve pas les données dans le fichier de données à l’aide de la requête, elle retourne une réponse 404 Not Found.

Chaque type d’action a une méthode HTTP par défaut. Vous pouvez remplacer la valeur par défaut en spécifiant la propriété method. Par exemple, le type d’action get a une méthode par défaut de GET. Si vous souhaitez utiliser POST à la place, spécifiez la propriété method comme POST.

Le tableau actions a défini une collection d’actions que vous souhaitez simuler. Vous pouvez définir plusieurs actions pour la même méthode HTTP et le même type d’action. Par exemple, vous pouvez définir deux actions getOne, une qui récupère un client par son ID et l’autre par son adresse e-mail. Veillez à définir des URL uniques pour chaque action.

Actions

Le proxy de développement prend en charge les actions suivantes pour les API CRUD.

Action Descriptif Méthode par défaut
getAll Retourne tous les éléments du fichier de données. GET
getOne Retourne un élément unique à partir du fichier de données. Échoue lorsque la requête correspond à plusieurs éléments. GET
getMany Retourne plusieurs éléments du fichier de données. Retourne un tableau vide si la requête ne correspond à aucun élément. GET
create Ajoute un nouvel élément à la collection de données. POST
merge Fusionne les données de la demande avec les données du fichier de données. PATCH
update Remplace les données dans le fichier de données par les données de la requête. PUT
delete Supprime l’élément du fichier de données. DELETE

Lorsque vous créez un élément à l’aide d’une action de create, le plug-in ne valide pas sa forme et l’ajoute à la collection de données as-is.

Exemple de fichier de données

[
  {
    "id": 1,
    "name": "Contoso",
    "address": "4567 Main St Buffalo, NY 98052"
  },
  {
    "id": 2,
    "name": "Fabrikam",
    "address": "4567 Main St Buffalo, NY 98052"
  }
]

Étape suivante