Les API REST d’Azure permettent la gestion des ressources Azure tel que les Logic Apps (Workflows). Récemment, dans le cadre d’une application Web, j’ai eu besoin d’utiliser ces API. Je devais mettre à jour la définition d’une Logic App en utilisant les API REST d’Azure directement depuis mon application Web.
Parfait ! Les API REST d’Azure proposent des opérations pour pratiquement tout ce qui est réalisable depuis le Portail Azure. Pour plus de détails, reportez-vous aux défintions des API REST Azure pour les Logic Apps. L’API Logic App propose des groupes d’opérations, dont le groupe « Workflows » que je vais utiliser dans mon cas.
Traditionnellement, la mise à jour d’une entité en utilisant le protocole REST se réalise par une requête de type PUT (full) et PATCH (partielle). Azure REST API propose la méthode PATCH pour une mise à jour partielle de mon workflow. J’ai donc bêtement choisi l’opération « Update » parmi la liste des opérations du groupe « Workflows ». La description de l’opération est assez claire : « Updates a workflow ».
Dans mon projet, je préfère utiliser le SDK de gestion Azure (Azure Management SDK) plutôt que d’écrire manuellement toutes mes requêtes HTTP. La librairie Microsoft.Azure.Management.Logic propose des classes utilisables pour consommer les API REST Azure afin de gérer les Logic Apps.
J’utilise le flux d’authentification Client Credentials pour authentifier mon application Web sur les API REST Azure. J’ai donc ajouté une application sur mon annuaire Azure AD avec une paire client ID/client. Aussi, j’ai autorisé l’application à utiliser les API de gestion Azure. De plus j’ai déclaré mon application en tant que contributeur de ma souscription Azure (RBAC).
Impossible de mettre à jour ma Logic App avec cette requête « PATCH » ! La réponse du serveur à mon appel HTTP est : « La demande de correction du workflow « XXXX » n’est pas prise en charge. Aucun des champs situé dans l’objet de propriétés ne peut être corrigé. ». J’ai essayé d’appeler l’API manuellement (avec .Net Core et la classe HttpClient) : même résultat. Ensuite, j’ai essayé de m’authentifier directement (plus de Client Credentials). Finalement, j’ai utilisé le formulaire de test depuis le portail « Azure REST API » et les commandes « Try API ». Dans tous les cas, même résultat.
Bon, en conclusion, Azure REST API ne supporte pas le verbe HTTP PATCH sur les définitions de Logic App. Cependant, l’opération PUT fonctionne pour la création ou la mise à jour ! Attention, PATCH et PUT sont des verbes différents dont le but est différent. En utilisant le verbe PUT, je suis contraint d’envoyer toute la définition et je ne peux donc pas faire de mise à jour partielle.