L'objectif est d'exposer le référentiel des opérateurs funéraires sous forme d'API. Les données sont cette fois ci exposées dans une base de donnée MongoDB.
NOTE : Pour ce cas Mongo Atlas est utilisé sans les spécificités de recherche floue offertes par cette solution.
L'API permet d'effectuer des recherches par :
Critères |
---|
identifiant technique |
code postal |
code departement |
raison sociale |
nom commercial |
activite, prestations |
coordonnées geographiques et distances kilométriques |
Cette API dépend du chargement des données effectuées depuis le projet rof-load-bd.
-
fonctionnelle
- : ajout du numéro de siret 🔜
-
technique
- : modification du body pour la ressource geo (données opérateurs et coordonnées géographiques + distance kms)
- : ajout du contrôle du body avec le body-parser
- : traitement des secrets d'accès à la base de données
- : déploiement automatisé
node : v14
git clone https://github.com/mogador26/rof-api-bd.git
- debuggage en mode dev
npm install --save-dev nodemon
- installation des packages
npm install
-
serve-favicon
-
express-rate-limit : limite d'accès par IP
-
dotenv : chargement des variables d'environnement
-
swagger-ui-express : chargement du swagger
-
yamljs : prise en compte du format yaml pour le swagger
-
mongoose : accès à une base de données mongodb
-
express-healthcheck : état de l'api.
- variables :
Type | Nom | Valeur |
---|---|---|
API | PORT | port d'écoute node.js |
API | WINDOW_TIME | WINDOW_TIME : 15 * 60 * 1000 # en ms (ici 15 minutes) |
API | MAX_REQUEST_BY_IP | nombre de requetes dans une fenêtre de 15 minutes |
API | LIMIT_SEARCH | limite du nombre d'enregistrement autorisé pour une recherche |
API | URL_DB | url de connexion à mongodb |
- mode start
npm start
- mode developpement avec nodemon :
npm run dev
-
Un fichier Procfile est défini pour une utilisation dans un environnement Heroku :
web: npm start
Type | Nom | Valeur |
---|---|---|
Mongo | MONGO_INITDB_ROOT_USERNAME | utilisateur admin |
Mongo | MONGO_INITDB_ROOT_PASSWORD | mot de passe admin |
Mongo | MONGO_INITDB_DATABASE | database |
Mongo | MONGO_USERNAME_DB | utilisateur db |
Mongo | MONGO_PASSWORD_DB | mot de passe db |
Mongo | MONGO_DOCKER_PORT | port docker pour le service mongo |
Mongo | MONGO_LOCAL_PORT | port local docker pour le service mongo |
API | PORT | port d'écoute nodejs |
API | WINDOW_TIME | window_time : 15 * 60 * 1000 # en ms (ici 15 minutes) |
API | MAX_REQUEST_BY_IP | nombre de requetes dans une fenêtre de 15 minutes |
API | LIMIT_SEARCH | limite du nombre d'enregistrement autorisé pour une recherche |
API | URL_DB | url de connexion à mongodb |
API | API_DOCKER_PORT | port docker pour le service app rof |
API | API_LOCAL_PORT1 | port local docker |
[1] : uniquement pour docker-compose
Note: Les variables Mongo ne sont utilisées que dans le cadre de docker-compose.
-
Un fichier Dockerfile est également défini afin d'exécuter node.js dans un environnement de conteneur.
- création de l'image docker
docker build . -f ./Dockerfile -t <youruser>/api-rof:1.0
- création de l'image docker
-
Un fichier docker-compose.yml intégre :
-
: mongo v4
-
: node.js
-
sans build image api-rof :
- start
docker-compose -f ./docker-compose.yml up
- stop
docker-compose -f ./docker-compose.yml down
- start
-
avec build image api-rof
- build
docker-compose -f ./docker-compose-with-build-api.yml build
- start
docker-compose -f ./docker-compose-with-build-api.yml up
- stop
docker-compose -f ./docker-compose-with-build-api.yml down
- build
-
Les tests de charge sont réalisés avec artillery et github actions.
Les scénarios sont décrits sous le répertoire./test et les données sont identifiées dans le fichier keywords.
La forme du fichier est :
code_departement | code_postal | prestations | critères | sort | desc | limit |
---|---|---|---|---|---|---|
le code departement | le code postal | le type de prestations | critères de recherches pour search?q= | tri | ordre du tri | limit du nombre d'éléments renvoyés |
- Exemples
code_departement | code_postal | prestations | critères | sort | desc | limit |
---|---|---|---|---|---|---|
78 | 78000 | Organisation des obsèques | raison_sociale | 5 | ||
75 | 75000 | Soins de conservation | raison_sociale | 10 | ||
35 | 32000 | Soins de conservation | raison_sociale | 5 |
- Ajout de slides conçus avec slides.com / reveal.js qui présentent quelques fonctionnalités de l'API (./docs/)