update readme

master
paidge 4 months ago
parent 413cebe823
commit 1df4603bbc

@ -24,9 +24,11 @@ Grâce au [schéma d'introspection](https://graphql.org/learn/introspection/), l
- Le type scalaire personnalisé `Date` qui permet d'indiquer le format des dates attendu
- Le type `MetaList` qui représente les metas exposées
- Le type `ENUM Collection` pour récupérer les collections exposées
- Le type `Interface Node` utilisé par tous les objets. Ce type expose les champs `id`, `slug`, `typeCollection`, `points` et `rang`
- Le type `Interface Objet` utilisé par les objets éditoriaux (sauf `Auteurs` et `Syndic`). Ce type expose les champs `id`, `titre`, `texte`, `slug`, `typeCollection`, `points`, `rang` et `maj`
- Les types `MonObjet` liés aux objets éditoriaux (implémentant `Objet` ou non). Le champs `points` (et non le shampooing :p ) sert lors de la requête `recherche`. Il y a aussi le champ `slug`, le champ `type` (il existe aussi le champ `__typeName` fourni par graphQL) et le champ `rang` qui ont été ajoutés.
- Le type `Pagination` pour connaître la page courante et le nombre de pages total dans une collection.
- Le type `Interface Objet` utilisé par les objets éditoriaux pour partager des champs en communs. Ce type expose les champs `id`, `titre`, `descriptif`, `logo`, `maj`, `slug`, `typeCollection`, `points` et `rang`. Le champs `points` (et non le shampooing :p ) sert lors de la requête `recherche`. Le champs `rang` sert lorsqu'un préfixe est utilisé dans le titre de l'objet. Le champ `typeCollection` représente une des collections exposées et est de type `ENUM Collection`. Le champ slug sert à slugifier le titre (il faudrait pouvoir récupérer un objet par son slug). Les autres champs de la BDD peuvent être sélectionnés dans le Back-Office.
- Les types `MonObjet` (par ex : `Article`) liés aux objets éditoriaux.
- Les types `MonObjetPagination` (par ex : `ArticlePagination`) permet de rettourner une liste de `MonObjet` avec la pagination.
- Le type `SearchResult` (utilisé dans la recherche) permet de retourner n'importe quel type d'objet éditorial exposé.
### c. Les requêtes disponibles
Les requêtes disponibles sont aussi affichées par les clients grâce au schéma d'introspection.
@ -42,32 +44,63 @@ Les requêtes `getMonObjet` reçoivent un `id` en paramètre et les requêtes `m
- `pagination` pour indiquer le nombre d'items dans la pagination
- `page` pour indiquer la page voulue dans la pagination
L'API gère les relations 1 => N et les relations N => N (Attention à bien exposer les collections liées et les clés étrangères dans la liste des champs dans le backoffice).
## 4. Tester les requêtes
Le endpoint est joignable sur `spip.php?action=graphql`
Vous pouvez utiliser [graphiql](https://github.com/graphql/graphiql) qui est intégré dans le plugin ou une extension pour votre navigateur. Concernant Firefox, j'utilise [Altair GraphQL Client](https://addons.mozilla.org/fr/firefox/addon/altair-graphql-client/). A part pour le client intégré qui pointe directement sur votre endpoint, il faut renseigner l'url complète de votre API : http://domain.local/spip.php?action=graphql
Dans le client intégré, un plugin a été rajouté pour faciliter la construction de vos requêtes.
![Graphiql-explorer](./captures/graphiql-explorer.png)
Voici un exemple de requête graphQL que vous pouvez tester :
```
{
getMetas {
nom_site
slogan_site
adresse_site
}
articles(
where: ["id_rubrique=3", "maj>2023-05-19 11:00:00"]
page: 1
pagination: 5
) {
...objetFields
articles(where: ["maj>2022-10-02 00:00:00"], page: 2, pagination: 5) {
result {
...objetFields
texte
auteurs {
result {
...objetFields
}
}
rubrique {
...objetFields
}
}
pagination {
current
total
}
}
getArticle(id:2) {
getDocument(id:2) {
...objetFields
auteurs (where: ["bio!=''"]) {
nom
email
bio
extension
fichier
}
rubriques(where:["profondeur=0"]) {
result {
...objetFields
articles {
result {
...objetFields
}
}
}
}
recherche(texte:"ma recherche") {
... on Article {
...objetFields
}
pensebetes {
... on Rubrique {
...objetFields
}
}
@ -76,32 +109,10 @@ Voici un exemple de requête graphQL que vous pouvez tester :
fragment objetFields on Objet {
id
titre
texte
descriptif
maj
}
```
Pour la recherche, voici un exemple :
```
query {
recherche(texte: "Hello") {
... on Article {
id
slug
titre
texte
maj
points
}
... on Auteur {
id
nom
points
}
}
}
```
Si vous activez le jeton, vous devez l'intégrer dans l'en-tête de vos requêtes.
Par exemple avec le client graphiql intégré dans le back-office :

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Loading…
Cancel
Save