Partager via


Personnaliser un point de terminaison HTTP dans Azure Functions

Dans cet article, vous apprenez à générer des API hautement évolutives avec Azure Functions en personnalisant un déclencheur HTTP pour gérer des actions spécifiques dans votre conception d’API. Azure Functions inclut une collection de liaisons et de déclencheurs HTTP intégrés qui permettent de créer facilement un point de terminaison dans différents langages, dont Node.js, C# et bien d’autres encore. Vous préparez également le développement de votre API en l’intégrant à Azure Functions Proxies et en configurant des API factices. Étant donné que ces tâches s’effectuent sur l’environnement de calcul serverless de Functions, vous n’avez pas à vous soucier de la mise à l’échelle des ressources. Au lieu de cela, vous pouvez simplement vous concentrer sur la logique de votre API.

Important

Les proxys Azure Functions sont une fonctionnalité héritée des versions 1.x à 3.x du runtime Azure Functions. La prise en charge des proxys peut être réactivée dans la version 4.x pour que vous puissiez mettre à niveau vos applications Functions vers la dernière version du runtime. Dès que possible, vous devez basculer vers l’intégration de vos applications de fonction avec Gestion des API Azure. Gestion des API vous permet de tirer parti d’un ensemble plus complet de fonctionnalités pour définir, sécuriser, gérer et monétiser vos API basées sur Functions. Pour plus d’informations, consultez Intégration de Gestion des API.

Pour savoir comment réactiver la prise en charge des proxys dans Functions version 4.x, consultez Réactiver les proxys dans Functions v4.x.

Prérequis

  • Un outil de test HTTP qui sécurise vos données. Pour découvrir plus d’informations, consultez Outils de test HTTP.

Cet article utilise comme point de départ les ressources créées dans Créer votre première fonction dans le portail Azure. Si vous ne l’avez pas déjà fait, suivez ces étapes pour créer votre Function App.

Après avoir créé cette application de fonction, vous pouvez suivre les procédures décrites dans cet article.

Connexion à Azure

Connectez-vous au portail Azure avec votre compte Azure.

Personnaliser une fonction HTTP

Par défaut, vous configurez la fonction de votre déclencheur HTTP pour accepter n’importe quelle méthode HTTP. Dans cette section, vous allez modifier la fonction de façon à répondre uniquement aux demandes GET avec /api/hello. Vous pouvez utiliser l’URL par défaut, https://<yourapp>.azurewebsites.net/api/<funcname>?code=<functionkey> :

  1. Accédez à votre fonction sur le Portail Azure. Dans le menu de gauche, sélectionnez Integration (Intégration), puis sous Trigger (Déclencheur), sélectionnez HTTP (req) .

    Capture d’écran présentant la modification des paramètres de déclencheur HTTP d’une fonction.

  2. Utilisez les paramètres de déclencheur HTTP spécifiés dans le tableau suivant.

    Champ Exemple de valeur Description
    Modèle d’itinéraire hello Détermine l’itinéraire utilisé pour appeler cette fonction.
    Niveau d’autorisation Anonyme Facultatif : rend votre fonction accessible sans clé API
    Méthodes HTTP sélectionnées GET Autorise uniquement l’utilisation des méthodes HTTP sélectionnés pour appeler cette fonction.

    Étant donné qu’un paramètre global gère le préfixe de chemin d’accès de base /api dans le modèle d’itinéraire, vous n’avez pas besoin de le définir ici.

  3. Cliquez sur Enregistrer.

Pour plus d’informations sur la personnalisation des fonctions HTTP, consultez Vue d’ensemble des déclencheurs et liaisons HTTP Azure Functions.

Tester l’API

