> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Classements avec Azure Functions

> Tutoriel pour créer des classements PlayFab avec CloudScript Azure Functions, qui montre comment soumettre des scores et interroger les classements à partir de code côté serveur.

Dans ce tutoriel, vous apprendrez à implémenter des classements à l'aide de CloudScript, plus précisément au moyen d'[Azure Functions](/fr-CA/services/playfab/live-service-management/service-gateway/automation/cloudscript-af).
Cette approche est puissante, car elle vous permet de créer une logique personnalisée côté serveur sans nécessiter de mises à jour du client.

En définissant la logique liée aux classements dans une fonction Azure, votre client peut appeler cette fonction pour exécuter le code. Si des modifications sont nécessaires plus tard, vous pouvez mettre à jour la fonction Azure de façon indépendante, souvent sans modifier le client, selon la complexité de la mise à jour.

## Prérequis

Pour suivre ce tutoriel, vous avez besoin de :

* Un compte PlayFab. Si vous n'en avez pas, vous pouvez en créer un [ici](https://developer.playfab.com/).
* Un abonnement Azure. Si vous n'en avez pas, vous pouvez en créer un [ici](https://azure.microsoft.com/free/).

Pour plus de détails sur la création d'une fonction Azure, consultez ce guide. [Créer votre première fonction dans Azure à l'aide de Visual Studio](https://learn.microsoft.com/azure/azure-functions/functions-create-your-first-function-visual-studio)

## Créer un classement à l'aide d'Azure Functions

Dans cette section, nous allons créer un classement qui vous permet de soumettre des scores et de récupérer les meilleurs scores.

```C# theme={null}
[Function("LeaderboardExample")]
public async Task<HttpResponseData> RunAsync([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req)
{
    _logger.LogInformation("C# HTTP trigger function processed a request.");

    PlayFabSettings.staticSettings.TitleId = "78C3E"; // Change this value to your own titleId from PlayFab Game Manager
    PlayFabSettings.staticSettings.DeveloperSecretKey = "WJT5SBP7PUFH61JHE39QQ4F1SJKGBWBJR647CH1WYB9CS3MZDD"; // Change this to your title's secret key from Game Manager
                                                                                                              // Check if parameter exists
    if (string.IsNullOrEmpty(req.Query["leaderboardName"]))
    {
        var badResponse = req.CreateResponse(HttpStatusCode.BadRequest);
        badResponse.Headers.Add("Content-Type", "text/plain; charset=utf-8");
        badResponse.WriteString("Please pass a leaderboardName on the query string");
        return badResponse;
    }

    PlayFabAuthenticationContext authContext = await LoginAsTitleEntity();
    var result = await CreateLeaderboardDefinitionAsync(authContext, req.Query["leaderboardName"]);
    if (result != null)
    {
        if (result.Error != null) {
            PlayFabError apiError = result.Error;
            var response = req.CreateResponse(HttpStatusCode.BadRequest);
            response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
            if (apiError != null)
            {
                response.WriteString("Something went wrong with your API call.  :");
                response.WriteString("Here's some debug information:");
                response.WriteString(PlayFabUtil.GenerateErrorReport(apiError));
                return response;
            }
            response.WriteString("Something went wrong with your API call but it wasn't possible to get a PlayFab error description.");
            return response;
        }
        else
        {
            var response = req.CreateResponse(HttpStatusCode.OK);
            response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
            response.WriteString("Leaderboard created successfully!");
            return response;
        }
    }
    else 
    {
        var response = req.CreateResponse(HttpStatusCode.BadRequest);
        response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
        response.WriteString("Something went wrong with your API call.  :");
        return response;
    }    
    
}

```

* L'attribut de fonction `[Function("LeaderboardExample")]` définit le nom de la fonction, dans ce cas `LeaderboardExample`.
* La fonction est déclenchée par une requête HTTP, comme l'indique l'attribut `[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")]`. Cela signifie que la fonction est accessible au moyen des méthodes HTTP GET et POST sans aucune authentification.
* Dans la fonction, nous définissons l'ID de titre PlayFab et la clé secrète de développeur pour authentifier nos requêtes auprès des services PlayFab. Vous pouvez modifier la façon d'accéder à ces valeurs selon ce qui convient le mieux à votre cas particulier et à vos exigences de sécurité.
* La fonction vérifie si le paramètre de requête « leaderboardName » est fourni dans la requête.
* Ensuite, nous appelons la méthode `LoginAsTitleEntity` pour nous authentifier en tant qu'entité de titre, ce qui est nécessaire pour créer des définitions de classement.
* Enfin, nous appelons la méthode `CreateLeaderboardDefinitionAsync` pour créer une définition de classement avec le nom fourni. Pour en savoir plus sur la création de classements, vous pouvez consulter [Créer un classement de base](/fr-CA/services/playfab/community/leaderboards/create-basic-leaderboard) et [Aller plus loin avec les classements](/fr-CA/services/playfab/community/leaderboards/doing-more-with-leaderboards).

La méthode RunAsync sert de point d'entrée pour votre fonction Azure. À partir de là, vous pouvez définir et appeler des méthodes supplémentaires pour élaborer votre logique de jeu personnalisée. La façon dont vous gérez les erreurs ou interagissez avec plusieurs services PlayFab dépend entièrement de vous, ce qui vous offre une flexibilité totale dans votre implémentation.

De plus, vous pouvez configurer des règles d'automatisation pour déclencher cette fonction Azure en fonction d'événements précis. Pour plus de détails, consultez [cette page](/fr-CA/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/quickstart).

## Voir aussi

* [Aller plus loin avec les classements](/fr-CA/services/playfab/community/leaderboards/doing-more-with-leaderboards).
* [Créer un classement de base](/fr-CA/services/playfab/community/leaderboards/create-basic-leaderboard).
* [Niveaux manuels](/fr-CA/services/playfab/community/leaderboards/manual-tiers).
* [Limites](/fr-CA/services/playfab/community/leaderboards/limits-leaderboards).
* [Quota](/fr-CA/services/playfab/community/leaderboards/quota-leaderboards).
* [Classements saisonniers](/fr-CA/services/playfab/community/leaderboards/seasonal-leaderboards).
* [Classer les joueurs selon les statistiques](/fr-CA/services/playfab/community/leaderboards/leaderboards-linked-to-stats).
* [Ajouter des données contextuelles aux classements](/fr-CA/services/playfab/community/leaderboards/metadata-leaderboards).
* [Classements avec PlayStream](/fr-CA/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry).
* [Référence de l'API](/fr-CA/services/playfab/community/leaderboards/api-reference).


## Related topics

- [Déboguer CloudScript avec Azure Functions dans le portail Azure](/fr-CA/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/debugging-with-CloudScript-AF-Azure.md)
- [Débogage local de CloudScript avec Azure Functions](/fr-CA/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/local-debugging-for-cloudscript-using-azure-functions.md)
- [PlayFab CloudScript avec Azure Functions](/fr-CA/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/index.md)
- [Déboguer CloudScript avec Azure Functions dans Visual Studio](/fr-CA/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/debugging-with-CloudScript-AF-VS.md)
- [Déboguer CloudScript avec Azure Functions dans Visual Studio Code](/fr-CA/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/debugging-with-CloudScript-AF-VSCode.md)
