Requêtes GraphQL à WotWizard

La requête d’introspection du schéma ne fonctionne pas. Du coup, pas de doc, et du coup pas d’autocompletion dans graphiQL…

Est-ce que tu as du nouveau là dessus ? Si on commence à avoir des utilisateurs de l’API GraphQL de WotWizard, il faudrait faire en sorte d’avoir toujours un nœud actif, parce que là ça commence à faire un downtime conséquent. Par ailleurs, la configuration nginx attend que wwServer écoute sur le port 8080, il faut faire attention à conserver ça.

En tout cas, en ce moment, même https://duniter.coinduf.eu/ est down.

Les choses ont été compliquées. WW redémarre bientôt.

Voilà, c’est fait.

Le problème principal avec WW est que la version 1.7.21 de Duniter nécessaire pour le faire tourner fait régulièrement des forks. Là, les trois nœuds que je gère se sont désynchronisés en même temps et j’avais en plus des problèmes de connexion avec les nœuds sources pour resynchroniser. Plus des problèmes persos… Bref, galère totale. Désolé.

2 « J'aime »

Il y a des infos ici: https://www.howtographql.com/ et ici https://graphql.org/learn/

À voir, j’avoue que j’aurais aimé juste réussir à faire des requêtes sans lire la doc! (même si c’est « pas bien » ,o)

3 « J'aime »

Je viens de corriger un bug concernant l’utilisation de __typename (pour ceux qui aurait eu un problème avec cette dernière).

Exemple :

query Search($hint: String) {
  idSearch(with: {hint: $hint}) {
    ids {
      pubkey
      uid
      status
      __typename
    }
    __typename
  }
}

avec « Query Variables » :

{
  "hint":
    "hypericum"
}

donne :

{
  "data": {
    "idSearch": {
      "ids": [
        {
          "pubkey": "FueWuNacjH3J2AFsj5gwezgrJMUPeNZUn77YrGK8uepF",
          "uid": "hypericum",
          "status": "MEMBER",
          "__typename": "Identity"
        }
      ],
      "__typename": "IdSearchOutput"
    }
  }
}

@hypericum c’est sûrement pendant cette mise à jour que tu as essayé et que ça ne marchait pas.

En fait, j’ai vu passer dans le log ce qu’il faisait et c’est ce qui m’a mis sur la piste du bug.

1 « J'aime »

J’espère que ça va, parce qu’en ce moment j’essaie plein de possibilités même absurdes

1 « J'aime »

Est-ce qu’il y a une raison pour la différence entre ces deux lignes ?

received_certifications: Received_Certifications!
sent_certifications: [Certification!]!

Et sinon, il y a un nouveau client : Wotwizard UI
On va essayer de montrer une preview rapidement.

1 « J'aime »

Oui, il y a un champ de plus dans « Received_Certifications » : « limit ».

1 « J'aime »

J’ai du mal à comprendre quels champs il faut mettre.

centrality marche tout seul

mais quality doit s’écrire:

quality {
ratio
}

1 « J'aime »

centrality: Float!

quality: Fraction!

et

"Fraction"
type Fraction {
	
	"Numerator"
	num: Int!
	
	"Denominator"
	denom: Int!
	
	"Value of 'num' / 'denom'"
	ratio: Float!

}

en gros les types de base (Int, Float, String…) sont accessibles immédiatement, mais les types composites définis par wotwizard (Fraction, Identity, Certification…) doivent être déstructurés jusqu’à arriver à des types de base.

1 « J'aime »

Ok, merci!

Mais du coup, on peut mettre plein de commentaires au typesystem? Qui agit un peu comme un executable qui a sa syntaxe?

J’avoue que j’ai du mal à voir quels champs mettre pour certains, comme memEnds

Il y a une sorte d’arborescence des questions qu’on peut poser, est-ce que ça s’explique en commentaires?

1 « J'aime »

Il y a en effet une arborescence de question à poser et on ne peut pas s’arrêter avant d’atteindre un type de primitif. Mais attention, certaines requêtes ("Query") prennent des paramètres (à ne pas confondre avec les champs des types).

Aujourd’hui j’ai travaillé dessus, et j’ai écrit une requête qui fait quasiment tout ce dont j’ai besoin:

{
  idSearch(with: {hint: "Jerome55"}) {
    ids {
       uid
       pubkey
       status
       sentry
       minDate
       limitDate
       quality {
       ratio
    }
       received_certifications {
        limit
        certifications {
          from {
            uid
          }
          expires_on
        }
      }
       all_certifiers
    {uid
     pubkey
     status
     sentry
     minDate
     limitDate
     quality {
      ratio
    } 
     received_certifications {
        limit
        certifications {
          from {
            uid
          }
          expires_on
        }
      }
     
    }
      all_certified
    {uid
     pubkey
     status
     sentry
     minDate
     limitDate
     quality {
ratio
}
    received_certifications {
        limit
        certifications {
          from {
            uid
          }
          expires_on
        }
      }
    }
    }
  }
} 


{
  idSearch {
    ids {
      uid
      hash
      status
    }
  }
}

Les dates apparaissent pas « en clair ».
En fait « juste » une mise en forme de ça avec des liens déroulants et des couleurs (genre jaune ça va bientôt plus être bon mais ça va orange c’est bientôt plus bon, rouge c’est plus bon, vert c’est bon) serait top!

Je n’ai pas réussi à trouver un moyen simple de voir les limites de certifications comme dans wot-wizard, la catégorie « Identity » de TypeSystem donne une limite d’adhésion (limitDate), mais pas de certification (ou j’ai pas vu!).

(edit: je viens de trouver quelque chose, « limit » sous la catégorie « received certifications »)

J’ai vraiment galéré à mettre ça sous curl, donc mon script n’a pas avancé et j’ai à la place une requête avec presque tout ce dont faisait mon script avant (et même un peu plus!)

4 « J'aime »

Fallait demander :grinning:.

Je veux bien savoir comment on met une date « humaine » dans la requête.

Belle requête ! Bravo :slight_smile: Je m’en servirais bien pour faire une première vue dans Wotwizard-ui et m’entraîner à graphQL. Si je comprends bien, elle récupère les certifications d’un membre sur deux niveaux ?

Tu peux la formatter par programmation ensuite.

EDIT : Sinon, je viens de tomber sur cet exemple : The GraphQL query showing how to format a date! · GitHub