Je sais, c'est bien prévu d'utiliser les pointeurs intelligents mais j'ai pas encore réussi à prendre le temps de fouiller à fond la dessus.
La requête peut être rejouée autant de fois que nécessaire. Du coup je pense que c'est à l'utilisateur du client de la supprimer.
Lorsqu'on fait du REST, les en-têtes doivent être manipulées autant que le contenu. Sinon on est tenté de mettre ce qui doit normalement aller dans les en-têtes dans les arguments de l'URL ou dans le corps de la requête.Citation:
- ton système est hybride entre une couche bas niveau (transport) et une couche service. Quel est le sens, dans une requête publish, de tripatouiller les en-têtes ? Personnellement, j’empilerai trois couches (parce que c’est comme ça que ça se passe dans la vraie vie) :
- une première couche purement HTTP. En fait, pour celle-ci il est probable que tu aies déjà une librairie pour ça.
- une deuxième couche qui s’occupe uniquement du json, et qui utilise la première.
- une troisième couche applicative, qui mappe les services exposés par ton json.
La couche 1 c'est HTTPRequest. La classe se charge d'accepter comme paramètres une URL, un contenu et des en-têtes.
La couche 2 c'est le client, qui se charge de mettre en forme l'entrée de l'utilisateur (dans le cas de publish justement) et de mettre en forme la sortie (ce que j'espère faire avec des signaux).
La couche 3 c'est l'utilisateur qui doit être à même de soumettre ses données sous forme structurée et d'accéder à d'autres en provenance du serveur suivant la même structure.
Si mes méthodes de client (donc entre la couche 2 & 3) proposent de modifier les en-têtes, c'est surtout à cause de l'extension potentielle.
Le client tel qu'il est là est finalement bête et méchant et ne prend en charge aucune règle ni structure particulière. D'autres classes sont sensées l'étendre pour y ajouter du métier. Du coup je ne réinvente pas la roue à chaque fois et fais régulièrement appel au niveau supérieur de ma hiérarchie de classe en proposant de nouvelles en-têtes.
A noter également que ces classes découlant de HTPPClient ne proposent pas ces arguments. Je devrait peut-être rendre HTTPClient privé pour éviter son instanciation mais je me dit que j'aurais peut-être un jour besoin d'un client "bête et méchant".
Justement et c'est bien mon but.Citation:
À chacune de ces couches, il y a des signaux émis, et des handlers exécutés. Chaque handler va à son tour émettre un nouveau signal qui sera géré par la couche supérieure.
Au final, le client du service n’a même pas à savoir que le service est en http / json : ce n’est pas son soucis. Son soucis est que le service se conforme à l’interface.
Si je n'avais pas à transformer mon client HTTP en factory de HTTPRequest, l'utilisateur du client ne saurai pas du tout qu'il a à faire avec un service HTTP.
Normalement elles le sont déjà, suivant les explications ci-dessus.Citation:
Je ne suis pas sûr que ça réponde à ta question ;). Mais ça me semble plus sain de segmenter les responsabilités.
J'ai toujours autant de mal à positionner de manière convenable le traitement de retour de la requête dans mon client HTTP.
Devrais-je utiliser les slots ordonnés en plaçant un handler en 0, correspondant aux traitements de retour de la requête, déclaré dans la factory?
Après l'utilisateur déclare les siens en 1, 2... à l'extérieur de la factory mais ça me semble fort bancal car je ne vois rien pour forcer la déclaration des handlers utilisateur en 1, 2... Comment être alors sur que l'utilisateur accède à des données post-traitées plutôt qu'aux données brutes issues de la requête?
Merci pour ton aide, cette discussion est fort enrichissante.