Skip to content

Commit

Permalink
protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
Ducasse committed Aug 26, 2024
1 parent 57469bf commit f5eca3d
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 5 deletions.
2 changes: 1 addition & 1 deletion Chapters/Chap00-TinyBlog-Introduction-FR.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
## A propos de ce livreTout au long de ce projet, nous allons vous guider pour développer et enrichir une application Web, nommée TinyBlog, pour gérer un ou plusieurs blogs. La figure *@TinyBlogOnPharoCloudHere@* montre l'état final de l'application. L'idée est qu'un visiteur du site Web puisse voir les posts et que l'auteur du blog puisse se connecter sur le site pour administrer le blog c'est-à-dire ajouter, supprimer ou modifier des posts.TinyBlog est une petite application pédagogique qui va vous montrer comment développer et déployer une application web en utilisant Pharo / Seaside / Mongo et d'autres frameworks tels que NeoJSON.Notre idée est que par la suite vous pourrez réutiliser cette infrastructure pour créer vos propres applications Web.### StructureDans la première partie appelée "Tutoriel de base", vous allez développer et déployer, TinyBlog, une application et son administration en utilisant Pharo et le framework Seaside ainsi que d'autres bibliothèques comme Voyage ou Magritte. Le déploiement en utilisant la base de données Mongo est optionnel mais cela vous permet de voir que Voyage est une façade élégante et simple pour faire persister des données notamment dans Mongo.Dans une seconde partie optionnelle, nous abordons des aspects optionnels tel que l'export de données, l'utilisation de templates comme Mustache ou comment exposer votre application via une API REST.Les solutions proposées dans ce tutoriel sont parfois non optimales afin de vous faire réagir et que vous puissiez proposer d'autres solutions et des améliorations. Notre objectif n'est pas d'être exhaustif. Nous montrons une façon de faire cependant nous invitons le lecteur à lire les références sur les autres chapitres, livres et tutoriaux Pharo afin d'approfondir son expertise et enrichir son application.Finalement, afin de vous permettre de ne pas abandonner si vous ne trouvez pas une erreur, le dernier chapitre vous permet de chargerle code décrit dans chacun des chapitres.![L'application TinyBlog.](figures/TinyBlogOnPharoCloud.png width=100&label=TinyBlogOnPharoCloudHere)### Installation de PharoDans ce tutoriel, nous supposons que vous utilisez l'image Pharo du MOOC \(actuellement une image Pharo 8.0\) dans laquelle ont été chargés des bibliothèques et des frameworks spécifiques pour le développement d'applications Web: Seaside \(le serveur d'application web à base de composants\), Magritte \(un framework de description pour la génération automatique de rapport\), Bootstrap \(la bibliothèque de rendu web\), Voyage \(un framework pour sauver vos objets\) et quelques autres.Vous pouvez récupérer l'image Pharo MOOC en utilisant le Pharo Launcher \([http://pharo.org/download](http://pharo.org/download)\).### Règles de nommageDans la suite, nous préfixons tous les noms de classe par `TB` \(pour TinyBlog\).Vous pouvez:- soit choisir un autre préfixe \(par exemple `TBM`\) afin de pouvoir ensuite charger la correction dans la même image Pharo et la comparer à votre propre implémentation,- soit choisir le même préfixe afin de pouvoir fusionner les solutions proposées avec votre code. L'outil de gestion de versions vous montrera les différences et vous permettra d'apprendre des changements. Cette solution est toutefois plus contraignante si vous implémentez des fonctionnalités supplémentaires par rapport aux corrections ou même différemment ce qui est fort probable.### RessourcesPharo possède de bonnes ressources pédagogiques ainsi qu'une communauté d'utilisateurs accueillante. Voici quelques informations qui peuvent vous être utiles.- [http://books.pharo.org](http://books.pharo.org) contient des ouvrages autour de Pharo. Pharo by Example peut vous aider dans les aspects de découverte du langage et des bibliothèques de base. Entreprise Pharo: a Web Perspective presente d'autres aspects utiles pour le développement web.- [http://book.seaside.st](http://book.seaside.st) est un des ouvrages sur Seaside. Il est en cours de migration en livre open-source sur [https://github.com/SquareBracketAssociates/DynamicWebDevelopmentWithSeaside](https://github.com/SquareBracketAssociates/DynamicWebDevelopmentWithSeaside).- [http://mooc.pharo.org](http://mooc.pharo.org) propose un excellent Mooc \(cours en ligne\) comprenant plus de 90 videos expliquant des points de syntaxes mais aussi de conception objet.- Sur la page Web [http://pharo.org/community](http://pharo.org/community) vous trouverez le lien vers le channel discord où nombre de Pharoers échangent et s'entraident.### RemerciementsLes auteurs remercient chaleureusement René Paul Mages pour sa relecture attentive de ce livre.
## A propos de ce livreTout au long de ce projet, nous allons vous guider pour développer et enrichir une application Web, nommée TinyBlog, pour gérer un ou plusieurs blogs. La figure *@TinyBlogOnPharoCloudHere@* montre l'état final de l'application. L'idée est qu'un visiteur du site Web puisse voir les posts et que l'auteur du blog puisse se connecter sur le site pour administrer le blog c'est-à-dire ajouter, supprimer ou modifier des posts.TinyBlog est une petite application pédagogique qui va vous montrer comment développer et déployer une application web en utilisant Pharo / Seaside / Mongo et d'autres frameworks tels que NeoJSON.Notre idée est que par la suite vous pourrez réutiliser cette infrastructure pour créer vos propres applications Web.### StructureDans la première partie appelée "Tutoriel de base", vous allez développer et déployer, TinyBlog, une application et son administration en utilisant Pharo et le framework Seaside ainsi que d'autres bibliothèques comme Voyage ou Magritte. Le déploiement en utilisant la base de données Mongo est optionnel mais cela vous permet de voir que Voyage est une façade élégante et simple pour faire persister des données notamment dans Mongo.Dans une seconde partie optionnelle, nous abordons des aspects optionnels tel que l'export de données, l'utilisation de templates comme Mustache ou comment exposer votre application via une API REST.Les solutions proposées dans ce tutoriel sont parfois non optimales afin de vous faire réagir et que vous puissiez proposer d'autres solutions et des améliorations. Notre objectif n'est pas d'être exhaustif. Nous montrons une façon de faire cependant nous invitons le lecteur à lire les références sur les autres chapitres, livres et tutoriaux Pharo afin d'approfondir son expertise et enrichir son application.Finalement, afin de vous permettre de ne pas abandonner si vous ne trouvez pas une erreur, le dernier chapitre vous permet de chargerle code décrit dans chacun des chapitres.![L'application TinyBlog.](figures/TinyBlogOnPharoCloud.png width=100&label=TinyBlogOnPharoCloudHere)### Installation de PharoDans ce tutoriel, nous supposons que vous utilisez l'image Pharo du MOOC (actuellement une image Pharo 8.0) dans laquelle ont été chargés des bibliothèques et des frameworks spécifiques pour le développement d'applications Web: Seaside (le serveur d'application web à base de composants), Magritte (un framework de description pour la génération automatique de rapport), Bootstrap (la bibliothèque de rendu web), Voyage (un framework pour sauver vos objets) et quelques autres.Vous pouvez récupérer l'image Pharo MOOC en utilisant le Pharo Launcher ([http://pharo.org/download](http://pharo.org/download)).### Règles de nommageDans la suite, nous préfixons tous les noms de classe par `TB` (pour TinyBlog).Vous pouvez:- soit choisir un autre préfixe (par exemple `TBM`) afin de pouvoir ensuite charger la correction dans la même image Pharo et la comparer à votre propre implémentation,- soit choisir le même préfixe afin de pouvoir fusionner les solutions proposées avec votre code. L'outil de gestion de versions vous montrera les différences et vous permettra d'apprendre des changements. Cette solution est toutefois plus contraignante si vous implémentez des fonctionnalités supplémentaires par rapport aux corrections ou même différemment ce qui est fort probable.### RessourcesPharo possède de bonnes ressources pédagogiques ainsi qu'une communauté d'utilisateurs accueillante. Voici quelques informations qui peuvent vous être utiles.- [http://books.pharo.org](http://books.pharo.org) contient des ouvrages autour de Pharo. Pharo by Example peut vous aider dans les aspects de découverte du langage et des bibliothèques de base. Entreprise Pharo: a Web Perspective presente d'autres aspects utiles pour le développement web.- [http://book.seaside.st](http://book.seaside.st) est un des ouvrages sur Seaside. Il est en cours de migration en livre open-source sur [https://github.com/SquareBracketAssociates/DynamicWebDevelopmentWithSeaside](https://github.com/SquareBracketAssociates/DynamicWebDevelopmentWithSeaside).- [http://mooc.pharo.org](http://mooc.pharo.org) propose un excellent Mooc (cours en ligne) comprenant plus de 90 videos expliquant des points de syntaxes mais aussi de conception objet.- Sur la page Web [http://pharo.org/community](http://pharo.org/community) vous trouverez le lien vers le channel discord où nombre de Pharoers échangent et s'entraident.### RemerciementsLes auteurs remercient chaleureusement René Paul Mages pour sa relecture attentive de ce livre.
Expand Down
7 changes: 3 additions & 4 deletions Chapters/Chap09-TinyBlog-SeasideREST-FR.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ Les tests seront dans le package `'TinyBlog-Rest-Tests'`.

