{"id":1345,"date":"2021-11-02T11:59:57","date_gmt":"2021-11-02T10:59:57","guid":{"rendered":"https:\/\/www.loicmathieu.fr\/wordpress\/?p=1345"},"modified":"2021-11-02T12:03:27","modified_gmt":"2021-11-02T11:03:27","slug":"quarkus-et-les-google-cloud-functions","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/quarkus-et-les-google-cloud-functions\/","title":{"rendered":"Quarkus et les  Google Cloud Functions"},"content":{"rendered":"<p>Quarkus est un framework de d\u00e9veloppement de microservice pens\u00e9 pour le cloud et les conteneurs.<\/p>\n<p>Il est pens\u00e9 pour avoir une utilisation m\u00e9moire r\u00e9duite et un temps de d\u00e9marrage le plus court possible.<\/p>\n<p>Il se base principalement sur des standards (Jakarta EE, Eclipse MicroProfile, \u2026) et permet l&rsquo;utilisation de librairies Java matures et tr\u00e8s r\u00e9pandues via ses extensions (Hibernate, RESTeasy, Vert.X, Kafka, \u2026).<\/p>\n<p>Quarkus a \u00e9t\u00e9 pens\u00e9 pour le cloud d\u00e8s sa conception, il permet le d\u00e9veloppement d\u2019applications Cloud Ready (tel que d\u00e9fini par le principe des applications <a href=\"https:\/\/12factor.net\/\" rel=\"noopener\" target=\"_blank\">12 Factors<\/a> ) et Cloud Native (utilisation des capacit\u00e9s des cloud publics pour d\u00e9velopper vos applications).<\/p>\n<p>Quarkus permet entre autres la cr\u00e9ation de fonctions Google Cloud Functions pour le d\u00e9veloppement de vos applications.<\/p>\n<p>Quarkus permet d\u2019impl\u00e9menter une fonction Google Cloud Function de type background ou HTTP de plusieurs mani\u00e8res :<\/p>\n<ul><li>Via les API de Google Cloud.<\/li>\n\n<li>Via Funqy : une framework de d\u00e9veloppement de fonction agnostique du fournisseur de Cloud.<\/li>\n\n<li>Via une des extensions HTTP de Quarkus: RESTEasy (JAX-RS), Vert.x reactive routes, Undertow (Servlet), Spring Web.<\/li>\n<\/ul>\n<h2>Background Function avec l\u2019API Google Cloud<\/h2>\n<p>Premi\u00e8re \u00e9tape, cr\u00e9er un projet Quarkus avec le plugin Maven de Quarkus :<\/p>\n<pre>\nmvn io.quarkus:quarkus-maven-plugin:1.12.2.Final:create \\\n    -DprojectGroupId=org.acme \\\n    -DprojectArtifactId=google-cloud-functions \\\n    -Dextensions=\"resteasy,google-cloud-functions\"\n<\/pre>\n<p>Cette commande Maven va vous cr\u00e9er un projet contenant une fonction background et une fonction HTTP.<\/p>\n<p>La fonction background cr\u00e9\u00e9e est la suivante :<\/p>\n<pre>\n@ApplicationScoped \/\/1\npublic class HelloWorldBackgroundFunction \n        implements BackgroundFunction { \/\/2\n\n    @Override\n    public void accept(StorageEvent event, Context context) throws Exception { \/\/3\n        System.out.println(\"Receive event on file: \" + event.name);\n    }\n\n    public static class StorageEvent {\n        public String name;\n    }\n}\n<\/pre>\n<ol><li>Pour que Quarkus d\u00e9tecte votre fonction, elle doit \u00eatre annot\u00e9e avec une annotation CDI.<\/li>\n\n<li>La fonction utilise l\u2019API de Google, ici elle \u00e9tend <code>BackgroundFunction<\/code>.<\/li>\n\n<li>La fonction sera d\u00e9clench\u00e9e par un \u00e9v\u00e9nement repr\u00e9sent\u00e9 par l\u2019objet <code>StorageEvent<\/code>, pour plus de simplicit\u00e9 j\u2019ai uniquement d\u00e9fini sa propri\u00e9t\u00e9 name.<\/li>\n<\/ol>\n<p>Cette fonction sera d\u00e9clench\u00e9e par un \u00e9v\u00e9nement de type Google Cloud Storage, et va afficher dans ses logs le nom de l\u2019objet cr\u00e9\u00e9 ou mis \u00e0 jour dans Cloud Storage.<\/p>\n<p>Comme l\u2019exemple vient avec deux fonctions, il vous faut supprimer la fonction HTTP qui a aussi \u00e9t\u00e9 cr\u00e9\u00e9e, ou s\u00e9lectionner la fonction \u00e0 d\u00e9ployer. Ces \u00e9tapes sont expliqu\u00e9es dans le guide des Google Cloud Functions <a href=\"https:\/\/quarkus.io\/guides\/gcp-functions#choose-your-function\" rel=\"noopener\" target=\"_blank\">ici<\/a>, et omises pour des raisons de simplicit\u00e9.<\/p>\n<p>Pour packager la fonction, vous devez utiliser la commande Maven suivante : <code>mvn clean package<\/code>. Cette commande va cr\u00e9er un uberjar dans le r\u00e9pertoire <strong>target\/deployment<\/strong> que vous pourrez ensuite d\u00e9ployer comme une Cloud Functions.<\/p>\n<p>Pour d\u00e9ployer cet uberjar, vous pouvez utiliser la commande gcloud suivante :<\/p>\n<pre>\ngcloud beta functions deploy quarkus-example-storage \\\n--entry-point=io.quarkus.gcp.functions.QuarkusBackgroundFunction \\\n--trigger-resource quarkus-hello \\\n--trigger-event google.storage.object.finalize \\\n--runtime=java11 --source=target\/deployment\n<\/pre>\n<p>Cette commande utilise comme entry point <code>io.quarkus.gcp.functions.QuarkusBackgroundFunction<\/code> et non votre fonction. Cet entry point va d\u00e9marrer Quarkus, puis localiser votre fonction dans le conteneur CDI.<\/p>\n<p>Pour d\u00e9clencher la fonction via une \u00e9v\u00e9nement Cloud Storage, on doit d\u00e9finir l&rsquo;\u00e9v\u00e9nement de d\u00e9clenchement <code>google.storage.object.finalize<\/code> et pr\u00e9ciser un nom de bucket, ici <strong>quarkus-hello<\/strong>. Ce bucket doit avoir \u00e9t\u00e9 cr\u00e9\u00e9 pr\u00e9c\u00e9dement via <code>gsutil mb gs:\/\/quarkus-hello<\/code> ou la console Google Cloud.<\/p>\n<p>L\u2019ajout d\u2019un objet dans le bucket <strong>quarkus-hello<\/strong> va alors d\u00e9clencher votre fonction.\nVous pouvez tester cela avec la commande gsutil qui permet d\u2019envoyer des fichiers dans un bucket Cloud Storage :<\/p>\n<pre>\ngsutil cp test.txt gs:\/\/quarkus-hello\n<\/pre>\n<p>Ou simuler un d\u00e9clenchement via :<\/p>\n<pre>\ngcloud functions call quarkus-example-storage  \\\n--data '{\"name\":\"test.txt\"}'.\n<\/pre>\n<p>On peut noter qu\u2019on utilise la taille par d\u00e9faut de fonction qui est de 256Mo, ceci est suffisant pour le d\u00e9marrage du conteneur de la fonction (Jetty) et de notre application Quarkus. On tire parti de la consommation m\u00e9moire faible de Quarkus.<\/p>\n<p>Si on regarde dans les logs de d\u00e9marrage de notre fonction, on constate que notre fonction prend environ 2s \u00e0 d\u00e9marrer dont 1s pour Quarkus, et le reste (1s donc), pour le conteneur de fonction (Jetty). On tire parti du d\u00e9marrage rapide de Quarkus.<\/p>\n<h2>HTTP Function avec l\u2019API Google Cloud<\/h2>\n<p>Dans le projet Quarkus pr\u00e9c\u00e9demment cr\u00e9\u00e9, une fonction HTTP a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e dont voici le code :<\/p>\n<pre>\n@ApplicationScoped \/\/1\npublic class HelloWorldHttpFunction implements HttpFunction { \/\/2\n\n    @Override\n    public void service(HttpRequest httpRequest, HttpResponse httpResponse) \/\/3\n            throws Exception {\n        Writer writer = httpResponse.getWriter();\n        writer.write(\"Hello World\");\n    }\n}\n<\/pre>\n<ol><li>Pour que Quarkus d\u00e9tecte votre fonction, elle doit \u00eatre annot\u00e9e avec une annotation CDI.<\/li>\n\n<li>La fonction utilise l\u2019API de Google, ici elle \u00e9tend <code>HttpFunction<\/code>.<\/li>\n\n<li>Pour impl\u00e9menter notre fonction, on a acc\u00e8s \u00e0 la requ\u00eate et la r\u00e9ponse HTTP.<\/li>\n<\/ol>\n<p>Cette fonction fait un simple Hello World.<\/p>\n<p>Pour packager la fonction, vous devez utiliser la commande Maven suivante : <code>mvn clean package<\/code>. Cette commande va cr\u00e9er un uberjar dans le r\u00e9pertoire <strong>target\/deployment<\/strong> que vous pourrez ensuite d\u00e9ployer comme une Cloud Functions.<\/p>\n<p>Pour d\u00e9ployer cet uberjar vous pouvez utiliser la commande gcloud suivante :<\/p>\n<pre>\ngcloud beta functions deploy quarkus-example-http \\\n--entry-point=io.quarkus.gcp.functions.QuarkusHttpFunction \\\n--runtime=java11 --trigger-http --source=target\/deployment\n<\/pre>\n<p>Cette commande utilise comme entry point <code>io.quarkus.gcp.functions.QuarkusHttpFunction<\/code> et non votre fonction. Cet entry point va d\u00e9marrer Quarkus puis localiser votre fonction dans le conteneur CDI.<\/p>\n<p>Pour plus d\u2019informations sur les fonctions background et HTTP via l\u2019API Google, voir le guide suivant : <a href=\"https:\/\/quarkus.io\/guides\/gcp-functions\" rel=\"noopener\" target=\"_blank\">Quarkus Google Cloud Functions<\/a>.<\/p>\n<h2>Background Function avec Funqy<\/h2>\n<p>L\u2019exemple de fonction background que nous avons vu pr\u00e9c\u00e9demment a comme inconv\u00e9nient d\u2019\u00eatre d\u00e9pendant de l\u2019API Google Cloud Functions. Elle n\u2019est donc pas portable d\u2019un cloud \u00e0 l\u2019autre.<\/p>\n<p>C\u2019est l\u00e0 qu\u2019entre en piste <strong>Funqy<\/strong>, l\u2019API de fonction de Quarkus, agnostique du cloud provider. On peut r\u00e9\u00e9crire la fonction background pr\u00e9c\u00e9dente via <strong>Funqy<\/strong> de la mani\u00e8re suivante :<\/p>\n<pre>\npublic class HelloWorldBackgroundFunction { \/\/1\n\n    @Funq \/\/2\n    public void accept(StorageEvent event) throws Exception { \/\/3\n        System.out.println(\"Receive event on file: \" + event.name);\n    }\n\n    public static class StorageEvent {\n        public String name;\n    }\n}\n<\/pre>\n<ol><li>Votre fonction n\u2019est plus d\u00e9pendante de l\u2019API de Google.<\/li>\n\n<li>L\u2019annotation <code>@Funq<\/code> permet de dire \u00e0 <strong>Funqy<\/strong> que c\u2019est la m\u00e9thode \u00e0 appeler pour chaque d\u00e9clenchement de fonction.<\/li>\n\n<li>La fonction sera d\u00e9clench\u00e9e par un \u00e9v\u00e9nement repr\u00e9sent\u00e9 par l\u2019objet <code>StorageEvent<\/code>, pour plus de simplicit\u00e9 j\u2019ai uniquement d\u00e9fini sa propri\u00e9t\u00e9 name.<\/li>\n<\/ol>\n<p>Pour utiliser <strong>Funqy<\/strong>, il faut remplacer l\u2019extension<code>quarkus-google-cloud-functions<\/code> par l\u2019extension <code>quarkus-funqy-google-cloud-functions<\/code>.<\/p>\n<p>Apr\u00e8s avoir packager votre application avec Maven, vous pouvez la d\u00e9ployer avec gcloud de la m\u00eame mani\u00e8re que pr\u00e9c\u00e9demment, sauf qu\u2019il vous faut utiliser l\u2019entry point <code>io.quarkus.funqy.gcp.functions.FunqyBackgroundFunction<\/code>. Ce qui donne :<\/p>\n<pre>\ngcloud beta functions deploy quarkus-example-storage \\\n--entry-point=io.quarkus.funqy.gcp.functions.FunqyBackgroundFunction \\\n--trigger-resource quarkus-hello \\\n--trigger-event google.storage.object.finalize \\\n--runtime=java11 --source=target\/deployment\n<\/pre>\n<p>Pour plus d\u2019informations sur <strong>Funqy<\/strong>, voir le guide suivant : <a href=\"https:\/\/quarkus.io\/guides\/funqy-gcp-functions\" rel=\"noopener\" target=\"_blank\">Quarkus Funqy Google Cloud Functions<\/a>.<\/p>\n<h2>HTTP Function avec RESTEasy<\/h2>\n<p>L\u2019exemple de fonction HTTP que nous avons vu pr\u00e9c\u00e9demment a comme inconv\u00e9nient d\u2019\u00eatre d\u00e9pendant de l\u2019API Google Cloud Functions. Elle n\u2019est donc pas portable d\u2019un cloud \u00e0 l\u2019autre.<\/p>\n<p>De plus, la manipulation directe des objets request et response peut \u00eatre fastidieuse.<\/p>\n<p>Pour pallier \u00e0 cela, Quarkus permet d\u2019utiliser ses diff\u00e9rentes extensions HTTP \u00e0 la place de l\u2019API de Google, votre fonction devient alors agnostique du cloud provider, et beaucoup plus simple \u00e0 \u00e9crire.<\/p>\n<p>L\u2019exemple pr\u00e9c\u00e9dent peut \u00eatre r\u00e9\u00e9crit de la mani\u00e8re suivante en utilisant l\u2019extension <strong>RESTEasy<\/strong> :<\/p>\n<pre>\n@Path(\"\/\") \/\/1\npublic class HelloWorldHttpFunction{ \/\/2\n\n    @GET \/\/3\n    @Produces(MediaType.TEXT_PLAIN)\n    public void String() throws Exception {\n        return \"Hello World\";\n    }\n}\n<\/pre>\n<ol><li>On utilise ici l\u2019annotation JAX-RS <code>@Path<\/code> permettant de d\u00e9finir la classe comme une ressource REST.<\/li>\n\n<li>Notre classe ne d\u00e9pend plus de l\u2019API Google Functions.<\/li>\n\n<li>Notre fonction est impl\u00e9ment\u00e9e via une op\u00e9ration REST classique (on peut m\u00eame en d\u00e9finir plusieurs si n\u00e9cessaire).<\/li>\n<\/ol>\n<p>Pour utiliser <strong>RESTEasy<\/strong>, il faut remplacer l\u2019extension <code>quarkus-google-cloud-functions<\/code> par l\u2019extension <code>quarkus-google-cloud-functions-http<\/code> et ajouter l\u2019extension <strong>RESTEasy<\/strong> : <code>quarkus-resteasy-jackson<\/code>.<\/p>\n<p>Apr\u00e8s avoir packager votre application avec Maven, vous pouvez la d\u00e9ployer avec gcloud de la m\u00eame mani\u00e8re que pr\u00e9c\u00e9demment sauf qu\u2019il vous faut utiliser l\u2019entry point <code>io.quarkus.gcp.functions.http.QuarkusHttpFunction<\/code>. Ce qui donne :<\/p>\n<pre>\ngcloud beta functions deploy quarkus-example-http \\\n--entry-point=io.quarkus.gcp.functions.http.QuarkusHttpFunction \\\n--runtime=java11 --trigger-http --source=target\/deployment\n<\/pre>\n<p>Il est aussi possible d&rsquo;\u00e9crire des fonctions HTTP avec les autres frameworks HTTP de Quarkus : reactive routes, Undertow (servlet), Funqy HTTP ou Spring Web.<\/p>\n<p>Pour plus d\u2019informations sur l\u2019utilisation des extensions HTTP via des Cloud Functions, voir le guide suivant : <a href=\"https:\/\/quarkus.io\/guides\/gcp-functions-http\" rel=\"noopener\" target=\"_blank\">Quarkus Google Cloud Function HTTP bindings<\/a>.<\/p>\n<h2>Conclusion<\/h2>\n<p>Il est tr\u00e8s facile de cr\u00e9er des fonctions d\u00e9ployables dans Google Cloud avec les extensions d\u00e9di\u00e9s Quarkus. De plus Funqy (pour les fonctions brackground) et le binding HTTP (pour les fonctions HTTP) permettent de le faire sans que v\u00f4tre code soit li\u00e9s \u00e0 l&rsquo;API de Google Cloud.<\/p>\n<p>Les fonctions Google Cloud sont id\u00e9ales pour l&rsquo;utilisation des services Google Cloud, un pack d&rsquo;extension existe pour faciliter leurs utilisations au sein de Quarkus via le pack d&rsquo;extension <a href=\"https:\/\/quarkiverse.github.io\/quarkiverse-docs\/quarkus-google-cloud-services\/main\/index.html\" rel=\"noopener\" target=\"_blank\">Google Cloud Services<\/a> qui permet d&rsquo;utiliser BigQuery, BigTable, Firestore, PubSub, SecretManager, Spanner et Storage dans une application Quarkus.<\/p>","protected":false},"excerpt":{"rendered":"<p>Quarkus est un framework de d\u00e9veloppement de microservice pens\u00e9 pour le cloud et les conteneurs. Il est pens\u00e9 pour avoir une utilisation m\u00e9moire r\u00e9duite et un temps de d\u00e9marrage le plus court possible. Il se base principalement sur des standards (Jakarta EE, Eclipse MicroProfile, \u2026) et permet l&rsquo;utilisation de librairies Java matures et tr\u00e8s r\u00e9pandues via ses extensions (Hibernate, RESTeasy, Vert.X, Kafka, \u2026). Quarkus a \u00e9t\u00e9 pens\u00e9 pour le cloud d\u00e8s sa conception, il permet le d\u00e9veloppement d\u2019applications Cloud Ready&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/quarkus-et-les-google-cloud-functions\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[200,181,179,11,167,182],"class_list":["post-1345","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-faas","tag-function","tag-gcp","tag-java","tag-quarkus","tag-serverless"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":2089,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/deployer-une-application-quarkus-dans-cloud-run\/","url_meta":{"origin":1345,"position":0},"title":"D\u00e9ployer une application Quarkus dans Cloud Run","author":"admin","date":"mardi 30 d\u00e9cembre 2025","format":false,"excerpt":"Quarkus est un framework de d\u00e9veloppement de microservice pens\u00e9 pour le cloud et les conteneurs. Il est pens\u00e9 pour avoir une utilisation m\u00e9moire r\u00e9duite et un temps de d\u00e9marrage le plus court possible. Il se base principalement sur des standards (Jakarta EE, Eclipse MicroProfile, \u2026) et permet l\u2019utilisation de librairies\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1560,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/quarkus-tip-tester-une-fonction-google-cloud\/","url_meta":{"origin":1345,"position":1},"title":"Quarkus Tip : Tester une fonction Google Cloud","author":"admin","date":"jeudi 29 d\u00e9cembre 2022","format":false,"excerpt":"J'ai r\u00e9cemment contribu\u00e9 une PR \u00e0 Quarkus qui contient un framework de test pour les fonctions Google Cloud. Quarkus supporte la cr\u00e9ation de fonction Google Cloud de trois mani\u00e8res diff\u00e9rentes : En utilisant l'API de Google Cloud. En utilisant une extension HTTP de Quarkus : RESTEasy, Reactive routes, Servlet, Spring\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1440,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/google-cloud-functions-2nd-gen\/","url_meta":{"origin":1345,"position":2},"title":"Google Cloud Functions 2nd gen","author":"admin","date":"mardi 29 mars 2022","format":false,"excerpt":"Google vient de sortir en beta la seconde g\u00e9n\u00e9ration des Google Cloud Functions. Pour ceux qui ne connaissent pas encore les Google Cloud Functions vous pouvez lire mes articles J\u2019ai test\u00e9 Java Google Cloud Functions et Quarkus et les Google Cloud Functions. Cette seconde g\u00e9n\u00e9ration apporte : Un temps de\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/cloud-function-gen2-instances.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/cloud-function-gen2-instances.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/cloud-function-gen2-instances.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1960,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/creer-un-chatbot-avec-google-gemini-vertex-ai-et-quarkus\/","url_meta":{"origin":1345,"position":3},"title":"Cr\u00e9er un chatbot avec Google Gemini Vertex AI et Quarkus","author":"admin","date":"vendredi 27 juin 2025","format":false,"excerpt":"J'ai r\u00e9cemment cr\u00e9\u00e9 une extension Quarkus qui permet d'acc\u00e9der \u00e0 Google Vertex AI. Dans cet article, je vais utiliser cette extension pour cr\u00e9er un chatbot. La premi\u00e8re \u00e9tape consiste \u00e0 cr\u00e9er un projet Quarkus contenant les extensions REST et Google Cloud Vertex AI. Voici les extensions \u00e0 ajouter \u00e0 votre\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/Capture-decran-du-2025-06-27-14-22-26-1024x376.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/Capture-decran-du-2025-06-27-14-22-26-1024x376.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/Capture-decran-du-2025-06-27-14-22-26-1024x376.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1138,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/ma-deuxieme-annee-chez-zenika\/","url_meta":{"origin":1345,"position":4},"title":"Ma deuxi\u00e8me ann\u00e9e chez Zenika","author":"admin","date":"jeudi  3 septembre 2020","format":false,"excerpt":"Aujourd\u2019hui est un jour sp\u00e9cial, cela fait deux ans que je suis arriv\u00e9 chez Zenika, apr\u00e8s 9 ans en tant qu\u2019architecte logiciel dans la DSI d\u2019un grand groupe de retail. L'ann\u00e9e derni\u00e8re j'avais fait le bilan de ma premi\u00e8re ann\u00e9e pass\u00e9e : 1 an chez Zenika. Et un an apr\u00e8s,\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":975,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devfest-nantes-2019-developper-une-api-cloud-ready-avec-quarkus\/","url_meta":{"origin":1345,"position":5},"title":"Devfest Nantes 2019 &#8211; D\u00e9velopper une API Cloud Ready avec Quarkus","author":"admin","date":"jeudi 31 octobre 2019","format":false,"excerpt":"La semaine derni\u00e8re j'\u00e9tais au Devfest Nantes pour parler Quarkus lors d'un talk intitul\u00e9 \"D\u00e9velopper une API Cloud Ready avec Quarkus\". Si ce sujet vous int\u00e9r\u00e8sse, voici le lien vers la vid\u00e9o : https:\/\/www.youtube.com\/watch?v=6VdChn13f3U&list=PLuZ_sYdawLiUjPGPsOvBcgBxC6yP_HSA6&index=4","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=1345"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1345\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=1345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=1345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=1345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}