1

Un site affiche des ressources. L’utilisateur voit par défaut certaines d’entre elles (selon son profil), mais il peut demander explicitement à en afficher d’autres ou en cacher certaines.
Par exemple, si l’utilisateur demande à afficher les ressources 2 et 5 et à cacher les ressources 3 et 8, ça pourrait donner une URL du genre : http://www.lesite.com/lapage?show=2.5&hide=3.8
Mais dans le cas où les pages contiennent une centaine de ressources, j’ai peur que mes URL deviennent trop laides.

En fait la vérité c’est que j’ai vachement la flemme de fournir un site RestFull, je préférerais que les requêtes demandant d’afficher/cacher des ressources soient faites en AJAX, comme ça je ne me prends pas trop la tête avec les URLs.
Mais d’un autre côté c’est naze pour l’utilisateur de ne pas avoir d’interface RestFull, s’il veut bookmarker un lien il faut que ça lui permette de retrouver la même page.

Bon et l’idéal serait une interface AJAX et RestFull, il me semble que c’est possible mais je ne sais pas trop comment, vous savez ?

Ce qui m’embête avec cette histoire de RestFull, c’est que j’ai le sentiment que ça va drôlement ralentir la génération des URL au sein de la page (chaque URL qui permettra de sélectionner ou non une ressource devra être générée selon un calcul un peu coûteux (genre en O(n)).

Faut faire quoi ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

2

Petit masque de bits en hexa, genre "lapage?showmask=0000000000000012"?
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

Dans ce cas, il faudrait deux masques pour afficher ou cacher les entrées...
À moins qu'un seul puisse suffire pour inverser affiché et caché pour les entrées sélectionnées.
avatar

4

Kevin Kofler (./2) :
Petit masque de bits en hexa, genre "lapage?showmask=0000000000000012"?

pencil (mais autant ne pas se limiter à de l'hexadécimal tongue)

5

L'hexa a le mérite d'être facilement mappable au binaire et de prendre 4 fois moins de place.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

Pour faire une interface mixte, il faut que tu aies deux frontends qui appellent le même script au final. Le premier qui récupère des données GET et le second qui gère les appels Ajax. Ca se fait assez facilement (même une fois l'application réalisée, surtout si t'as une bonne séparation entre les appels, les traitements et les affichages).

(Et je suis assez d'accord avec Kevin... ça a aussi l'avantage non négligeable d'avoir plein d'outils de conversion, pour le jour où tu dois réaliser un correctif à l'arrache en ssh sans avoir de quoi faire de la conversion binaire/base 36)
avatar

7

Thepro (./3) :
Dans ce cas, il faudrait deux masques pour afficher ou cacher les entrées...À moins qu'un seul puisse suffire pour inverser affiché et caché pour les entrées sélectionnées.

Bah, dans ma logique, tout ce qui n'est pas affiché est caché. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

Kevin Kofler (./7) :
Bah, dans ma logique, tout ce qui n'est pas affiché est caché. smile.gif
Oui, bien évidemment. Mais Sasume indiquait que certaines valeurs sont cachées par défaut, et qu'on peut demander leur affichage. Avec ta méthode, il faut connaitre la liste de ces valeurs pour pouvoir faire la requête et avoir le bon résultat.

Il y a des méthodes qui permettent d'avoir l'affichage par défaut lorsque le masque (ou les masques, suivant la méthode) ne contien(nen)t que des zéros. smile
avatar

9

je comprends pas pourquoi on indique les ressources cachées, et les ressources affichées ??? indiquer juste les ressources affichées ca doit suffire non ? vu que les cachées sont les compléments des affichés.
Ancien pseudo : lolo

10

Bah, j'avais fait la même réflexion, mais cf. l'explication de Thepro.

Un masque XOR? smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

11

ben meme... l'état de départ, tu t'en moques apres. dès que tu fais un changement, tu l'oublies, et tu recodes la totalité de ce qui doit être affiché. car si entre temps, le masque par défaut change, l'url en favori ne voudra plus rien dire.

après, est-ce que l'ordre des ressources est défini ? ou pas ? car dans le premier cas, on peut juste les indiqué par leur numéro d'ordre, alors que dans l'autre cas c'est l'id unique qu'il faut utiliser.

dans le 1er cas, le codage est alors hyper simple : imaginons qu'on ai 8 ressources : de 1 à 8, si on veut la 2 et la 4, ca donne 00001010 en binaire => on converti en hexa et c tout. c vraiment tres simple et ca donne des urls assez courtes...
Ancien pseudo : lolo

12

Spipu (./11) :
ben meme... l'état de départ, tu t'en moques apres. dès que tu fais un changement, tu l'oublies, et tu recodes la totalité de ce qui doit être affiché. car si entre temps, le masque par défaut change, l'url en favori ne voudra plus rien dire.
L'état de départ, il faut bien l'avoir quand même. Alors, il y a deux solutions : soit tu fais une requête pour connaitre la liste des valeurs affichées par défaut (donc deux requêtes pour afficher la liste par défaut), soit tu utilises une autre méthode... Avec une XOR, par exemple, tu peux avoir un lien dans tes favoris vers l'affichage par défaut (même s'il change), ce que tu ne peux pas faire dans le premier cas. Tu peux aussi obtenir la liste par défaut si tu ne définis pas de masque, mais elle devra bien être quelque part pour construire les liens (dans la page ou reconstruite), mais c'est beaucoup moins souple.

Avec l'utilisation de deux masques, il est possible de forcer l'affichage ou le masquage de certaines entrées. Donc même si l'affichage par défaut change, le lien mènera vers une page dont la visibilité des valeurs que tu as définie sera la bonne.
avatar

13

Les ressources n’ont pas d’ordre, il faut donc que je code l’identifiant de chacune d’elle dans ma liste.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

14

Les identifiants sont-ils des entiers ? Si c'est le cas, jusqu'à quelle valeur peuvent-ils aller ?
avatar

15

Des milliers. neutral
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

16

Pour tout ensemble fini X, il existe |X|! bijections de X vers [1,|X|]∩ℤ dont chacune définit un ordre total, il suffit d'en choisir une.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

17

Tout mettre dans une url peut être gênant effectivement, la longueur max des url n'est pas définie dans la spec, donc ca dépend des browsers...
Pourquoi ne pas gérer ça avec un cookie ? Après ca régle pas de possible pb de perf, mais cf les idées ci dessus, ajax etc...

18

Si j'ai bien compris, il y a des milliers d'éléments et seules quelques centaines sont présentés à l'utilisateur.

Cette liste est-elle statique ? Dans quelles conditions des éléments peuvent-ils être ajoutés ou retirés ?
Lorsque la liste ne change pas, les éléments sont-ils ordonnés ? (Pour cette question, on pourrait de toute façon utiliser un ordonnancement arbitraire comme l'ordre alphabétique même s'il ne correspond pas à l'affichage...)

Les liens utilisés pour accéder à cette liste doivent-ils être toujours valides d'une session de consultation à une autre ? Si c'est le cas, qu'advient-il des entrées que tu as demandé à afficher ou à cacher lorsque celles-ci ne font plus partie de la liste ?
avatar

19

Je vais te decrire ce que dirait un puriste du REST. Puis je te donnerai ma suggestion personnelle.

Pour faire propre, ce qu'il te faut c'est une "ressource algorithmique". C'est un grand mot pour dire que ta requete va provoquer l'execution d'un algo plus ou moins decrit avec ta requete, qui permettra de chopper les elements a afficher ou cacher.

Exemple 1:
Tu peux dire que les traits veulent dire from/to genre
"&showalgo=1-8,34-39"
<=> "afficher les elements de 1 a 8, et de 34 a 39".

Exemple 2:
&showalgo=x%252forxin[5,60]
<=> afficher un element sur 2 parmis les elements de 5 a 60

Bilan:
L'exemple 1 ne te convient pas parce que tu peux avoir encore beaucoup d'elements, il te faut un "interpreteur" plus poussé comme l'exemple 2. L'exemple 2 est trop compliqué. Il te faut coder un mini interpreteur. Tout ca pour compresser un peu les données que tu veux passer en parametre.

Dans l'absolu, en rest, tu devrais etre stateless donc tu ne devrais pas dire ce que tu veux cacher puisque le serveur ne devrait avoir aucun moyen de savoir ce qui est affiché par defaut. Et dans l'absolu tu pourrais utiliser la methode des id separes par des virgules et demander a l'utilisateur de faire plusieurs fois la requete si l'url est trop grand pour son client.

Dans la pratique je te conseille d'avoir ce que dit ./6 ,cad une interface GET pour etre restful (ca peut te servir dans le futur) et une interface POST pour etre pragmatique et faire tes appels ajax dessus avec un parametre aussi grand que tu veux.
Tout ce qui passe pas par le port 80, c'est de la triche.