### Notions de base sur REST


REST se base sur les verbes HTTP pour décrire l'accès aux ressources HTTP (https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html). Les principaux verbes ont la signification suivante:
REST se base sur les verbes HTTP pour décrire l'accès aux ressources HTTP [REST](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html). Les principaux verbes ont la signification suivante:

- GET pour lire une ressource,
- POST pour créer une nouvelle ressource,
Expand All @@ -20,7 +19,7 @@ Les ressources sont définies à l'aide des URL qui pointent sur une entité. Le

Une autre notion importante est le respect des formats de données acceptés par le client et par le serveur. Lorsqu'un client REST émet une requête vers un serveur REST, il précise dans l'en-tête de la requête HTTP la liste des types de données qu'il est capable de gérer. Le serveur REST se doit de répondre dans un format compréhensible par le client et si cela n'est pas possible, de préciser au client qu'il n'est pas capable de lui répondre.

La réussite ou l'échec d'une opération est basée sur les codes de statut du protocole HTTP (https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Par exemple, si une opération réussit, le serveur doit répondre un code 200 (OK). De même, si une ressource demandée par le client n'existe pas, il doit retourner un code 404 (Not Found). Il est très important de respecter la signification de ces codes de statut afin de mettre en place un dialogue compréhensible et normalisé entre le client et le serveur.
La réussite ou l'échec d'une opération est basée sur les codes de statut du protocole HTTP [REST](https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Par exemple, si une opération réussit, le serveur doit répondre un code 200 (OK). De même, si une ressource demandée par le client n'existe pas, il doit retourner un code 404 (Not Found). Il est très important de respecter la signification de ces codes de statut afin de mettre en place un dialogue compréhensible et normalisé entre le client et le serveur.

### Définir un filtre REST

Expand Down Expand Up @@ -338,7 +337,7 @@ Cette méthode permet la gestion des caractères spéciaux tels que l'espace ou
Si vous cherchez un post ayant pour titre "La reproduction des hippocampes", le service REST recevra en fait la chaîne de caractères "La%20reproduction%20des%20hippocampes" et une recherche avec celle ci ne fonctionnera pas car aucun titre de post ne coïncidera.
Il faut donc nettoyer la chaîne de caractères en remplaçant les caractères spéciaux avant de lancer la recherche.

Un autre point important est la gestion des codes d'erreur HTTP. Lorsqu'un serveur HTTP répond à son client, il glisse dans l'en-tête de la réponse une valeur numérique qui fournit au client de précieuses informations sur le résultat attendu. Si la réponse contient le code 200, c'est que tout s'est correctement passé et qu'un résultat est fourni au client (c'est d'ailleurs la valeur par défaut dans Seaside/Rest). Mais parfois, un problème survient. Par exemple, la requête demande à accéder à une ressource qui n'existe pas. Dans ce cas, il est nécessaire de retourner un code 404 (Not Found) pour l'indiquer au client. Un code 500 va indiquer qu'une erreur d'exécution a été rencontrée par le service. Vous trouverez la liste exhaustive des codes d'erreur sur la page décrivant le protocole HTTP (https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Il est très important de les gérer correctement tant au niveau de votre service REST qu'au sein de votre client REST car c'est ce qui va permettre à la couche cliente de réagir à bon escient en fonction du résultat du traitement exécuté par le serveur.
Un autre point important est la gestion des codes d'erreur HTTP. Lorsqu'un serveur HTTP répond à son client, il glisse dans l'en-tête de la réponse une valeur numérique qui fournit au client de précieuses informations sur le résultat attendu. Si la réponse contient le code 200, c'est que tout s'est correctement passé et qu'un résultat est fourni au client (c'est d'ailleurs la valeur par défaut dans Seaside/Rest). Mais parfois, un problème survient. Par exemple, la requête demande à accéder à une ressource qui n'existe pas. Dans ce cas, il est nécessaire de retourner un code 404 (Not Found) pour l'indiquer au client. Un code 500 va indiquer qu'une erreur d'exécution a été rencontrée par le service. Vous trouverez la liste exhaustive des codes d'erreur sur la page décrivant le protocole HTTP. Il est très important de les gérer correctement tant au niveau de votre service REST qu'au sein de votre client REST car c'est ce qui va permettre à la couche cliente de réagir à bon escient en fonction du résultat du traitement exécuté par le serveur.

Notre serveur web de recherche par titre est pratiquement terminé. Il nous reste maintenant à modifier le point d'entrée du service pour qu'il soit capable d'appeler le code métier associé.

Expand Down

0 comments on commit f5eca3d

Please sign in to comment.