Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kwiscale - Human Talk

Kwiscale - Human Talk

Présentation du projet Kwiscale, un framework en Go.
Démonstration préléminaire avant la version 1.

Avatar for Patrice Ferlet

Patrice Ferlet

October 13, 2015

Other Decks in Technology

Transcript

  1. Rappel - le langage Go Langage développé au sein de

    Google Typage statique Compilation binaire natif Concurrence géré nativement Efficace, rapide Facile (si !)
  2. Martini Simple et efficace, une route => une fonction p

    a c k a g e m a i n i m p o r t " g i t h u b . c o m / g o ­ m a r t i n i / m a r t i n i " f u n c m a i n ( ) { m : = m a r t i n i . C l a s s i c ( ) m . G e t ( " / " , f u n c ( ) s t r i n g { r e t u r n " H e l l o w o r l d ! " } ) m . R u n ( ) }
  3. Revel Productif, basé sur un système de contrôleur. # c

    o n f i g u r a t i o n c o n f / r o u t e s G E T / u s e r / : i d U s e r s . S h o w Contrôleur: f u n c ( c U s e r s ) S h o w ( i d i n t ) r e v e l . R e s u l t { u s e r : = U s e r B y I d ( i d ) r e t u r n c . R e n d e r ( u s e r ) }
  4. BeeGo Très complet, orienté Routeur et Contrôleur b e e

    g o . G e t ( " / " , f u n c ( c t x * c o n t e x t . C o n t e x t ) { c t x . O u t p u t . B o d y ( [ ] b y t e ( " h e l l o w o r l d " ) ) } ) Ou b e e g o . R o u t e r ( " / " , & c o n t r o l l e r s . M a i n C o n t r o l l e r { } )
  5. Alors pourquoi créer Kwiscale ? J'en avais envi pour étudier

    Go Parce que je trouvais pas mon bonheur (surtout à l'époque où j'ai commencé à coder Kwiscale) Parce que j'adore WebApp2 et le principe de Handler J'avais des concepts (de plugins, de performances...) que je retrouvais pas dans les systèmes existants Par défis !
  6. Crédo Kwiscale se veut: Simple à configurer (yaml, structure...) Adaptable

    (session dans les cookies ou dans memcache, changer de base de données sans impact, changer de moteur de template facilement, etc.) Compréhensible, on lit, on sait ce que ça fait Orienté "Handler": une structure (classe) a des méthodes nommées comme le verbe HTTP (Get(), Post()...) KISS pour de développeur de site
  7. Moderne Kwiscale doit: savoir servir des websockets être utilisé comme

    API (pour Angular par exemple) être scallable, notamment en ce qui concerne les sessions
  8. Installation D'abord, on installe le framework et le CLI: g

    o g e t ­ u g o p k g . i n / k w i s c a l e / f r a m e w o r k . v 1 g o g e t ­ u g o p k g . i n / k w i s c a l e / f r a m e w o r k . v 1 / k w i s c a l e
  9. Créer une application k w i s c a l

    e n e w a p p utilise - - p r o j e c t ou "$KWISCALE_PROJECT" pour savoir où créer l'application génère le répertoire et la configuration voilà...
  10. Créer des handlers k w i s c a l

    e n e w h a n d l e r i n d e x " / " k w i s c a l e n e w h a n d l e r u s e r s " / u s e r s " k w i s c a l e n e w h a n d l e r u s e r s " / u s e r s / { i d : \ d + } " Génère: la configuration de route dans config.yml les 2 handlers "IndexHandler" et "UsersHandler" modifie "main.go" pour ajouter les routes
  11. Résultat: Les routes dans la configuration La configuration générée: r

    o u t e s : / : h a n d l e r : h a n d l e r s . I n d e x H a n d l e r / u s e r s : h a n d l e r : h a n d l e r s . U s e r s H a n d l e r / u s e r s / { i d : \ d + } : h a n d l e r : h a n d l e r s . U s e r s H a n d l e r
  12. On modifie le handler Le handler Index par exemple: p

    a c k a g e h a n d l e r s i m p o r t ( " g o p k g . i n / k w i s c a l e / f r a m e w o r k . v 1 " ) f u n c i n i t ( ) { k w i s c a l e . R e g i s t e r ( & I n d e x H a n d l e r ) } t y p e I n d e x H a n d l e r s t r u c t { k w i s c a l e . R e q u e s t H a n d l e r } / / J ' a j o u t e l a m é t h o d e G E T , c e q u ' i l y a a u d e s s u s a é t é c r é é / / p a r l e C L I f u n c ( h a n d l e r * I n d e x H a n d l e r ) G e t ( ) { h a n d l e r . W r i t e S t r i n g ( " H e l l o ! " ) }
  13. Plugins ? Kwiscale propose un système de plugins pour contrôler:

    Les templates Les bases de données Les sessions
  14. Templates Le code ne bouge pas ! Dans le handler:

    h a n d l e r . R e n d e r ( " t e m p l a t e . h t m l " , m a p [ s t r i n g ] i n t e r f a c e { } { " i n f o r m a t i o n " : " F o o " , " m e s s a g e " : " B a r " , } ) De base, c'est un moteur "built-in" basé sur le package html/template de Go qui est utilisé, mais...
  15. ...on peut utiliser un autre moteur Par exemple, un addons

    pour les templates "Pongo2" (proche de Jinja ou Twig) existe déjà. Dans la configuration: t e m p l a t e : e n g i n e : p o n g o 2 d i r : . / t e m p l a t e s Dans main.go: i m p o r t ( / / . . . _ " g o p k g . i n / k w i s c a l e / t e m p l a t e ­ p o n g o 2 . v 1 " )
  16. Niveau ORM ? Ça avance... Attention, c'est "super alpha": sur

    le même principe que les templates, Kwiscale fourni une interface de requêtage. i m p o r t ( / / . . . _ " g o p k g . i n / k w i s c a l e / d b ­ m o n g o . v 1 " ) config.yml: d b : e n g i n e : m o n g o u r i : 1 9 2 . 1 6 8 . 1 . 1 n a m e : m y a p p Le plugin s'enregistre de lui-même dans le framework.
  17. Insertion t y p e U s e r s

    t r u c t { N a m e s t r i n g E m a i l s t r i n g P a s s w o r d s t r i n g } / / . . . h a n d l e r . A p p ( ) . D B ( ) . I n s e r t ( & U s e r { N a m e : " P a t r i c e " , E m a i l : " m e t a l 3 d @ g m a i l . c o m " , P a s s w o r d : e n c r y p t ( " X X X X X " ) , } )
  18. Requêtage u : = n e w ( U s

    e r ) / / R é c u p è r e l ' u t i l i s a t e u r h a n d l e r . A p p ( ) . D B ( ) . F i n d ( k w i s c a l e . Q { " n a m e " : " P a t r i c e " , } ) . O n e ( u ) f m t . P r i n t l n ( " N o m : " , u . N a m e )
  19. Sessions De base, c'est un cookie crypté (très utile dans

    des applications scallées) mais... ... comme les templates, et les bases de données, on peut implémenter son système. Par exemple, un plugin pour les sessions dans "memcache" existe déjà:
  20. Session dans memcache i m p o r t (

    / / . . . _ " g o p k g . i n / k w i s c a l e / s e s s i o n ­ m e m c a c h e . v 1 " ) Configuration: s e s s i o n : e n g i n e : m e m c a c h e o p t i o n s : s e r v e r s : ­ 1 9 2 . 1 6 8 . 1 . 1 : 1 1 2 1 1 ­ 1 9 2 . 1 6 8 . 1 . 2 : 1 1 2 1 1
  21. Lire/écrire une variable de session / / É c r

    i r e h a n d l e r . S e t S e s s i o n ( " n a m e " , " F o o " ) / / L i r e n a m e : = h a n d l e r . G e t S e s s i o n ( " n a m e " )
  22. L'avenir proche Fixes et tests (y'en a déjà) Corriger la

    doc Mise en ligne de la V1 Un Site D'ici le 18/10/2015...