Points de terminaison non idempotents
Les méthodes HTTP qui ont des effets secondaires en cas d’appels répétés sont considérées comme non idempotentes. Cela signifie que si un client appelle le point de terminaison et qu’un délai d’expiration réseau se produit, il n’est pas sûr de réessayer la méthode, car la ressource a peut-être été mise à jour sans que le réseau ait pu informer l’appelant de la réussite. En cas d’erreur, au lieu de réessayer, le client doit d’abord vérifier si l’appel a réussi. Il ne doit réessayer que si l’appel a échoué. Dans l’API des services XBOX, certaines API sont marquées en interne comme appelant des points de terminaison non idempotents. Cela signifie que si des échecs se produisent lors de l’appel de ces points de terminaison, les API ne réessaient pas automatiquement. La liste complète des API non idempotentes est la suivante :- XblMatchmakingCreateMatchTicketAsync
- XblMultiplayerWriteSessionAsync
- XblMultiplayerWriteSessionByHandleAsync
- XblMultiplayerSendInvitesAsync
- XblSocialSubmitReputationFeedbackAsync
- XblSocialSubmitBatchReputationFeedbackAsync
Méthodes idempotentes
Les méthodes HTTP idempotentes, en revanche, n’ont pas d’effets secondaires. Elles peuvent donc être réessayées sans risque. Dans l’API des services XBOX, toutes les méthodes idempotentes sont automatiquement réessayées dans certaines conditions. La liste complète des API idempotentes comprend toutes les API qui ne figurent pas dans la liste des API non idempotentes ci-dessus.Bonnes pratiques de logique de nouvelle tentative
Pour les appels idempotents, les conditions suivantes doivent entraîner une nouvelle tentative automatique :- Toutes les erreurs réseau
- 401: Unauthorized
- 408: RequestTimeout
- 429: Too Many Requests
- 500: InternalError
- 502: BadGateway
- 503: ServiceUnavailable
- 504: GatewayTimeout
Ajustement dynamique du délai d’expiration HTTP interne
XSAPI ajuste dynamiquement le délai d’expiration HTTP interne en fonction du temps restant dans XblContextSettingsGetHttpTimeoutWindow. Le délai d’expiration HTTP interne détermine combien de temps le système d’exploitation consacre à l’opération réseau HTTP avant de l’abandonner. L’appel n’est réessayé que s’il reste au moins 5 secondes dans XblContextSettingsGetHttpTimeoutWindow, afin de laisser un délai raisonnable pour que l’appel se termine. Cette règle ne s’applique pas au premier appel ; il est donc acceptable de définir XblContextSettingsSetHttpTimeoutWindow sur 0, ce qui entraîne un seul appel. Grâce à cette logique, XblContextSettingsGetHttpTimeoutWindow est plus déterministe quant au moment où l’appel d’API rend la main. Si un en-tête « Retry-After » a été renvoyé, aucune nouvelle tentative n’est effectuée avant que l’heure « Retry-After » soit atteinte. Si l’heure « Retry-After » est postérieure à XblContextSettingsGetHttpTimeoutWindow, l’appel rend la main à la fin de XblContextSettingsGetHttpTimeoutWindow.Gestion des erreurs
Les développeurs de titres doivent toujours mettre en place une gestion des erreurs appropriée pour chaque appel de service et s’assurer qu’ils gèrent correctement les réponses d’échec. De nombreuses conditions réelles peuvent faire qu’une requête aux services XBOX renvoie des codes d’échec, par exemple :- Le réseau n’est pas disponible. Par exemple, l’appareil a perdu la 4G ou le Wi-Fi, ou le réseau est tombé en panne.
- Les services subissent une charge trop importante (503).
- Une défaillance s’est produite sur le service (500).
- Trop de requêtes ont été envoyées au service (429).
- Conflit d’opération d’écriture (412). Par exemple, un autre joueur d’une session multijoueur a soumis une modification en premier.
- L’utilisateur a été banni ou n’a pas l’autorisation.
- L’utilisateur s’est déconnecté.
Meilleurs modèles d’appel
Utiliser des requêtes groupées
Certains points de terminaison prennent en charge le regroupement ou l’agrégation d’un ensemble de requêtes en un seul appel. Par exemple, avec le service de profil des services XBOX, vous pouvez demander le profil d’un seul utilisateur ou ceux d’un ensemble d’utilisateurs. Ainsi, si vous avez besoin des profils d’un ensemble d’utilisateurs, il serait très inefficace d’appeler le point de terminaison ou l’API un par un pour chaque profil utilisateur. Chaque appel ajoute une surcharge d’authentification importante. Transmettez plutôt à l’API tous les utilisateurs pour lesquels vous souhaitez obtenir des informations en une seule fois, afin que le point de terminaison puisse traiter tous les profils utilisateur simultanément et renvoyer une seule réponse.Utiliser le service Real-Time Activity (RTA) au lieu de l’interrogation
La bonne pratique consiste à utiliser le service Real-Time Activity (RTA) au lieu d’une interrogation périodique. Le service Real-Time Activity expose un WebSocket qui envoie une notification aux clients lorsque des ressources ciblées changent sur le service. Le service RTA fournit des notifications sur les changements de présence, les changements de statistiques, les modifications de documents de session multijoueur et les changements de relations sociales. Pour indiquer les informations qui l’intéressent, le client doit d’abord s’abonner à l’élément via le WebSocket. Cela évite d’interroger le service pour détecter les changements, puisque vous serez informé précisément du moment où l’élément change. XSAPI expose le service RTA sous la forme d’un ensemble d’API d’abonnement que les clients peuvent utiliser. Chacune de ces API dispose d’API*ChangedHandler correspondantes, qui acceptent une fonction de rappel appelée lorsqu’un élément change.
- XblPresenceSubscribeToDevicePresenceChange
- XblPresenceSubscribeToTitlePresenceChange
- XblUserStatisticsSubscribeToStatisticChange
- XblSocialSubscribeToSocialRelationshipChange
Utiliser les gestionnaires côté client de XSAPI
XSAPI dispose d’un ensemble de gestionnaires qui font office de cache et de machines à états et qui se chargent de tout le travail complexe pour certains scénarios.Social Manager
Social Manager se charge de tout le travail complexe lié aux listes d’amis et aux profils. Social Manager maintient à jour votre liste d’amis, leurs profils et leurs données de présence à l’aide du service RTA. Social Manager expose une API synchrone très bien adaptée aux moteurs de jeu. Les jeux peuvent appeler fréquemment les API de Social Manager, car celui-ci conserve en mémoire un cache des informations les plus récentes du service. Consultez Social Manager.Multiplayer Manager
Pour la gestion des sessions multijoueur, Multiplayer Manager est une solution prête à l’emploi pour les jeux multijoueur traditionnels. L’API Multiplayer Manager comprend la gestion de la liste des joueurs et des sessions, gère les invitations de jeu, la jonction en cours de partie et le matchmaking, et s’intègre à votre solution de mise en réseau existante. Elle se charge de tout le travail complexe lié à l’implémentation des flux multijoueur traditionnels. Consultez Multiplayer Manager.Limitation (limitation précise du débit)
Les services XBOX appliquent une limitation pour empêcher un appareil de soumettre le service à une charge extrême. Il est important de savoir quand votre titre a été limité. Pour déterminer si votre titre a été limité, utilisez l’une des approches suivantes :- Surveiller le code d’état HTTP 429
- Utiliser des assertions de débogage
- Utiliser l’outil XBOX services Trace Analyzer
