From 91c7e3b484d29734ac4ba4f3f047fdad5e428610 Mon Sep 17 00:00:00 2001 From: theo-chmbn <47857845+theo-chmbn@users.noreply.github.com> Date: Tue, 23 Apr 2024 16:38:17 +0200 Subject: [PATCH 1/6] Update README.md --- README.md | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 39f697c..0df33c7 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,40 @@ [![build-test-pubtodockerhub](https://github.com/abes-esr/theses-api-recherche/actions/workflows/build-test-pubtodockerhub.yml/badge.svg)](https://github.com/abes-esr/theses-api-recherche/actions/workflows/build-test-pubtodockerhub.yml) [![Docker Pulls](https://img.shields.io/docker/pulls/abesesr/theses.svg)](https://hub.docker.com/r/abesesr/theses/) -Fournit des services web permettant d'interroger le moteur d'indexation de theses.fr +Le moteur de recherche theses.fr recense l’ensemble des thèses de doctorat soutenues en France depuis 1985, les sujets de thèse préparés au sein des établissements de l’enseignement supérieur français, et les personnes impliquées dans la recherche doctorale française. + +Ce dépôt héberge le code source de l'API Recherche de theses.fr. + +L’API permet de lancer une recherche dans les données de theses.fr décrivant les thèses et les personnes liées aux thèses. Les données sont récupérables au format JSON. + +L'API s'adresse à toutes les personnes qui souhaitent interroger le site theses.fr, récupérer les données relatives aux thèses de doctorat sur un périmètre donné pour les réutiliser au sein de leur propre système d'information, à des fins de recherche et de statistiques, pour constituer une base de données ou faire de la veille, c'est à dire les gestionnaires de métadonnées, enseignants-chercheurs, data scientist, bibliothécaires, etc. + +URL publique : [https://theses.fr/api/v1/recherche/](https://theses.fr/api/v1/recherche/openapi.yaml) + +![logo theses.fr](https://theses.fr/icone-theses-beta.svg) + +L'application complète peut être déployée via Docker à l'aide du dépôt https://github.com/abes-esr/theses-docker + +## Données exposées par l'API : + +L’API permet de récupérer les données relatives : + +* au statut des thèses : soutenues, en préparation, accessibles en ligne +* à la description des thèses : titre, mots-clés libres, mots-clés contrôlés (libellés et identifiants), résumés, discipline, langue, Numéro National de Thèse ou identifiant de thèse en préparation, date de soutenance ou date de première inscription en doctorat aux +personnes liées aux thèses : auteur / autrice (nom, prénom et identifiant), directeur / directrice (nom, prénom et identifiant), président / présidente du jury (nom, prénom et identifiant), rapporteurs / rapporteuses (nom, prénom et identifiant), membres du jury (nom, prénom et identifiant) +* aux structures liées aux thèses : établissement de soutenance (libellé et identifiant), établissement de cotutelle (libellé et identifiant), école doctorale (libellé et identifiant), partenaire de recherche (libellé et identifiant) + +Le détail des champs interrogeables est accessible dans la documentation de l'API : https://documentation.abes.fr/aidetheses/thesesfr/index.html#PrincipeAPI + +Ainsi que sur [api.gouv.fr](https://api.gouv.fr/les-api/api-interroger-donnees-these) + +## Architecture technique + +Il y a 3 API pour Theses.fr : +* **https://github.com/abes-esr/theses-api-recherche pour la recherche et l'affichage de theses** correspondant à ce dépot +* https://github.com/abes-esr/theses-api-export pour les exports des theses en différents formats (CSV, XML, BIBTEX, etc) +* https://github.com/abes-esr/theses-api-diffusion pour la mise à disposition des documents (PDFs et autres) + +L'API présente est écrite en Java 17, à l'aide du framework Spring Boot 3. + +Elle est déployée automatiquement dans le SI de l'Abes sous forme d'un container docker, à l'aide de la chaine CI/CD Github. From 890372b5858e0386c9799f53ed6017ce0277f7b1 Mon Sep 17 00:00:00 2001 From: theo-chmbn Date: Thu, 25 Apr 2024 14:23:38 +0200 Subject: [PATCH 2/6] Ajout mode maintenance --- .../filters/MaintenanceFilter.java | 33 +++++++++++++++++++ src/main/resources/application.properties | 3 ++ 2 files changed, 36 insertions(+) create mode 100644 src/main/java/fr/abes/thesesapirecherche/filters/MaintenanceFilter.java diff --git a/src/main/java/fr/abes/thesesapirecherche/filters/MaintenanceFilter.java b/src/main/java/fr/abes/thesesapirecherche/filters/MaintenanceFilter.java new file mode 100644 index 0000000..b726ea8 --- /dev/null +++ b/src/main/java/fr/abes/thesesapirecherche/filters/MaintenanceFilter.java @@ -0,0 +1,33 @@ +package fr.abes.thesesapirecherche.filters; + +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +@Order(1) +public class MaintenanceFilter implements Filter { + + @Value("${maintenance}") + private boolean isMaintenance; + + @Value("${maintenance.message}") + private String maintenanceMsg; + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + HttpServletResponse httpResponse = (HttpServletResponse) response; + + if (isMaintenance) { + httpResponse.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE); + httpResponse.getWriter().write(maintenanceMsg); + } else { + chain.doFilter(request, response); + } + } +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 9bc1cad..f2a2828 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -20,3 +20,6 @@ google.recaptcha.key.threshold=0.7 theses.mail=xxxx@abes.fr mail.ws=url +maintenance=false +maintenance.message=Service en maintenance. Veuillez reessayer plus tard. + From 34ad90292b47a0f963efe4f64d0c7d32e7d2abd0 Mon Sep 17 00:00:00 2001 From: theo-chmbn <47857845+theo-chmbn@users.noreply.github.com> Date: Thu, 25 Apr 2024 15:02:44 +0200 Subject: [PATCH 3/6] Ajout du mode maintenance --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index 0df33c7..645f71a 100644 --- a/README.md +++ b/README.md @@ -39,3 +39,21 @@ Il y a 3 API pour Theses.fr : L'API présente est écrite en Java 17, à l'aide du framework Spring Boot 3. Elle est déployée automatiquement dans le SI de l'Abes sous forme d'un container docker, à l'aide de la chaine CI/CD Github. + +## Mode maintenance + +L'API est dotée d'un mode maintenance, qui met en place une réponse avec le code d'erreur 503 et un message personnalisé pour toutes les requêtes. + +Le message affiché est modifiable dans le .env ```THESES_MAINTENANCE_MESSAGE```. Un redémarrage du container est nécessaire lors de la mise à jour du message de maintenance. + + +Pour passer l'application en mode maintenance, il suffit de passer la valeur de ```THESES_MAINTENANCE``` dans le .env à ```true```, puis de relancer le container : ```sudo docker compose up -d``` + +Une fois la maintenance terminée, effectuer la manipulation inverse, remettre ```THESES_MAINTENANCE``` dans le .env à ```false```, puis de relancer le container : ```sudo docker compose up -d``` + + + +> [!NOTE] +> L'erreur 503 sera retourné sur l'intégralité des requêtes de l'API. +> +> Cela rend l'interface Theses.fr (le front vueJS) inopérant, il est donc conseillé de mettre également ce dernier en mode maintenance si cette API est passée en mode maintenance. From 00c2eb813bb48d8a61f04953d71e2030f7e3cb47 Mon Sep 17 00:00:00 2001 From: gibert Date: Mon, 29 Apr 2024 16:51:35 +0200 Subject: [PATCH 4/6] ajout dans la doc openapi de l'url du serveur theses.fr --- .../openapi/OpenApiConfig.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/fr/abes/thesesapirecherche/openapi/OpenApiConfig.java diff --git a/src/main/java/fr/abes/thesesapirecherche/openapi/OpenApiConfig.java b/src/main/java/fr/abes/thesesapirecherche/openapi/OpenApiConfig.java new file mode 100644 index 0000000..58764e8 --- /dev/null +++ b/src/main/java/fr/abes/thesesapirecherche/openapi/OpenApiConfig.java @@ -0,0 +1,22 @@ +package fr.abes.thesesapirecherche.openapi; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.servers.Server; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Arrays; + +@Configuration +public class OpenApiConfig { + + @Bean + public OpenAPI usersMicroserviceOpenAPI() { + return new OpenAPI().servers(Arrays.asList(new Server().url("https://theses.fr"))) + .info(new Info().title("API recherche de theses.fr") + .description("Cette API permet de lancer une recherche dans les données de theses.fr décrivant les thèses et les personnes liées aux thèses. Les données sont récupérables au format JSON.") + .version("1.0")); + } + +} From b6d38106905c02e690a569a600f1737f09f7b6d3 Mon Sep 17 00:00:00 2001 From: gibert Date: Tue, 30 Apr 2024 15:48:30 +0200 Subject: [PATCH 5/6] modif variables mode maintenance --- .../fr/abes/thesesapirecherche/filters/MaintenanceFilter.java | 1 - src/main/resources/application.properties | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/fr/abes/thesesapirecherche/filters/MaintenanceFilter.java b/src/main/java/fr/abes/thesesapirecherche/filters/MaintenanceFilter.java index b726ea8..604bbcc 100644 --- a/src/main/java/fr/abes/thesesapirecherche/filters/MaintenanceFilter.java +++ b/src/main/java/fr/abes/thesesapirecherche/filters/MaintenanceFilter.java @@ -1,7 +1,6 @@ package fr.abes.thesesapirecherche.filters; import jakarta.servlet.*; -import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.annotation.Order; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index f2a2828..7402ca1 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -20,6 +20,6 @@ google.recaptcha.key.threshold=0.7 theses.mail=xxxx@abes.fr mail.ws=url -maintenance=false -maintenance.message=Service en maintenance. Veuillez reessayer plus tard. +maintenance.recherche=false +maintenance.recherche.message=Service en maintenance. Veuillez reessayer plus tard. From 8dcb09ef0ef6bcff17636773a14fbe3b2c09951c Mon Sep 17 00:00:00 2001 From: Julien Gibert Date: Tue, 30 Apr 2024 16:25:38 +0200 Subject: [PATCH 6/6] Update application.properties --- src/main/resources/application.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 7402ca1..f2a2828 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -20,6 +20,6 @@ google.recaptcha.key.threshold=0.7 theses.mail=xxxx@abes.fr mail.ws=url -maintenance.recherche=false -maintenance.recherche.message=Service en maintenance. Veuillez reessayer plus tard. +maintenance=false +maintenance.message=Service en maintenance. Veuillez reessayer plus tard.