2 votes

Requêtes de l'API TFS Rest

Nous utilisons TFS 2015 et allons passer à TFS 2017.

Comme nous avons beaucoup de collections (environ 17), nous devons parfois vérifier manuellement les valeurs de toutes les collections. Pour pallier à cela, je prévois d'interroger les API de TFS Rest, afin de récupérer les valeurs.

J'ai quelques questions concernant la manière de procéder avec Rest API, car nous pouvons utiliser les approches suivantes :

1.) Utilisez les paquets Nuget comme :

Microsoft.TeamFoundationServer.Client

Microsoft.VisualStudio.Services.Client

Microsoft.VisualStudio.Services.InteractiveClient

Cela nécessite le code suivant :

//Prompt user for credential
VssConnection connection = new VssConnection(new Uri(vstsCollectionUrl), new VssBasicCredential(string.Empty, pat));

//create a wiql object and build our query
Wiql wiql = new Wiql()
{
    Query = "Select [State], [Title] " +
            "From WorkItems " +
            "Where [Work Item Type] = 'Bug' " +
            "And [System.TeamProject] = '" + project + "' " +
            "And [System.State] <> 'Closed' " +
            "Order By [State] Asc, [Changed Date] Desc"
};

//create http client and query for resutls
WorkItemTrackingHttpClient witClient = connection.GetClient<WorkItemTrackingHttpClient>();
Wiql query = new Wiql() { Query = "SELECT [Id], [Title], [State] FROM workitems WHERE [Work Item Type] = 'Bug' AND [Assigned To] = @Me" };
WorkItemQueryResult queryResults = witClient.QueryByWiqlAsync(query).Result;

//Display reults in console
if (queryResults == null || queryResults.WorkItems.Count() == 0)
{
    Console.WriteLine("Query did not find any results");
}

2.) Une autre approche consiste à accéder aux API Rest en utilisant HttpClient avec PAT ou Alternate Credentials, comme dans le cas suivant :

using (HttpClient client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(
        new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(
        "Basic", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(
            $"{username}:{password}")));

    using (HttpResponseMessage response = client.GetAsync(
        $"https://dev.azure.com/{account}/_apis/projects").Result)
    {
        response.EnsureSuccessStatusCode();
        repsonseBody = await response.Content.ReadAsStringAsync();
    }
}

Quelle est la différence entre les 2 approches et quelle est l'approche recommandée qui fonctionnerait avec la version 2017 de TFS ?

Toute aide, suggestion ou lien serait le bienvenu.

L'authentification OAuth fonctionne-t-elle également avec TFS, comme avec Azure Devops ?

2voto

riQQ Points 4188

Les *HttpClient des paquets nuget sont une enveloppe pour l'API REST. Elles sont donc de plus haut niveau et devraient être plus faciles à utiliser. Elles définissent également des classes pour tous les objets de résultat et de paramètre. Comme elles ciblent la même API, elles sont supportées de manière équivalente.


L'authentification OAuth fonctionne-t-elle également avec TFS, comme avec Azure Devops ?

Non, ce n'est pas le cas https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops

Les conseils suivants sont destinés aux utilisateurs d'Azure DevOps Services, car OAuth 2.0 n'est pas pris en charge par Team Foundation Server ou Azure DevOps Server.

1voto

Shamrai Aleksander Points 2564

J'utilise la première option pour mes projets. Elle est soutenue par MS et vous pouvez demander des crédits aux utilisateurs ou utiliser PAT. En outre, vous utilisez des méthodes claires avec des résultats connus sans avoir à définir vos propres classes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X