Hello la communauté !

Actuellement, j'ai créé un service Endpoints en Python, sur mon serveur Google App Engine, qui permet par exemple de changer le nom d'un Joueur. S'il n'y a pas de problème, je retourne un MessageField avec tout plein de données.

Cependant, il arrive parfois qu'une requête soit correcte, mais qu'il y ait des "erreurs gérables par l'application cliente". Je voudrais donc informer le client qu'il y a une petite erreur, et de quelle genre elle est pour pouvoir la gérer. Par exemple, lui dire "Hey désolé mais ce nom est déjà pris !" ou encore "Hey désolé mais aujourd'hui, tu as trop souvent changé de nom !".

Le mécanisme d'exception avec par exemple les UnauthorizedException (et autre) permettent d'envoyer au client une réponse d'erreur... mais je ne peut pas vraiment le personnaliser en dehors d'un simple message. Si j'exécute par exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
raise endpoints.UnauthorizedException('Invalid user_id or auth_token !')
ça donnera un truc du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "required",
        "message": "Invalid user_id or auth_token !",
        "locationType": "header",
        "location": "Authorization"
      }
    ],
    "code": 401,
    "message": "Invalid user_id or auth_token !"
  }
}

Du coup, ça n'est pas top. Est-ce qu'il existe un moyen de réellement personnaliser et changer la structure de la réponse en cas d'exception soulevé ?
Ou sinon, est-ce qu'on peut retourner un MessageField d'un type différent ? (étant donné qu'on doit déclarer le type de retour dans le décorateur du service...)


Par exemple, je voudrais retourner un JSON :
(avec un code HTTP 200 ou 400 je ne sais pas, masi c'est surtout le JSON que je veux personnaliser)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
{
    "error": {
        "username_already_exist": 1
    }     
}

Thanks !