> ## 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

> Didacticiel de création de classements PlayFab avec CloudScript Azure Functions, montrant comment envoyer des scores et interroger les classements à partir de code côté serveur.

Dans ce didacticiel, vous allez apprendre à implémenter des classements à l'aide de CloudScript, plus précisément via [Azure Functions](/fr/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 mise à 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 par la suite, vous pouvez mettre à jour la fonction Azure de manière indépendante, souvent sans modifier le client, selon la complexité de la mise à jour.

## Prérequis

Pour suivre ce didacticiel, vous avez besoin des éléments suivants :

* 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 d'envoyer 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, ici `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 via les méthodes HTTP GET et POST sans aucune authentification.
* Dans la fonction, nous définissons le Title ID PlayFab et la clé secrète de développeur afin d'authentifier nos requêtes auprès des services PlayFab. Vous pouvez modifier la façon dont vous accédez à 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.
* Nous appelons ensuite 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 portant le nom fourni. Pour en savoir plus sur la création de classements, consultez [Créer un classement de base](/fr/services/playfab/community/leaderboards/create-basic-leaderboard) et [Aller plus loin avec les classements](/fr/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 développer votre logique de jeu personnalisée. La manière 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.

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

## Voir aussi

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


## Related topics

- [Ajouter des services backend avec PlayFab](/fr/home/build-first-title/add-backend-services.md)
- [Ajouter des services dorsaux avec PlayFab](/fr-CA/home/build-first-title/add-backend-services.md)
- [PFLeaderboardsLeaderboardEntryUpdate](/fr/services/playfab/api-references/c/pfleaderboardstypes/structs/pfleaderboardsleaderboardentryupdate.md)
- [Exemples du GDK](/fr-CA/home/setup-install/samples.md)
- [XBOX Requirements pour les jeux XBOX](/fr/publishing/certification/xbox-requirements.md)
