|
|
# API
|
|
|
|
|
|
> **Attention**
|
|
|
> Ne pas utiliser des fichiers statiques provenant de l'app (avec des chemins commençant par `../app`). En effet, en production, l'API et l'application web tournent dans deux containers différents, et l'un n'a pas accès au code de l'autre (ce qui fait des images docker plus légères)
|
|
|
|
|
|
L'API de Churros permet l'interaction avec les données de l'application. C'est un API [GraphQL](https://graphql.org/), dont la documentation est disponible à `/graphql` (par exemple, <https://churros.inpt.fr/graphql>). Les données sont stockées dans une base de données Postgres (voir [Base de données](/Base-de-données)). À l'API GraphQL s'ajoute quelques autres URLs fournissant des services divers:
|
|
|
|
|
|
- Un serveur de fichiers statiques pour les fichiers générés par les utilisateurs à `/storage` (sert par exemple à récupérer les photos de profil, les logos des clubs ou les documents sur La Frappe)
|
|
|
- Un endpoint pour récupérer ses données personnelles à `/dump` (voir [RGPD (données personnelles)](/rgpd))
|
|
|
- Un [webhook Lydia](/lydia) à `/lydia-webhook`, servant à recevoir les acquittements de paiements depuis [Lydia](https://lydia-app.com)
|
|
|
- Un service pour télécharger en .pdf les billets d'évènements à `/print-booking/:pseudoID`, où `:pseudoID` est le code de réservation du billet.
|
|
|
- Un endpoint pour échanger un code d'autorisaton OAuth contre un token d'accès à `/token` (voir [OAuth](/oauth))
|
|
|
- Un endpoint `/log` pour logger du contenu dans côté serveur depuis le côté client (utile, par exemple, pour le [Service worker](/service-worker) de l'application)
|
|
|
- Un endpoint `/maintenance` servant une simple page de maintenance (voir [Maintenance](/maintenance))
|
|
|
|
|
|
## Architecture
|
|
|
|
|
|
Pour gérer ces divers _endpoints_, l'API est implémentée comme un server [Express](https://expressjs.com/).
|
|
|
|
|
|
Le serveur GraphQL est servi avec [GraphQL Yoga Server](https://the-guild.dev/graphql/yoga-server), et est implémenté avec [Pothos](https://pothos-graphql.dev).
|
|
|
|
|
|
Les données sont stockées dans une base de données [PostgreSQL](https://www.postgresql.org/), dont la gestion des migrations, la spécification des tables et l'interaction avec l'API est gérée via [Prisma](https://www.prisma.io/).
|
|
|
|
|
|
Enfin, pour assurer la cohérence de caches serveur (comme les sessions utilisateurs, par exemple) et la gestion des [subscriptions (pour le temps réel)](/api/subscriptions), l'API utilise une base de données [Redis](https://redis.io/).
|
|
|
|
|
|
> **NOTE:** La cohérence des caches n'est pour l'instant pas assurée via Redis.
|
|
|
|
|
|
## Organisation des fichiers
|
|
|
|
|
|
> **NOTE:** Une refonte de l'organisation des fichiers de l'API est en cours, voir !106.
|
|
|
|
|
|
Voir le [README de `packages/api/`](https://git.inpt.fr/inp-net/churros/-/blob/main/packages/api/README.md). |
|
|
# API
|
|
|
|
|
|
> **Attention**
|
|
|
> Ne pas utiliser des fichiers statiques provenant de l'app (avec des chemins commençant par `../app`). En effet, en production, l'API et l'application web tournent dans deux containers différents, et l'un n'a pas accès au code de l'autre (ce qui fait des images docker plus légères)
|
|
|
|
|
|
L'API de Churros permet l'interaction avec les données de l'application. C'est un API [GraphQL](https://graphql.org/), dont la documentation est disponible à `/graphql` (par exemple, <https://churros.inpt.fr/graphql>). Les données sont stockées dans une base de données Postgres (voir [Base de données](/Base-de-données)). À l'API GraphQL s'ajoute quelques autres URLs fournissant des services divers:
|
|
|
|
|
|
- Un serveur de fichiers statiques pour les fichiers générés par les utilisateurs à `/storage` (sert par exemple à récupérer les photos de profil, les logos des clubs ou les documents sur La Frappe)
|
|
|
- Un endpoint pour récupérer ses données personnelles à `/dump` (voir [RGPD (données personnelles)](/rgpd))
|
|
|
- Un [webhook Lydia](/lydia) à `/lydia-webhook`, servant à recevoir les acquittements de paiements depuis [Lydia](https://lydia-app.com)
|
|
|
- Un service pour télécharger en .pdf les billets d'évènements à `/print-booking/:pseudoID`, où `:pseudoID` est le code de réservation du billet.
|
|
|
- Un endpoint `/log` pour logger du contenu dans côté serveur depuis le côté client (utile, par exemple, pour le [Service worker](/service-worker) de l'application)
|
|
|
- Un endpoint `/maintenance` servant une simple page de maintenance (voir [Maintenance](/maintenance))
|
|
|
|
|
|
## Architecture
|
|
|
|
|
|
Pour gérer ces divers _endpoints_, l'API est implémentée comme un server [Express](https://expressjs.com/).
|
|
|
|
|
|
Le serveur GraphQL est servi avec [GraphQL Yoga Server](https://the-guild.dev/graphql/yoga-server), et est implémenté avec [Pothos](https://pothos-graphql.dev).
|
|
|
|
|
|
Les données sont stockées dans une base de données [PostgreSQL](https://www.postgresql.org/), dont la gestion des migrations, la spécification des tables et l'interaction avec l'API est gérée via [Prisma](https://www.prisma.io/).
|
|
|
|
|
|
Enfin, pour assurer la cohérence de caches serveur (comme les sessions utilisateurs, par exemple) et la gestion des [subscriptions (pour le temps réel)](/api/subscriptions), l'API utilise une base de données [Redis](https://redis.io/).
|
|
|
|
|
|
## Organisation des fichiers
|
|
|
|
|
|
Voir le [README de `packages/api/`](https://git.inpt.fr/inp-net/churros/-/blob/main/packages/api/README.md). |