Ensuite, testez votre fonction pour observer son fonctionnement avec la nouvelle surface d’API.

  1. Dans la page Fonction, sélectionnez Code + Test dans le menu de gauche.

  2. Dans le menu supérieur, sélectionnez Get function URL (Obtenir l’URL de fonction), puis copiez l’URL. Vérifiez que votre fonction utilise désormais le chemin d’accès /api/hello.

  3. Copiez l’URL dans un nouvel onglet du navigateur ou dans le client REST de votre choix. Les navigateurs utilisent GET par défaut.

  4. Ajoutez des paramètres à la chaîne de requête dans votre URL. Par exemple : /api/hello/?name=John.

  5. Appuyez sur Entrée pour vérifier que votre fonction fonctionne. La réponse « Hello John » doit s’afficher.

  6. Vous pouvez également appeler le point de terminaison avec une autre méthode HTTP pour vérifier que la fonction n’est pas exécutée. Pour les méthodes HTTP autres que GET, vous devez utiliser un outil de test HTTP sécurisé.

Vue d’ensemble des proxys

Dans la section suivante, vous faites apparaître votre API par le biais d’un proxy. Azure Functions Proxies vous permet de transférer des requêtes vers d’autres ressources. Vous définissez un point de terminaison HTTP comme vous le feriez avec un déclencheur HTTP. Toutefois, au lieu d’écrire du code à exécuter lorsque ce point de terminaison est appelé, vous fournissez une URL vers une implémentation à distance. Cela vous permet de composer plusieurs sources d’API en une seule surface d’API, plus facile à utiliser par les clients et utile si vous souhaitez générer votre API en tant que microservices.

Un proxy peut pointer vers n’importe quelle ressource HTTP, notamment :

Pour en savoir plus sur Azure Functions Proxies, consultez [Travailler avec des proxys hérités].

Remarque

Azure Functions Proxies est disponible dans Azure Functions versions 1.x à 3.x.

Créer un premier proxy

Dans cette section, vous allez créer un proxy qui sert de frontend à votre API globale.

Configuration de l’environnement frontend

Répétez les étapes décrites dans Créer une application de fonction pour créer une application de fonction dans laquelle vous créez votre proxy. L’URL de cette nouvelle application sert de frontend à notre API et l’application de fonction que vous avez modifiée précédemment sert de backend :

  1. Accédez à votre nouvelle application de fonction frontend sur le portail.

  2. Développez Paramètres, puis sélectionnez Variables d’environnement.

  3. Sélectionnez l’onglet des Paramètres de l’application, où les paires clé/valeur sont stockées.

  4. Sélectionnez + Ajouter pour créer un nouveau paramètre. EntrezHELLO_HOST comme Nom et définissez sa Valeur sur l’hôte de votre application de fonction backend, par exemple <YourBackendApp>.azurewebsites.net.

    Cette valeur fait partie de l’URL que vous avez copiée précédemment lorsque vous avez testé votre fonction HTTP. Vous ferez référence à ce paramètre plus tard dans la configuration.

    Remarque

    Il est recommandé d’utiliser les paramètres de l’application pour la configuration de l’hôte afin d’éviter une dépendance à l’environnement codée en dur du proxy. Grâce à eux, vous pouvez déplacer la configuration du proxy d’un environnement à l’autre, et les paramètres de l’application propres à l’environnement s’appliqueront.

  5. Sélectionnez Appliquer pour enregistrer les nouveaux paramètres. Dans l’onglet Paramètres d’application, sélectionnez Appliquer, puis Confirmer pour redémarrer l’application de fonction.

Créer un proxy sur le frontend

  1. Revenez à votre application de fonction frontend sur le portail.

  2. Dans le menu de gauche, développez Fonctions, sélectionnez Proxies, puis Ajouter.

  3. Sur la page Nouveau proxy, utilisez les paramètres du tableau suivant, puis sélectionnez Créer.

    Champ Exemple de valeur Description
    Nom HelloProxy Nom convivial utilisé uniquement à des fins de gestion.
    Modèle d’itinéraire /api/remotehello Détermine l’itinéraire utilisé pour appeler ce proxy.
    URL principale https://%HELLO_HOST%/api/hello Spécifie le point de terminaison vers lequel la demande doit être redirigée via proxy.

    Capture d’écran présentant les paramètres de la page Nouveau proxy.

    Étant donné qu’Azure Functions Proxies ne fournit pas le préfixe du chemin de base /api, vous devez l’inclure dans le modèle d’itinéraire. La syntaxe %HELLO_HOST% fait référence au paramètre d’application que vous avez créé précédemment. L’URL résolue pointe vers votre fonction d’origine.

  4. Essayez votre nouveau proxy en copiant l’URL du proxy et en le testant dans le navigateur ou avec le client HTTP de votre choix :

    • Pour une fonction anonyme, utilisez : https://YOURPROXYAPP.azurewebsites.net/api/remotehello?name="Proxies".
    • Pour une fonction utilisant l’autorisation,utilisez : https://YOURPROXYAPP.azurewebsites.net/api/remotehello?code=YOURCODE&name="Proxies".

