Blog de Florent Appointaire

Blog sur les technologies Microsoft (Windows Server, System Center, Azure, Windows Azure Pack/Azure Stack, etc;)
    • 17/7/2017

    [PowerShell] Utiliser des APIs

    Voulant utiliser une API GitHub avec Azure Automation, j’ai du me lancer dans la découverte de l’utilisation des APIs avec PowerShell.

    Le première chose est de trouver la documentation pour l’API Github: https://developer.github.com/v3/ 

    La deuxième a été de trouver la cmdlet PowerShell pour utiliser les APIs, Invoke-RestMethod: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/invoke-restmethod

    Une fois que vous avez ceci, vous pouvez commencer à travailler 

    Pour pouvoir vous authentifier via une API, nous devons passer un token dans le header. Pour Github, vous pouvez générer un token ici: https://github.com/settings/tokens

    Assurez vous de bien copier le token car vous ne pourrez pas le récupérer par la suite.

    Si vous allez sur l’URL suivante, https://api.github.com/, vous pourrez voir les actions que vous pouvez effectuer via l’API:

    A savoir, vous avez plusieurs méthodes pour utiliser une API:

    • GET
    • POST
    • PUT
    • DELETE
    • Etc.

    Nous allons voir comment utiliser quelques méthodes, en manipulant les répertoires ( https://developer.github.com/v3/repos/ ).

    Les URLs commençeront toujours par https://api.github.com et à la suite, nous ajouterons les options, suivant ce que l’on souhaite faire, et sur quoi.

    Commençons avec la méthode GET. Nous allons récupérer maintenant la liste de nos répertoires qui existent pour notre compte Github:

    $token = "yourtoken"
    $
    tokenAuth = "token $token"                                                                                           
    $headers = @{ Authorization = $tokenAuth }                                                                  
    $basedURL = 'https://api.github.com'                                                                       
    $uri = $basedURL + "/user/repos"                                                                                      
    $req = Invoke-RestMethod -Uri $uri -Headers $headers
    foreach ($r in $req){

                Write-Output $r.Name
                Write-Output $r.url

    }

    Passons maintenant à la méthode POST. Grace à cette méthode, nous allons pouvoir créer des repositories par exemple.

    $token = "token"                                                                       
    $tokenAuth = "token $token"                                                                                            
    $headers = @{ Authorization = $tokenAuth }
    $body = '{

      "name": "FlorentAppointairePowerShell",
      "description": "This is a test :)",
      "homepage": "https://microsofttouch.fr",
      "private": false,
      "has_issues": true,
      "has_projects": true,
      "has_wiki": true

    }'                          

    $basedURL = 'https://api.github.com'                                                                       
    $uri = $basedURL + "/user/repos"
                                                                                         
    Invoke-RestMethod -Uri $uri -Headers $headers -Method POST -Body $body

    Et l'interface web:

    Nous allons maintenant supprimer ce répertoire avec la méthode DELETE:

    $token = "token"                                                                 
    $tokenAuth = "token $token"                                                                                           
    $headers = @{ Authorization = $tokenAuth }                                      
    $basedURL = 'https://api.github.com'
    $uri = $basedURL + "/repos/flodu31/FlorentAppointairePowerShell"                                                                                       
    Invoke-RestMethod -Uri $uri -Headers $headers -Method DELETE

    Depuis l'interface, le répertoire a disparu:

    Cette nouvelle méthode que j'ai découvert est très intéressante pour la partie automatisation, parce que vous pouvez faire ce que vous voulez, si l'API le permet bien sur 

    N'hésitez pas à me contacter si vous avez des questions