 OK, je vais parler de la façon dont nous pouvons construire une application web avec AWAR. Alors, qu'est-ce que l'application web ? Une simple définition est un programme client-server où nous avons un browser qui est un client. Un exemple typique est Gmail, Dropbox, Netflix, Zoho, qui est un système de programme management. Donc, l'application web contène plusieurs parties. Vous avez, sur l'un de l'autre, votre client-brother, qui est sur le côté desktop. Et puis, vous avez un part-server qui contène deux ou trois e-months. Une front-end, qui est en général responsable de la randonnée, de la présentation. Vous avez en général des back-ends qui sont responsables d'avoir les données de la base de la database. Et à la fin, vous avez la base de la database. Donc, tous ces components participent ensemble pour provider le service à votre client. En général, nous avons différentes technologies utilisées. Sur le client et le browser, vous avez des JavaScripts, HTML, CSS, qui sont downloadés par le service front-end, et qui sont exécutés sur le browser. Sur le front-end et le back-end, dans beaucoup de cas, c'est PHP ou JavaScript, parfois Ruby et Java. Donc, vous avez beaucoup de frameworks qui choisissent ces langues. Et sur la base de la database, vous avez SQL et non SQL. Qu'est-ce qui est un problème avec l'application web? Ils ont des données, ok? Ils ont vos données. Et ils doivent protéger les données que vous avez. Protecter les données signifie que sur la partie front-end, quand les données arrivent, vous devez valider ce qui est donné à vous comme l'input. C'est la partie de la validation. Le second problème est d'authentiquer les utilisateurs. Quand vous avez un utilisateur qui vient au service, vous devez authentiquer cet utilisateur. Et la dernière partie, une responsabilité de back-end, c'est que vous devez autoriser l'accès aux données protègées. Vous devez faire sure que vous ne cliquez pas sur l'accès aux utilisateurs par la preuve d'un utilisateur inoffraide pour accéder aux données safe. Ce sont les trois problèmes que vous devez prendre. Un petit peu sur la histoire de projet. Le projet a été créé en 2011. Ce n'est pas un nouveau projet. C'est basé sur ma expérience en réveillant l'application d'application d'application qui s'appelle Planson, qui est encore en train. En basant sur G2E et la surface Java, j'ai emmené beaucoup de technologies de Java. Java a beaucoup d'applications qui ont aidé en créant des services web et d'application web. La idée était d'être capable de bénéficier de toutes ces technologies, mais dans Ada. Ada a donné plus de santé aux applications, plus de performances, plus de mémoire, le but était de pouvoir construire ce genre de service de software mais en Aida. Exemple de l'application, il y a plusieurs. Je dois avoir mon site blog, on a Ada France, qui est aussi en train de faire le AWA. Il y a un démonstrateur, qui est appelé Atlas, qui vous permet de voir les features possibles par AWA. Jazzone, qui est un projet et un ticket management système, qui vous permet d'améliorer le projet. Toutes ces applications sont writtenes sur top de AWA. Qu'est-ce que l'architecture AWA? A l'arrière-bottom, vous avez l'apparition de l'appareil. Il fonctionne sur NetBSD, FreeBSD, Linux, Windows. Ensuite, vous avez un layer de database. Vous avez MySQL, Postgres et SQLite. Toutes ces components existent que vous pouvez obtenir facilement et qu'ils ne sont pas writtenes sur Aida. Et sur top de ça, nous avons plusieurs components à Aida, qui prennent l'architecture AWA. Tout d'abord, nous avons Aida WebServer, qui est le fameux WebServer par la communauté. XML Aida, pour pouvoir lire les files XML. Nous avons un nombre d'utilités Aida libraires que je vais décrire. Aida Servlet, j'ai pris beaucoup de specifications Java et j'ai implementé cette specification en Aida. C'est un cas pour Aida Servlet qui est similaire à Java Servlet. Aida Servers Faces, qui est similaire à Aida Servers Faces. Aida Security est une partie que je vais parler beaucoup de comment informer la sécurité dans l'application. OpenAPI Aida est un projet que j'ai présenté l'année dernière. Aida Database Object est ce que j'ai présenté au début de l'après-midi. Et au-dessus de ça, vous avez une application Aida Web qui vous donne un nombre de features qui vous permet de construire votre propre application. Alors, ce sont les features qui se produisent. Il y a plusieurs parties. Il y a des compétences que vous pouvez utiliser. Il y a des compétences systèmes et des compétences fonctionnelles. Les compétences générales sont des compétences que vous pouvez utiliser comme c'est et elles ne sont pas dépendantes avec les autres. Les compétences systèmes ne proviennent pas d'une fonctionnalité utile. Elles sont juste pour aider le système à travailler. Manager les utilisateurs, manager les mails, manager les permissions, avoir des jobs background et avoir des compétences fonctionnelles. Les compétences fonctionnelles sont des compétences qui proviennent d'autres choses pour l'utilisateur. Il y a des compétences wiki qui vous permet d'insérer les pages, les images, etc. Les blogs sont des systèmes qui vous permettent de poster les articles. Et nous avons aussi d'autres que je ne vais pas vous décrire. Ok, c'est-à-dire qu'est-ce que notre réquest? Qu'est-ce qui se passe sur le site de service quand nous avons une réquest qui vient. Les clients parlent de l'HTTP GET operation. Cette GET operation est installée par AWS. Et puis, nous entrons dans le serve-let world des mécanismes défis par le standard Java. Et à la fin, nous avons une GET operation qui est appelée sur le serveur FACES serve-let, qui est la dernière partie qui rendra la réquest. Ensuite, nous avons des ADABINs. C'est un object adab qui sera créé dynamiquement. Et cet object sera fabriqué par des services ADABINs par l'application de la operation de site. Quand l'Adabin est fabriqué par les paramètres d'input, vous avez une operation load qui est appelée et qui va vous permettre de faire du travail, de faire des actions et d'actuellement degrer les données et de retourner la valeur. Et la dernière partie est pour la rendition qui est que nous avons fait une réquest. Nous avons des données de la base de la database et nous devons former le résultat pour le retourner dans l'HTML ou quelque chose. Et les services ADABINs nous utilisons des valeurs pour obtenir des informations de l'Adabin. Le problème 1, comment nous validons les données ? Les données viennent par des paramètres de l'HTTP qui sont une ligne. Donc il doit être validé, vérifié et parce que nous utilisons un type d'adabin, cela aide dans le processus de validation. Donc les faces d'adabin quand l'application est appelée, il y a un paramètre qui est une ligne. Une ligne peut être quelque chose. Il doit être validé la valeur. Ensuite, il sera appelé la valeur de l'adabin. Et dans cette transition nous convertir la ligne dans un type d'adabin, un flow de date, ça pourrait être une ligne, bien sûr. Et c'est ce processus de validation que nous verrons. Un petit petit truc sur les faces d'adabin. Donc, c'est une implementation de GSR344. Donc, c'est un framework de contrôle model, mais c'est basé sur les compétences. Chaque rondeur HTML, XML, JSON, mais aussi ADA. J'ai utilisé ça pour générer la code ADA. Et le framework aide à valider l'input. Il utilise XML pour décrire le contenu. Je vais vous montrer. Donc, quand vous commencez avec les faces d'adabin, vous avez un XML file. Ici, vous avez un extract de cette XML. Donc, c'est standard avec Java. C'est un système basé où vous pouvez pluger vos propres compétences. Par exemple, Ewa wiki est une compétences URI qui est faite par la compétences wiki. Et qui permet de faire des textes, un texte de l'input de l'HTML. Donc, ce qu'on voit ici, c'est que nous avons seulement des textes, mais nous avons des références. Par exemple, ici, j'ai WikiView.content. C'est une référence. Et nous avons à faire un lien entre ceci et ceci. Donc, pour ceci, ce que nous avons fait c'est d'implementer le JSR245 d'un autre Java standard qui nous permet d'accesser des contents d'une simple présentation. Donc, j'ai une petite expression EL. Donc, j'ai un objet qui s'appelle WikiView. Et de cet objet, j'ai un attribut qui s'appelle TITAL. Et ici, j'ai un code qui contient mon TITAL. Et le purpose de l'EL est d'être capable de retirer la valeur que j'ai sur l'autre côté. Vous devez savoir que Java fait tout cela par utiliser l'introspection. Donc, l'introspection n'est pas possible, on n'est pas capable de prendre un objet et de voir ce que l'on attribute, ce sont ses méthodes. Donc, nous avons besoin d'un mécanisme. Donc, ce que j'ai fait c'est j'ai inventé ces adabins. Donc, c'est un système simple où vous devez simplement impliquer une interface bin. Et la interface bin doit être impliquée par votre type. Et vous devez juste impliquer une seconde opération, une opération de valeur gait qui vous donne un nom, qui est le titre que j'avais parlé de. Et ça retient la valeur qui est associée à ce nom. Et la seconde opération est cette valeur qui vous donne un nom, un titre ou quelque chose, et vous updates ce nom. Le adabin, parce que nous avons besoin d'un type générique. La valeur est insertée dans un type objet qui est là, qui est en fait un type spécial qui vous permet de poursuivre un type que vous voulez, un intérieur, un string, un date, un bain, qui signifie que vous pouvez transporter et naviguer de l'un bain de l'autre, de l'autre, de l'autre, etc. Tout ceci par la protection de type. Donc, à quel point même si vous avez un objet, vous pouvez le savoir de ce type. C'est fortement type. La deuxième partie est que nous voulons pouvoir nous appeler sur cela. Nous voulons être capable de spécifier que sur la présentation de vue nous voulons appeler l'opération de load. Donc pour cela, le bain a dû impliquer l'interface de method bain et cet interface a dû éterner un table de les opérations possibles par le bain. Cela signifie beaucoup d'opérations qui sont assez complexes. En fait, Dynamo, le code générateur est capable de générer beaucoup de choses et j'ai mis en exemple la pièce de code que ça génère pour créer un binding qui sera capable d'utiliser pour appeler l'opération de load. La dernière partie est que nous avons besoin d'un bain factory. Dans le modèle, nous avons créé un objet et nous voulons créer pour cela, nous devons créer une fonction. C'est créer WekiVueBin et ensuite vous réagissez cette fonction dans un bain factory et vous associéz cette fonction avec un nom le nom que vous avez ici. Et puis sur la partie de configuration que nous avons dans XML vous devez déclarer des manages bin XML. C'est exactement ce que vous faites en fait dans Java Server Faces c'est la même thématique la même définition. Vous déclarez en XML le fait que je veux un bain qui s'appelle WekiVue donc c'est le nom que je donne à mon objet et le bain factory pour créer donc c'est la fonction que j'ai enregistrée à ce niveau. Ok, donc si nous revenons à cette partie de XML que nous avons dans la présentation nous avons un param avec une idée. Nous avons une question qui vient. Nous avons un paramètre de page et nous voulons que ce paramètre populate le nom de WekiVue Ok, donc ce qui va s'occuper c'est d'abord, nous verrons avant de coller le setValue, nous verrons que le paramètre est correct, la première seconde chose, nous avons besoin d'un objectif WekiVue donc nous allons créer l'objectif avec un bain factory puis nous allons coller un setValue avec un objectif que nous savons que le setValueOperation est capable de créer une exception. Donc ici, si la validation perd, le setValue n'est pas appelé et nous sommes revenus. Quand nous avons la valeur sur l'objectif, nous avons toujours la possibilité de créer une exception et aborder le complet appel. Et la dernière partie est que nous sommes appelés à cette action. Donc nous voulons coller la méthode sur l'objectif. Cette méthode fera son travail et il peut aussi créer une exception. En ce cas, il sera en bas aussi par le système. Donc, comment nous validons le data ? Nous avons beaucoup de points où nous faisons des contrôles avant de convertir la valeur. À la fin, nous convertons la valeur dans un type adder donc nous renforçons le type strong. Avec le objectif adder que nous voulons exposer, nous devons expliquer explicitement ce que l'opération et ce que les attributs sont disponibles dans le layout de la présentation. Et le setValue est appelé seulement quand tout est correct. Autantique des utilisateurs. C'est la seconde partie. Vous ne voulez pas que quelqu'un accélère le data. Vous devez authentiquer votre utilisateur. Vous devez identifier vos non utilisateurs et obtenir le crédential pour ces utilisateurs. A l'autre hand, vous devez avoir un processus de registration pour les utilisateurs qui ne sont pas partie du système. Pour cela, IWA donne le module des utilisateurs qui est un module du système pour les utilisateurs authentiqués avec deux mécanismes. La première est OpenID qui vous permet de connecter sur Google, Facebook, etc. Et la deuxième est plus traditionnelle. Elle est avec email et password. Il y a aussi un mécanisme d'inviter d'autres utilisateurs par envoyer un lien qu'ils vont aller dans le système. Et tout cela avec une clé sécuritaire qui permet de vérifier que vous êtes vraiment obligés de le faire. Donc, le module d'utilisation donne un nombre d'informations un nombre de tables de database. Ici, nous avons une table d'utilisation qui contient les utilisateurs dans l'application. Et nous avons une table de session qui est updates pour contrôler les utilisateurs qui connectent au système. Donc, vous pouvez contrôler et contrôler les utilisateurs qui connectent à l'application et voir si ils sont obligés de connecter ou pas. Et la dernière, vous avez email qui est relative à votre utilisateur et un access key qui est un access key pour vérifier que les utilisateurs sont obligés de connecter au système. AIDAR Security C'est un composant C'est un projet standard qui implementa OpenID Connect qui est un standard. OpenID Connect est un framework d'authentification qui est construit en OAuth. Et c'est un mécanisme en fait, qui vous permet d'authentifier avec Google, Facebook, Twitter et d'autres. Donc, ensemble avec un module et avec l'AIDAR Security module vous pouvez authentiquer aux utilisateurs. Donc, c'est la première partie de vérifier qui accesse les données. La dernière problème est l'autorisation de l'access qui fait surement que les ressources que vous avez dans votre database ont un grant pour accessiser la ressource. Donc, vous devez vérifier ceci avant de donner l'access, avant de donner de l'accessité pour les utilisateurs. Donc, dans le processus d'authorisation il y a plusieurs places où nous pouvons prendre soin de ça. La première partie est dans un filtre servo donc le filtre servo obtient le request et est capable de regarder l'URL et implementer la check-in qui est si vous décidez que un utilisateur n'est pas obligé d'accesser la page vous pouvez refuser la permission et refuser le GET request. La seconde partie est à le niveau business quand vous retirez les données vous devez vérifier si ce utilisateur fait le crédential pour les utilisateurs d'accesser les données et si ce n'est pas le cas vous devez aborder tout. La dernière partie est quand vous rentrez des contenus quand vous rentrez les résultats pour l'usage c'est utile d'avoir la permission de vérifier dans l'accessité de prendre des features dont l'usage n'est pas obligé ou des features qui n'est pas obligé de faire. Il y a quelques concepts sur la sécurité donc ces trois concepts sont très utilisés dans la fréquence de sécurité de la sécurité. Les managers de la police et de la police sont les composants qui renforcent la sécurité. Ils défendent les règles sur comment vérifier que l'accessité est garantie ou pas. Le principal est le crédential qui est donné à un utilisateur. C'est la partie qui identifie votre utilisateur et qui est correct. La permission est l'action que nous voulons protéger qui qualifie l'accessité de la ressource. La sécurité de l'accessité de la sécurité de la sécurité donne plusieurs policiers qui renforcent la sécurité. Ils décrivent plusieurs policiers de sécurité. Il y a un mécanisme pluggable qui va offerter l'accessité à l'accessité basée sur la police qui veut vérifier. Quand le utilisateur s'authentique le utilisateur s'authentique par l'idée open par exemple. Le résultat de cette authentication est le principal. Il identifie l'utilisateur en termes de crédential. Sur l'autre on a les policiers qui définissent les règles sur comment vérifier la permission. Les policiers sont renforcés par le contrôleur de la police. Le contrôleur de la police est le mécanisme qui vérifie que la permission est allée ou pas. Le contrôleur de la police regarde le contexte de la sécurité en termes de principes et de capacités pour ce client. Et si le contrôleur de la sécurité voit que des capacités sont mises sur ce client il peut dédailler l'accessité. Les policiers de la sécurité peuvent être configurés sur la police de la sécurité. Le framework de sécurité de l'aida donne une simple police que vous pouvez configurer. Ici j'ai mis un exemple de la police de contrôleur de la police qui est offert par AWA. Pour impliquer une nouvelle police c'est très simple. Il faut simplement impliquer l'interface de contrôleur. C'est une interface limitée. Vous êtes free d'impliquer. Ce que vous avez à faire c'est simplement impliquer la function d'accessité. Dans cette function d'accessité vous avez un contexte de sécurité qui vous dit qui veut accéder à la ressource et vous avez la permission qui vous dit quelle ressource l'utilise va accéder. Vous décidez si ou non ou pas. La déclaration de permission est aussi simple que l'instancation d'un package aida. Vous avez juste l'instancation de la définition et vous donnez un nom. Avec cette instantiation dans l'accessité d'aida j'ai créé ma permission. Maintenant, c'est l'accessité d'aida et nous devons configurer cette permission. Et pour configurer cette permission nous allons le faire en XML. Et c'est un endroit où vous décidez je veux utiliser la sécurité ou je veux utiliser la sécurité de l'entité. Avec la permission de l'entité je vais dire que la permission de la création est garantie si l'utilise a l'admin de l'entité. A l'autre hand avec la permission de l'entité c'est garantie si l'accessité d'aida revient quelque chose revient donc c'est pour la définition de la permission et la check est aussi très simple sur l'aida quand vous check la permission cela acte comme une barrière. Le code qui est après la check est exécuté si vous avez la permission. Donc avec un simple call A word permission check vous savez que après cela l'utilise a la permission de suivre. Sur la présentation c'est un XML qui est installé en fastlet file et ce contenu est rendu seulement si la permission est garantie à l'utilise. Donc avec cela nous pouvons déclarer la permission de l'aida et nous pouvons configurer et nous pouvons check la permission et bloquer l'accessité de l'utilise et nous pouvons également évoquer des données et des portions quand nous rendons les réponses. Tout cela est construit avec Dynamo qui est le code générateur que j'ai présenté un petit peu avec l'aida database object. Dynamo contient un nombre de commandes qui vous aide à commencer votre projet. Vous pouvez créer votre projet avec un simple commande comme celui-ci. Il va créer un projet que vous pouvez construire et puis vous pouvez commencer et vous avez immédiatement un serveur qui est en train d'appuyer avec tout le framework. Ici un exemple vous avez l'aider à ajouter des pages l'idée de tout ce commande c'est d'éviter le syndrome de blank page où vous commencez votre projet et vous ne savez pas où vous avez ce qui est la prochaine action pour procéder. Pour ajouter un nouveau module qui est plus complexe c'est ajouter un code aida ajouter un file présentation c'est facilement fait avec ce commande et ma dernière slide donc pour ajouter notre texte d'application de sécurité d'abord par valider l'input l'input que l'utilisateur a soumise second il va renforcer l'input fort dans la validation mais aussi quand vous portez le data dans le database j'ai expliqué dans la présentation aida il va donner un framework d'authentication qui vous permet d'authentifier vos utilisateurs et il va vérifier l'accès aux ressources et enfin vous avez le guide de notre programme que vous pouvez utiliser pour commencer merci en comparaison avec Java oui j'ai fait une comparaison de benchmark pas sur la framework aida j'ai fait un benchmark sur l'application rest qui utilise la framework servlet que j'ai présentée basé sur j'ai comparé java grisly c'est une machine z2e j'ai comparé AWS avec un access direct et java servlet aussi je n'ai pas la picture ici il y a 10% de bénéfices en utilisant au rapport à java en termes de speed maintenant en termes de mémoire c'est énorme en java il y a 500MB de mémoire ici il y a 10MB de mémoire pour pour le service en fait donc l'impact sur la mémoire est énorme l'impact sur la performance j'ai observé seulement 10 à 20% mais je n'ai pas fait de mémoire sur la part servlet pour comparer java servlet vers la servlet je n'ai pas fait ça mais ça serait intéressant de le faire si vous avez un compiler un compiler, oui pourquoi pas si vous avez 3 compilers que je peux utiliser je serai heureux de faire le port ou de l'aider en portant non non oui, vous pouvez je vous recommande d'utiliser SQLite SQLite est très bien parce que c'est un file database en fait SQLite donne une très très bonne performance pour des petites databases j'ai un autre benchmark qui montre que SQLite est 10 à 20 fois plus que ma SQL sur les petites databases avec une grande database ce n'est pas le cas mais c'est le meilleur pour continuer à utiliser un database même comme SQLite parce que vous bénéficiez de tous les modèles que j'ai présentés tous les codes générations qui vous permettent de map directement le contenu SQL dans l'aider c'est difficile c'est difficile parce que quand vous avez des requises qui viennent il y a des objets que vous devez créer dynamiquement parce que vous ne savez pas que les objets ne peuvent pas être réveillés et qu'ils doivent être créés pour des requises ce que vous pouvez faire c'est que votre serveur recevra seulement une requise web à un moment et c'est monos Reddit et en ce cas vous pouvez avoir un instant et un instant statique pour tous les adabins que j'ai présentés et c'est possible pour limiter oui, pour être honnête je n'ai jamais utilisé je n'ai jamais utilisé il y a deux questions personnellement comment vous pensez personnellement c'est utilisé en production l'adab France website est en train mon site blog est aussi en train pour 4 ans non, c'est vraiment très stable et ce qui est j'ai eu la chance de développer Aida parce que j'étais frustré par la consommation de Java le fait que Java consomme beaucoup de souvenirs une deuxième c'est que je n'ai pas le temps d'expander par avoir tout dans Aida en fait, j'ai réalisé je n'ai pas le temps d'expander en fait parce que je compile et c'est presque correct bien sûr, il y a des bugs mais fixer les bugs est vraiment, vraiment facile et je suis vraiment confiant d'avoir quelque chose parce que c'est le travail que le compiler a fait et parce que j'ai essayé de utiliser beaucoup de types limités pour poursuivre les copies j'ai essayé de utiliser des types privés pour conserver les détails de l'implementation pour que ce n'est pas exposé à d'autres parts donc quand je dois refactor quelque chose je sais que que le compiler va me dire qu'il s'arrête ou le data est simplement pas exposé donc je sais que par construction il n'a pas impacté quelque part du système donc la prochaine de ma liste est GraphQL j'ai présenté l'année dernière REST API avec Swagger donc REST API est en train de faire l'application avec REST API maintenant il y a plus de standard qui est GraphQL avec REST API si vous voulez des utilisateurs si vous voulez des messages pour les utilisateurs vous allez faire un autre réquest donc vous allez faire un réquest et puis un autre et ainsi avec GraphQL les utilisateurs et leurs messages et leurs emails et ceci vous créez votre query et le serveur crée le query et vous donnez dans un réquest tout le monde donc c'est un challenge parce que c'est en termes d'implementation vous devez impliquer vous ne savez pas quelle est la query en fait quand ça vient donc c'est un vrai challenge et je suis intéressé dans ce challenge oui, en fait avec Java Server et d'autres services sont vraiment similaires j'ai utilisé exactement les mêmes compétences j'ai essayé d'utiliser exactement les mêmes compétences donc j'utilise l'Ide l'intelligie IDE et en fait par avoir les mêmes technologies que nous avons dans Java c'est aussi plus facile en fait d'utiliser les tools Java bien sûr, les tools Java seraient possibles mais il y a beaucoup de fonctionnalités que les tools Java offert pour les développeurs qui en fait je peux réutiliser parce que j'ai utilisé la même façade et la même cycle de vie dans le mécanisme de Java Server