Créer une API factice

Maintenant, vous utilisez un proxy pour créer une API factice pour votre solution. Ce proxy permet au développement client de progresser, sans avoir à implémenter entièrement le backend. Dans la suite du développement, vous pouvez créer une nouvelle application de fonction qui prend en charge cette logique et y redirige votre proxy :

  1. Pour créer cette API factice, créez un nouveau proxy, cette fois en utilisant l’Éditeur App Service. Pour commencer, accédez à votre application de fonction dans le portail Azure. Sélectionnez Fonctionnalités de la plateforme, puis Éditeur App Service sous Outils de développement.

    L’Éditeur App Service s’ouvre dans un nouvel onglet.

  2. Sélectionnez proxies.json dans le volet de gauche. Ce fichier stocke la configuration de tous vos proxys. Si vous utilisez l’une des méthodes de déploiement de Functions, vous maintenez ce fichier dans le contrôle de code source. Pour plus d’informations sur ce fichier, consultez Configuration avancée des proxys.

    Votre fichier proxies.json doit se présenter ainsi :

    {
        "$schema": "http://json.schemastore.org/proxies",
        "proxies": {
            "HelloProxy": {
                "matchCondition": {
                    "route": "/api/remotehello"
                },
                "backendUri": "https://%HELLO_HOST%/api/hello"
            }
        }
    }
    
  3. Ajoutez votre API factice. Remplacez votre fichier proxies.json par le code suivant :

    {
        "$schema": "http://json.schemastore.org/proxies",
        "proxies": {
            "HelloProxy": {
                "matchCondition": {
                    "route": "/api/remotehello"
                },
                "backendUri": "https://%HELLO_HOST%/api/hello"
            },
            "GetUserByName" : {
                "matchCondition": {
                    "methods": [ "GET" ],
                    "route": "/api/users/{username}"
                },
                "responseOverrides": {
                    "response.statusCode": "200",
                    "response.headers.Content-Type" : "application/json",
                    "response.body": {
                        "name": "{username}",
                        "description": "Awesome developer and master of serverless APIs",
                        "skills": [
                            "Serverless",
                            "APIs",
                            "Azure",
                            "Cloud"
                        ]
                    }
                }
            }
        }
    }
    

    Ce code ajoute un nouveau proxy, GetUserByName, qui omet la propriété backendUri. Au lieu d’appeler une autre ressource, il modifie la réponse par défaut d’Azure Functions Proxies à l’aide d’une substitution de réponse. Vous pouvez également utiliser des substitutions de requêtes et de réponses avec une URL backend. Cette technique est utile lorsque vous proxyser vers un système hérité, où vous devrez peut-être modifier les en-têtes, interroger des paramètres, etc. Pour plus d’informations sur les substitutions de requêtes et de réponses, consultez Modifier les demandes et les réponses .

  4. Testez votre API factice en appelant le point de terminaison <YourProxyApp>.azurewebsites.net/api/users/{username} avec un navigateur ou le client REST de votre choix. Remplacez {username} par une valeur de chaîne qui représente un nom d’utilisateur.

Dans cet article, vous avez appris à créer et à personnaliser une API avec Azure Functions. Vous avez également appris à réunir plusieurs API, y compris des API factices, en une surface d’API unifiée. Vous pouvez utiliser ces techniques pour construire des API plus complexes, qui s’exécutent sur le modèle de calcul sans serveur fourni par Azure Functions.

Pour plus d'informations sur le développement de votre API :