Récupérer plusieurs profils Cesium+ en une seule requête HTTP

Bonjour,

Pour générer un nuage des noms des donateurs, je veux récupérer leurs noms tels que renseignés dans Cesium+.

L’ennui c’est que j’ai 15 secondes de temps de chargement, et je pense que c’est dû au fait que je dois faire une requête HTTP par profil.

Typiquement, j’appelle ce genre d’url

http://g1.data.duniter.fr/user/profile/JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn

Quand il y en a 87, ça commence à faire beaucoup de requêtes (87 du coup).

Est-ce qu’il y a un moyen de récupérer plusieurs profils Cesium+ en une seule requête ?

CC: @kimamila, @Paidge, @ManUtopiK

Merci d’avance :slight_smile:

Bien sûr :slight_smile:

Tu peux même :

Alors, heureux ? :slight_smile:

Du coup, tu peux meme récupérer uniquement les infos intéressantes dans ton cas :
/user/profile/_search?q=<REQUETE>&_source=issuer,title et hop !

1 J'aime

Ok, merci :slight_smile:

Je mets des « + » entre les clefs publiques et ça a effectivement l’air de me retourner ce dont j’ai besoin :

http://g1.data.duniter.fr/user/profile/_search?q=JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn+BCnd895BnYZZmrVR22y5qUfbZ2FXEZDTrcer4JRNAFsd&_source=issuer,title

EDIT : ah, non, apparemment c’est comme avec des
/user/profile/_search?q=issuer:{clef1}%20OR%20issuer:{clef2}

qu’il faut que je fasse, si je veux que ce soit propre.

Ce qui donne :

http://g1.data.duniter.fr/user/profile/_search?q=issuer:JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn%20OR%20issuer:BCnd895BnYZZmrVR22y5qUfbZ2FXEZDTrcer4JRNAFsd&_source=issuer,title

A un certain moment, tu ne pourras plus ajouter d’informations dans l’url. Et puis tout mettre dans l’url, c’est mal, bouh, pas beau. :face_vomiting:

Pour une requête plus complexe ou avec beaucoup d’informations de filtrage, tu devras préparer ta requête ElasticSearch et l’envoyer en POST dans le body.

Hope it helps…

1 J'aime

À quel moment ?

Au moment où le navigateur va tronquer ton url, ou bien le serveur te renvoyer l’erreur 414 (Request-URI Too Long).

Accessoirement, c’est aussi une question de vie privée/sécurité, puisque tes url sont log-guées, les informations que tu y mets sont exposées. Si tu les mets en body d’un POST, elle ne sont pas log-guées, et reste uniquement visible de ceux qui interceptent la requête.

1 J'aime

Je mets l’URL dans un file_get_contents, risque-je de rencontrer le problème aussi dans ce cas ?

Oui, l’url est exposée, donc c’est cramé.

Pour être propre et pouvoir ajouter plein de profils en une seule requête, il faut que tu utilises POST et que tu mettes ça dans le body :

    {
      "query": {
        "bool": {
          "should": [
                      { "match": { "issuer": "JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn" }},
                      { "match": { "issuer": "nd895BnYZZmrVR22y5qUfbZ2FXEZDTrcer4JRNAFsd"   }}
          ]
        }
      },
      "_source": "issuer,title"
    }

Voir https://www.elastic.co/guide/en/elasticsearch/guide/current/bool-query.html

D’abord tu testes ta requête dans un client d’API REST, comme le module Rested de Firefox ( mode custom pour le body).

Quand c’est bon, tu crées le body en php (un tableau que tu convertis en string json). Puis tu balance en POST, voir le commentaire https://www.php.net/manual/fr/function.file-get-contents.php#102575

2 J'aimes

Exposée à qui ?

Ne sont-ce pas que des infos qui transitent uniquement entre le serveur PHP qui fait tourner le script et le serveur depuis lequel je récupère les données ?

Et, quand bien même elles seraient visibles de tout un chacun, en quoi est-ce que ça peut poser problème dans mon cas d’usage, qui est d’afficher un nuage des noms des donateurs ? D’ailleurs, pour plus de transparence, je pourrais même effectivement aller jusqu’à afficher les clefs publiques correspondantes au survol du nom Cesium+ :slight_smile:

J’explique simplement quelles sont les bonnes pratiques quand on utilise le protocole HTTP. C’est en oubliant celles-ci qu’on finit par mettre des mots de passe dans les urls. D’ailleurs il y a même des puristes qui déconseillent de mettre l’id des clefs primaires des bases de données dans les urls (comme celle de discourse dans ta barre d’adresse), ils y voient une faille de sécurité.

Dans ton cas d’usage, la question ne se pose pas.

Par contre, si tu comptes ajouter plusieurs clés publiques dans ta recherche, la méthode que je te conseille te le permet sans limite, alors que la taille de l’url est limitée.

1 J'aime

Oui, bon, après, dans la version actuelle il y a moult failles XSS, alors on n’est plus à une faille de sécurité près haha :rofl:

La limite risque d’être plus embêtante en revanche ; merci pour l’info :slight_smile:

1 J'aime