# Besoin d'aide : playground GraphQL

**URL:** https://forum.duniter.org/t/besoin-daide-playground-graphql/8083
**Category:** API
**Tags:** wotwizard, graphql
**Created:** [18 February 2021 23:34 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083 "2021-02-18T23:34:23Z")
**Posts on this page:** 15
**Page:** 1

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [18 February 2021 23:34 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/1 "2021-02-18T23:34:23Z")

</div>

@gerard94 m’a aidé à mettre en place un deuxième nœud WotWizard. Le serveur html classique (wwClient) est disponible à l’adresse : **[https://wotwizard.coinduf.eu/](https://wotwizard.coinduf.eu/)**

Il effectue des requêtes GraphQL en local au serveur WotWizard (wwServer). L’objectif est de construire un client qui effectue directement des requêtes GraphQL auprès du serveur, je l’ai donc rendu accessible à l’adresse : [https://wwgql.coinduf.eu/](https://wwgql.coinduf.eu/).

Ce serveur fonctionne bien, on peut par exemple faire une requête avec l’extension [RESTer](https://addons.mozilla.org/fr/firefox/addon/rester/). La requête suivante :

- Type → POST
- En-tête → Content-Type : application/x-www-form-urlencoded
- Body → graphQL={version} (format formulaire)

retourne bien

```json
{
    "data": {
        "version": "5.1.3"
    }
}

```

J’ai ensuite essayé de mettre en place un [playground GraphQL](https://github.com/graphql/graphql-playground) comme [l’a fait](https://g1.elo.tf/gva) @elois afin de faciliter le développement d’un client. Il est disponible à l’adresse [https://ww2.coinduf.eu/](https://ww2.coinduf.eu/), mais je n’arrive pas à le configurer.

Par défaut, il envoie une requête au format json :

```json
{"operationName":null,"variables":{},"query":""}

```

plutôt qu’un formulaire au format `x-www-form-urlencoded`. Je ne trouve pas comment faire dans leur doc, est-ce que quelqu’un a plus d’expérience avec cet outil ou de meilleures compétences de bidouille que moi ? @poka, comme ça ce sera plus pratique si on veut faire des requêtes GraphQL à WotWizard dans Ğecko 🦎

---

<div class="post-metadata">

### Author: ![poka](https://forum.duniter.org/user_avatar/forum.duniter.org/poka/32/6827_2.png) [@poka](https://forum.duniter.org/u/poka)
#### Post date: [19 February 2021 00:57 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/2 "2021-02-19T00:57:35Z")

</div>

J’ai jamais installé grapql-playground, mais je peux essayé. Sinon Elois maitrise 😉

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [19 February 2021 03:13 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/3 "2021-02-19T03:13:12Z")

</div>

> [@poka](#):
>
> Sinon Elois maitrise

Non je ne maîtrise pas, c’est la crate [async\_graphql](https://github.com/async-graphql/async-graphql) qui fourni le playground clé en main 🙂

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [19 February 2021 18:01 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/4 "2021-02-19T18:01:58Z")

</div>

> [@HugoTrentesaux](#):
>
> Par défaut, il envoie une requête au format json :
> 
> ```auto
> {"operationName":null,"variables":{},"query":""}
> 
> ```
> 
> plutôt qu’un formulaire au format `x-www-form-urlencoded`.

J’avais pas lu ton post dsl. En fait c’est normal, c’est conforme aux specifications GraphQL. Le serveur wotwizard doit supporter ce format sinon il n’est pas conforme.

> [@HugoTrentesaux](#):
>
> Ce serveur fonctionne bien, on peut par exemple faire une requête avec l’extension [RESTer](https://addons.mozilla.org/fr/firefox/addon/rester/). La requête suivante :
> 
> - Type → POST
> - En-tête → Content-Type : application/x-www-form-urlencoded
> - Body → graphQL={version} (format forumulaire)

Ben en fait non. Tu fais du REST là et pas du GraphQL, c’est le serveur qui ne respecte pas les standard 😛

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [19 February 2021 18:17 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/5 "2021-02-19T18:17:22Z")

</div>

> [@elois](#):
>
> Le serveur wotwizard doit supporter ce format sinon il n’est pas conforme.

> [@elois](#):
>
> c’est le serveur qui ne respecte pas les standard 😛

@gerard94 ça confirme ce que je pensais : il y a un standard et nous sommes en dehors ! Ce serait bien de changer ça dans la prochaine version de WotWizard. Il faut changer wwServer, wwClient, la doc, et les clients que j’ai commencé à écrire 🧙

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [19 February 2021 20:07 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/6 "2021-02-19T20:07:24Z")

</div>

> [@elois](#):
>
> c’est conforme aux specifications GraphQL

Peux-tu préciser dans quel document se trouvent ces spécifications s’il te plaît ? Il ne me semble pas les avoir vues dans la notice officielle, mais je peux me tromper.

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [20 February 2021 03:31 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/7 "2021-02-20T03:31:30Z")

</div>

J’ai bien vérifié dans les dernières spécifications officielles de graphQL. Le terme “operationName” n’en fait pas partie. C’est juste un nom de variable utilisé dans la description de trois algorithmes. Il n’est jamais dit comment le nom de l’opération à effectuer devait être transmis, ni comment ce paramètre devait être nommé.

> To execute a request, the executor must have a parsed _Document_ and a selected operation name to run if the document defines multiple operations, otherwise the document is expected to only contain a single operation.

---

<div class="post-metadata">

### Author: ![vit](https://forum.duniter.org/user_avatar/forum.duniter.org/vit/32/2775_2.png) [@vit](https://forum.duniter.org/u/vit)
#### Post date: [20 February 2021 11:19 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/8 "2021-02-20T11:19:43Z")

</div>

J’ai implémenté les requêtes graphql pour GVA dans duniterPy.

Elle sont de ce type :  
Content-Type = «&nbsp;application/json&nbsp;»  
body =

```javascript
{"variables":{},"query":""}

```

Je ne supporte pas encore le paramètre «&nbsp;operationName&nbsp;».

**Les requêtes graphQL sont indépendantes du protocole de transport.** Elle sont contenue ici dans le body en json, ce qui semble être la norme, une «&nbsp;convention&nbsp;», quand le protocole de transport est HTTP.

Le sujet ici n’est pas le protocole graphQL, mais le protocole de transport. Il est libre, donc tu peux utiliser les POST HTTP avec le formulaire HTTP urlencodé. Mais tu seras le seul… 😅 Car tu ne suis pas la norme établie par «&nbsp;convention&nbsp;» pour le protocole HTTP.

Mais on pourrait très bien faire un serveur et un client graphQL avec un transport en socket réseau envoyant des paquets binaires, du moment que dedans on retrouve les infos de la requête : query, variables, et, semble-t-il, en option, «&nbsp;operationName&nbsp;».

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [20 February 2021 11:24 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/9 "2021-02-20T11:24:51Z")

</div>

Conclusion : il faut adapter l’outil graphQL playground pour le mettre en conformité avec wotwizard si on veut un terrain d’essai pour faciliter l’interaction avec cette API.

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [20 February 2021 15:54 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/10 "2021-02-20T15:54:19Z")

</div>

Nous ne nous sommes pas compris, je ne parle pas du champ operationName mais du fait de vouloir envoyer une requête GraphQL au format `x-www-form-urlencoded`.

Personne ne fait ça et c’est juste impossible si on veut utiliser GraphQL pleinement (avec des variables des fragments et des directives)

> [@HugoTrentesaux](#):
>
> il faut adapter l’outil graphQL playground pour le mettre en conformité avec wotwizard si on veut un terrain d’essai pour faciliter l’interaction avec cette API.

Non car dans ce cas aucun dev front ne pourra utiliser de lib graphql existante pour taper dans l’API de WotWizard. C’est le serveur qu’il faut adapter, et non pas un client en particulier !

Au-delà des spec écrites, il y a les usages ultra rependu mais non spécifiées formellement, les «spec implicite», tout aussi importantes à respecter si or veut de l’interopérabilité.

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [20 February 2021 17:08 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/11 "2021-02-20T17:08:19Z")

</div>

> [@elois](#):
>
> c’est juste impossible si on veut utiliser GraphQL pleinement (avec des variables des fragments et des directives)

Je fais tout ça couramment. Je ne comprends pas ce que tu veux dire. Jette un coup d’œil à la partie “GraphQL requests, and their meanings” du manuel de WotWizard (les fragments et les directives sont inclus dans le champ de la requête graphQL – “graphQL”, les variables sont dans un autre champ – “valVals”) :

> <https://github.com/duniter/WotWizard/blob/master/Help/Manual.en.pdf>

En fait le format x-www-form-urlencoded a exactement les mêmes fonctionnalités qu’un objet JSON.

Je maintiens que mon implémentation de graphQL est totalement conforme aux directives officielles. Maintenant, chacune a ses particularités et la mienne n’a pas les mêmes que celle que tu utilises. Il y en a d’autres. Par exemple, j’utilise l’extension de Firefox “RESTer” qui permet d’utiliser le format et les noms de variables de WotWizard. Je ne pense pas que les particularités de la bibliothèque que tu utilises soit devenues un standard. J’ai vu d’autres bibliothèques en Go implémentées autrement.

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [20 February 2021 17:26 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/12 "2021-02-20T17:26:12Z")

</div>

> [@gerard94](#):
>
> j’utilise l’extension de Firefox « RESTer »

Qui comme son nom l’indique est conçue pour les API REST…

> [@gerard94](#):
>
> Je ne pense pas que les particularités de la bibliothèque que tu utilises soit devenues un standard.

Ce ne sont pas des particularités de “ma” lib, ça vient du playground et de l’écosystème js en général. Je me suis adapté coté serveur, car mon objectif est de faire une API compatible avec un large spectre de lib «client» utilisées par les dev front.

Je ne vois pas l’intérêt de faire une API GraphQL si les gens qui souhaitent l’utilisée sont obligés de coder à la main la manière spécifique dont wotwizard attend les requêtes.

Le problème avec le Playground est bien la preuve que ton serveur ne supporte pas les usages répandus, essaye donc d’utiliser ton API avec une lib graphql en Js ou en Dart 😉

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [20 February 2021 17:28 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/13 "2021-02-20T17:28:37Z")

</div>

> [@vit](#):
>
> Mais tu seras le seul…

Je ne crois pas. J’ai vu d’autres choses. Mais merci de ton avertissement. C’est vrai que les premières implémentations tendent à imposer une jurisprudence, mais il y en a encore, me semble-t-il, beaucoup de différentes.

---

<div class="post-metadata">

### Author: ![vit](https://forum.duniter.org/user_avatar/forum.duniter.org/vit/32/2775_2.png) [@vit](https://forum.duniter.org/u/vit)
#### Post date: [20 February 2021 17:57 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/14 "2021-02-20T17:57:02Z")

</div>

_Rester_ est un client REST, pas graphQL. Or le playground suit la tendance moderne (qui date de plusieurs années quand même) de tout passer en json dans le body. C’est l’usage le plus répandu en javascript, bien plus facile à gérer que les formulaires urlencodés dont l’usage baisse avec la disparition des sites à l’ancienne. Impossible de s’en passer pour faire une «&nbsp;one page app&nbsp;».

Tu as dit toi même ne pas être un expert du HTML/javascript. En ayant bouffé depuis 1994, je peux t’assurer que la bonne pratique est l’usage intensif de json.

Le playground graphQL est «&nbsp;clef en main&nbsp;» si tu fais «&nbsp;comme tout le monde&nbsp;». Faire autrement c’est, plus de travail pour les autres, et c’est donc de facto réduire les contributions côté client. Bref je plussoie ce que dis Elois.

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [20 February 2021 18:17 UTC](https://forum.duniter.org/t/besoin-daide-playground-graphql/8083/15 "2021-02-20T18:17:27Z")

</div>

Merci. Je vais y réfléchir.
