Salut. Donc bienvenue dans ce cours.
Là, ce que je vais vous montrer c'est 2 aspects, je ne
vais pas aller en profondeur dedans, de toute façon vous
allez les faire lors des exercices avec Tiny blog.
C'est, qu'est-ce qu'on peut faire une fois qu'on a des
données qu'on a décrites pour faire du développement web?
Et comment est-ce que Seaside fait du REST, c'est un des
frameworks pour faire du REST en Pharo.
Vous allez voir, c'est relativement élégant.
Donc commençons par le premier sujet.
Magritte c'est un framework qui fait l'hypothèse de dire
: si vous décrivez vos données, à ce moment-là je vais
pouvoir générer des choses basées sur ces données.
Je vais pouvoir par exemple générer des formulaires,
générer des interfaces graphiques. Et c'est ce que je vais vous montrer.
Donc là en particulier, dans le cours, je vais vous
montrer comment est-ce qu'on peut générer des composants
Seaside, qui vont vous permettre de faire des
applications Web plus rapidement.
Ok donc si on voit, par exemple, on a une classe, la classe Address.
Donc ça c'est des adresses en Suisse.
Qu'est-ce que c'est qu'une adresse ?
C'est une rue, un endroit, un code postal et puis un
canton par exemple.
J'ai une instance qui décrit une rue particulière, donc
rien de spécifique.
C'est juste de la programmation, juste standard.
maintenant ce que Magritte va faire, Magritte va décrire
les champs de cette classe de la manière suivante.
On va avoir une description de chaîne qui va nous dire:
ça, c'est le nom de la rue.
Donc ce qui est plus intéressant c'est la description du code postal.
Le code postal en Suisse, déjà premièrement on dit que
une adresse n'est valide que si le code postal est spécifié.
Si je ne spécifie pas de code postal je vais dire que l'adresse
n'est pas valide. Et en Suisse, les codes postaux
commencent entre 1 000 jusqu'à 9 999.
Et donc là, on le décrit dans la description et on va
pouvoir prendre en compte cette information pour faire de
la validation automatique de formulaires.
Bon après pour l'endroit on va dire qu'il est requis et
puis que c'est place. Et l'autre chose par exemple en
Suisse, vous avez 26 cantons, ce qu'on va dire c'est que
le canton c'est un énuméré, donc c'est pour ça qu'on a un
single option description, il est requis, on veut qu'il
soit à trier et les options vont être listées.
Donc on va donner la liste, l'énumération de tous les
cantons suisses, il ne pourra pas y en avoir un autre.
Une fois qu'on a fait ça qu'est-ce qu'on va pouvoir faire avec Magritte?
Alors comment on le décrit en Pharo ?
On va donner ce genre, on va dire: j'ai une description Street.
La description Street, c'est une stream description.
Elle a cette étiquette, cette priorité.
Pour les nombres, je vais dire: c'est une description de nombres.
Je vais avoir une autre priorité, une étiquette.
Je dis qu'elle est requise et puis je vais donner mes valeurs de borne.
Maintenant qu'est-ce que je peux faire avec ça?
La première des choses que je peux faire, je ne vais pas
aller dans le détail du code, mais ce que je peux faire
je peux écrire un tout petit programme qui est en fait un
interprète, qui va me générer des rapports.
Ça veut dire que là, étant donné une adresse, je prends
une adresse, j'ai ce petit programme qui va me générer
par exemple un petit rapport qui va dire: la rue, elle s'appelle
Schutzenmattstrasse. La ville ça va
être Berne, le canton c'est Berne et le code postal 2012.
Donc je vais pouvoir utiliser le fait que mes données
sont décrites pour pouvoir générer des rapports.
Donc là c'était le plus débile qu'on puisse faire.
Mais donc ce qu'on va faire maintenant avec Seaside, je
vais créer un composant visuel Web.
Donc là, je dis: tu es un objet adresse, je veux te voir
comme un composant.
Donc ça ça va générer cette partie-là.
Je vais ajouter une forme pour faire de la validation,
donc ça ça va m'ajouter le Save et Cancel.
Et je vais faire un call donc je vais l'afficher à l'écran.
Et donc ce que vous voyez c'est que là je n'ai pas
manipulé, je n'ai même pas utilisé le DSL de Seaside pour
décrire mes composants Web, ils sont générés automatiquement.
Et ça c'est super puissant.
Donc je voulais vous montrer, par exemple, la société
Cuve, qui est une société qui fait une gestion de portfolios aux U.
S, tout ce que vous voyez à l'écran c'est tout fait avec
Seaside et avec Magritte. Tous les rapports en fait sont
générés automatiquement. Et ça, ça a un gain de productivité sérieux.
Donc l'idée de ce cours, c'était vraiment de vous donner
l'intuition de qu'est-ce qu'on peut faire quand on a des
données qui sont décrites et en particulier dans la
génération de composants Web.
Donc vous en ferez dans Tiny blog.
Maintenant ce que je vais vous montrer c'est que Seaside
a aussi une couche REST, pour faire de la communication
client/serveur sans passer forcément par des composants
visuels, et donc l'intégration de REST dans Seaside est vraiment élégante.
On va annoter en fait des objets de notre domaine et on
va avoir une conversion entre les paramètres d'URL et les
méthodes Smalltalk ou Pharo.
Donc comment on fait ?
Pour vous donner une idée de la complexité, en fait ce qu'on
fait c'est que on va définir ce qu'on appelle un filtre,
donc là je définis Tiny blog REST fulFilter qui est une
sous-classe de WARestfulfilter, peu importe.
Et puis la chose intéressante c'est que je vais ajouter
un filtre quand je crée mon application là en bas.
Donc ça vous le verrez dans l'exercice de toute façon.
Et maintenant, imaginons que je veuille par exemple avoir
toute la liste de tous les blogs que j'ai sur mon serveur Tiny blog.
Comment je vais exprimer ça ?
Je vais exprimer ça de la manière suivante.
Je vais définir une méthode dans la classe Restfulfilter,
qui s'appelle listAll, et qui correspond en fait à l'encre
que je vais utiliser.
Et je lui dis: toi tu as un get pour le protocole rest
et tu vas me générer du texte mais sous forme Json.
Et là, je vais écrire ce que je vais faire.
Donc là, je lui dis: je crée une stream Pharo.
Dans cette stream je vais prendre tous les blogs qui sont
disponibles, je vais prendre chacun des blogs, donc vous
voyez encore un itérateur. Je vais prendre chacun des
blogs et puis je vais le convertir en Javascript et je
vais les séparer par des virgules.
Et donc j'obtiens bien ce que je voulais.
Donc maintenant on voudrait faire quelque chose d'un petit peu plus avancé.
Imaginons que moi je veuille trouver un blog.
Je veux trouver donne-moi le blog qui correspond à un titre.
Donc là je vais utiliser, par exemple le post et puis je
veux dire: je veux ce blog post en donnant le titre à côté.
Donc comment est-ce que je vais faire?
Je vais définir une méthode Post qui prend un titre en
paramètres, et j'ai la notion de chemin.
Donc je vais dire: attention, quand dans l'URL vous avez
http quelque chose post avec quelque chose
ici, ce quelque chose ça sera le titre et c'est ce qu'on
voit ici avec les parenthèses.
Et là, de la même manière, je dis: attention ça va
produire du texte qui est formaté sous forme Json.
Et donc vous voyez, donc là, ce que je fais c'est que j'appelle
les fonctionnalités de Tiny blog.
Je dis: est-ce que tu as un post avec un titre qui est
spécifié en paramètres ?
Oui. Si c'est vide, je rends une erreur et puis sinon ce
que je fais, je vais le mettre dans ma stream et je rends ma stream.
Donc il y a d'autres choses, je vais juste montrer rapidement.
Si je veux faire un search ça sera pareil.
Si dans mon URL, je
tape "search title" et que je mets une valeur,
automatiquement ça sera matché, donc mon titre ce sera la même chose.
Et donc j'aurai mon titre ici.
Donc voilà la manière en fait de faire du REST dans Seaside.
Ça veut dire que dans Seaside vous pouvez avoir vos
composants graphiques, et d'un autre côté vous allez
avoir la possibilité d'exposer vos fonctionnalités de
votre domaine via une API REST.
Alors là je vous ai montré que des get mais en fait vous
avez l'API, vous avez toutes les fonctionnalités REST qui
sont disponibles, comme delete, post, get et puis les autres.
Ce que je vous ai montré aussi c'est que Seaside,
finalement, couplé avec Magritte, vous permet de faire
des formulaires extrêmement puissants et rapidement, et
que c'est bien intégré.
Donc sinon, il y a une autre solution pour faire du REST.
Les gens utilisent souvent Teapot, qui est une surcouche
as in pour faire du REST, pour faire des prototypes très
rapides, pour voir si leur API REST fonctionne.
Donc là, vous pouvez aussi vous amuser avec, c'est un
petit package et il y a une doc de Web enterprise book.