Pontos de extremidade não idempotentes
Os métodos HTTP que têm efeitos colaterais quando chamados repetidamente são considerados não idempotentes. Isso significa que, se um cliente chamar o ponto de extremidade e ocorrer um tempo limite de rede, não será seguro repetir o método, porque o recurso pode ter sido atualizado sem que a rede conseguisse notificar o chamador de que a operação foi bem-sucedida. Em caso de erro, em vez de repetir, o cliente precisa primeiro consultar se a chamada foi bem-sucedida. Somente se a chamada não tiver sido bem-sucedida ele deverá repeti-la. Na XBOX Services API, algumas APIs são marcadas internamente como chamadoras de pontos de extremidade não idempotentes. Isso significa que, se ocorrerem falhas ao chamar esses pontos de extremidade, as APIs não repetirão automaticamente a chamada ao ponto de extremidade. A lista completa de APIs não idempotentes é:- XblMatchmakingCreateMatchTicketAsync
- XblMultiplayerWriteSessionAsync
- XblMultiplayerWriteSessionByHandleAsync
- XblMultiplayerSendInvitesAsync
- XblSocialSubmitReputationFeedbackAsync
- XblSocialSubmitBatchReputationFeedbackAsync
Métodos idempotentes
Os métodos HTTP idempotentes, por outro lado, não deixam efeitos colaterais. Isso, por sua vez, significa que é seguro repeti-los. Na XBOX Services API, todos os métodos idempotentes são repetidos automaticamente sob determinadas condições. A lista completa de APIs idempotentes inclui todas as APIs que não foram listadas acima como não idempotentes.Práticas recomendadas de lógica de repetição
Para chamadas idempotentes, estas condições devem ser repetidas automaticamente:- Todos os erros de rede
- 401: Unauthorized
- 408: RequestTimeout
- 429: Too Many Requests
- 500: InternalError
- 502: BadGateway
- 503: ServiceUnavailable
- 504: GatewayTimeout
Ajuste dinâmico do tempo limite HTTP interno
A XSAPI ajusta dinamicamente o tempo limite HTTP interno com base no tempo restante em XblContextSettingsGetHttpTimeoutWindow. O tempo limite HTTP interno controla quanto tempo o SO gasta executando a operação de rede HTTP antes de abortá-la. A chamada não será repetida a menos que restem pelo menos 5 segundos em XblContextSettingsGetHttpTimeoutWindow, para dar tempo razoável para a chamada ser concluída. Essa regra não se aplica à primeira chamada; portanto, definir XblContextSettingsSetHttpTimeoutWindow como 0 é aceitável e resultará em uma única chamada. Essa lógica faz com que XblContextSettingsGetHttpTimeoutWindow seja mais determinística quanto ao momento em que a chamada à API retornará. Se um cabeçalho “Retry-After” for retornado, nenhuma repetição será feita até que o tempo de “Retry-After” seja atingido. Se o tempo de “Retry-After” for posterior a XblContextSettingsGetHttpTimeoutWindow, a chamada retornará ao final de XblContextSettingsGetHttpTimeoutWindow.Tratamento de erros
Os desenvolvedores de títulos devem sempre usar o tratamento de erros adequado para todas as chamadas de serviço; eles precisam garantir que estão tratando corretamente as respostas de falha. Há muitas condições do mundo real que podem fazer com que uma requisição aos serviços do XBOX retorne códigos de falha, como:- A rede não está disponível. Por exemplo, o dispositivo perdeu o 4G, perdeu o Wi-Fi ou a rede caiu.
- Carga excessiva nos serviços (503).
- Ocorreu uma falha no serviço (500).
- Foram enviadas requisições demais ao serviço (429).
- Conflito de operação de gravação (412). Por exemplo, outro jogador em uma sessão multiplayer enviou uma alteração primeiro.
- O usuário foi banido ou não tem permissão.
- O usuário saiu.
Melhores padrões de chamada
Use requisições em lote
Alguns pontos de extremidade oferecem suporte ao envio em lote ou à agregação de um conjunto de requisições em uma única chamada. Por exemplo, com o serviço de perfil dos serviços do XBOX, você pode solicitar o perfil de um único usuário ou os perfis de um conjunto de usuários. Portanto, se você precisar dos perfis de um conjunto de usuários, seria muito ineficiente chamar o ponto de extremidade ou a API um de cada vez para cada perfil de usuário. Cada chamada adiciona muita sobrecarga de autenticação. Em vez disso, passe todos os usuários sobre os quais você deseja informações de uma só vez para a API, para que o ponto de extremidade possa processar todos os perfis de usuário ao mesmo tempo e retornar uma única resposta.Use o serviço Real-Time Activity (RTA) em vez de sondagem
Uma prática recomendada é usar o serviço Real-Time Activity (RTA) em vez de sondagens periódicas. O serviço Real-Time Activity expõe um web socket que envia uma notificação aos clientes quando os recursos de destino mudam no serviço. O serviço RTA envia notificações sobre alterações de presença, alterações de estatísticas, alterações em documentos de sessão multiplayer e alterações de relacionamentos sociais. Para saber em quais informações o cliente está interessado, o cliente precisa primeiro assinar o item pelo web socket. Isso evita sondar o serviço para detectar alterações, pois você será informado exatamente quando o item mudar. A XSAPI expõe o serviço RTA como um conjunto de APIs de assinatura que os clientes podem usar. Cada uma dessas APIs tem APIs*ChangedHandler correspondentes, que recebem uma função de callback que será chamada quando um item mudar.
- XblPresenceSubscribeToDevicePresenceChange
- XblPresenceSubscribeToTitlePresenceChange
- XblUserStatisticsSubscribeToStatisticChange
- XblSocialSubscribeToSocialRelationshipChange
Use os gerenciadores do lado do cliente da XSAPI
A XSAPI tem um conjunto de gerenciadores que atuam como cache e máquinas de estado e que fazem todo o trabalho pesado em determinados cenários.Social Manager
O Social Manager faz todo o trabalho pesado relacionado às listas de amigos e aos perfis. O Social Manager mantém sua lista de amigos, os perfis deles e os dados de presença atualizados usando o serviço RTA. O Social Manager expõe uma API síncrona muito amigável para mecanismos de jogo. Os jogos podem chamar as APIs do Social Manager com frequência, porque o Social Manager mantém um cache em memória das informações mais recentes do serviço. Consulte Social Manager.Multiplayer Manager
Para o gerenciamento de sessões multiplayer, o Multiplayer Manager é uma solução pronta para jogos multiplayer tradicionais. A API do Multiplayer Manager inclui gerenciamento de lista de jogadores e de sessões, trata convites de jogo, entrada em partidas em andamento e matchmaking e se conecta à sua solução de rede existente. Ela faz todo o trabalho pesado relacionado à implementação de fluxos multiplayer tradicionais. Consulte Multiplayer Manager.Limitação (limitação de taxa refinada)
Os serviços do XBOX têm limitação de taxa para impedir que um único dispositivo coloque uma carga extrema no serviço. É importante saber quando seu título foi limitado. Para determinar se o seu título foi limitado, use qualquer uma destas abordagens:- Monitorar o código de status HTTP 429
- Usar asserções de depuração
- Usar a ferramenta Trace Analyzer dos serviços do XBOX
