Event
Par 29 octobre 2020

Le forum PHP 2020 s’est tenu cette année en ligne pour s’adapter au contexte actuel. Il n’en a pas été moins intéressant puisque plus de 30 conférences ont été tenues sur 2 jours. L’AFUP fêtait cette année ses 20 ans, et Dedi a eu la chance d’être sponsor de l’événement 2020 ! Dans cet article, nous vous emmenons au cœur du forum avec 5 points à retenir de ces deux journées.

1 – Une version 8 pour PHP

La conférence présentée par Gabriel Caruso, Release Manager de la version 8 de PHP, nous présente les évolutions à venir pour cette nouvelle version. Pour rappel, la sortie de cette mise à jour est prévue pour le 26 novembre 2020. Il convient donc de se tenir informé pour prendre avantage des nouveautés de cette version.

Ajout d’Union Types

Parmi les évolutions, l’ajout des Union Types permet aux développeurs de rendre leurs algorithmes plus robustes grâce à un typage fort. Les vérifications de type manuell peuvent être oubliées au profit des Union Types natif au langage.

Nouvelle expression Match

La nouvelle expression Match inspirée d’autres langages, introduit une syntaxe similaire à l’expression Switch avec une sémantique plus courte et la possibilité de retourner une valeur.

Named Arguments

Les arguments nommés (Named Arguments), permettent une meilleure clarté dans le code. Ils seront particulièrement utiles lors de la création de DTO (Data Transfer Object) ou encore lorsque l’on souhaite passer seulement certains paramètres optionnels à une méthode.

Attributs

Les attributs peuvent être vus comme un système similaire aux annotations Doctrine, mais qui sont natifs au langage. Cela signifie que les attributs pourront être mis en cache et seront plus rapidement interprétables par le langage. De plus, de nouvelles méthodes de réflexion ont été ajoutées pour accéder aux attributs définis.

PHP est dorénavant plus performant grâce à l’introduction de JIT (Just In Time). Cette nouveauté aura un impact principalement sur les processus les plus lourds. On peut donc imaginer utiliser PHP pour des tâches toujours plus complexes.
À noter que plusieurs Breaking Change sont introduits avec le passage en version 8 de PHP, notamment les fonctions dépréciées en PHP 7.x qui ne seront plus disponibles. Ainsi, la montée en version de vos applications nécessitera probablement des évolutions de code.

Conférence PHP 8: a new version, a new era, tenue par Gabriel Caruso.
Voir le replay ici.

2 – ElasticSearch & PHP

ElasticSearch est un logiciel très utilisé pour l’indexation et la recherche de données et qui est basé sur Lucene.

ElasticSearch, “le store de documents”

Elasticsearch doit être vu comme un simple outil puisqu’il s’agit uniquement d’une base de données contenant des documents. Il faut le voir comme “un store de documents, tel qu’un ODM ». Elasticsearch expose une API REST qui permet d’interroger les documents stockés.
ElasticSearch n’est finalement qu’une petite brique. Il ne faut pas s’en servir comme une base de données classique puisqu’il ne respecte pas les principes ACID. Il n’est pas destiné à gérer le stockage de données sur le long terme.

PHP X ElasticSearch

Plusieurs packages PHP existent et permettent d’exploiter ce potentiel avec ElasticSearch :

  • « elsasticsearch/elasticseach » permet de faciliter la tâche d’exploitation mais uniquement via des tableaux en PHP. Il gère également la partie réseau, élément délicat avec ElasticSearch selon les cas de figure (load balancing…) 
  •  « elastica » permet d’avoir une couche objet au-dessus de PHP pour faire de l’OOP pour ElasticSearch. Il utilise « elasticsearch/elasticsearch » et adapte cette dernière en POO. 

DTOs et OOP 

Nous pouvons utiliser les DTOs pour optimiser la gestion en OOP et suivre le flux de requêtes et de réponses. JANE est un autre package pour gagner du temps : il génère automatiquement des DTOs.
La sérialisation et la normalisation seront faites systématiquement en utilisant les DTOs. En effet, une hydratation de ces derniers va permettre de pouvoir exploiter via de l’OOP les informations récupérées d’ElasticSearch. Nous pourrons ainsi facilement passer à nos services Symfony nos DTOs fraîchement hydratés et en faire les traitements souhaités par la suite.

Pour conclure, la stack parfaite est selon Damien Alexandre :  

  • L’utilisation du yaml pour le mapping et pour la configuration de l’index ; 
  • L’utilisation des DTO pour les données générées avec Jane ; 
  • L’utilisation de Kibana, le PHPStorm pour debugger de l’ElasticSearch ; 
  • L’utilisation du package « elastically » maintenu par JoliCode permet d’apporter d’autres outils intéressants pour le développement.  

Dedi l’intègre petit à petit à ses projets de refonte. Il commence à être présent sur nos Sylius grâce aux plugins de BitBatCommerce et MonsieurBiz pour la gestion des filtres à facette sur les sites e-commerce.
Nous utilisons également Elasticsearch pour l’indexation des logs applicatifs que nous affichons grâce à Kibana.

3 – Oauth2 & OpenID Connect

OAuth2

OAuth2 est un protocole de délégation d’autorisation mettant en relations plusieurs acteurs qui sont : le “Ressource Owner” (le propriétaire de la ressource), le “Ressource Server” (celui qui détient la donnée sécurisée) et l’”Authorization Server” (celui qui délivre l’autorisation d’accès).
Les acteurs s’échangent des pairs de jetons pour notifier leurs autorisations.

Il existe deux jetons : l’”Access Token” qui possède une durée de vie courte et est la preuve d’une autorisation. Et le “Refresh Token” qui possède une durée de vie plus longue et qui permet de faire la demande d’un nouveau jeton d’accès sans devoir refaire le protocole depuis le début.
Plusieurs stratégies de connexion existent en fonction de la nature des acteurs (machine à machine, personne physique etc …), ce sont les “Grants.” Il est fortement recommandé d’utiliser le “Grant” “Autorization Code” pour sa grande sécurité.
La plus grande problématique de Oauth2 est qu’il ne permet pas de savoir avec certitude qu’un utilisateur est bien connecté. Ainsi le rôle de Oauth2 n’est pas de faire de la connexion d’utilisateur.

Open ID Connect

C’est une surcouche au protocole OAuth2 qui permet l’authentification unique, fréquemment utilisée pour faire du SSO. Elle délivre à un utilisateur authentifié un “Id Token” portant l’identité de celui-ci.
Tout comme OAuth2, il existe plusieurs stratégies de connexion, mais comme pour OAuth2 il est fortement conseillé d’utiliser la stratégie “Authorization Code”.
Open ID permet aussi l’accès offline et la gestion par session.

Pour conclure, l’Oauth2 sert à faire de la délégation d’autorisation alors qu’Open ID permet de s’authentifier fournissant ainsi deux solutions complémentaires basées toutes deux sur les mêmes mesures de sécurités.

Conférence de Karim Penchon, OpenId Connect.

Lire aussi | Quels sont les enjeux du Domain Driven Design pour votre projet ?

4 – Propulser du temps réel avec PHP 2020

Antoine BLUCHET a présenté plusieurs points sur lesquels il est intéressant de s’attarder.

HTTP et temps réel

Le long polling permet au client d’envoyer une requête au serveur qui ne répondra qu’en cas de changement de données.

Server Sent Event

C’est un protocole simple qui présente plusieurs éléments :

  • Content type text event stream  
  • Code erreur http  
  • Limite des 6 connexions maximum 
  • Standard depuis 2015 
  • Au-dessus de HTTP (bénéfice de la sécurité avec TLS) 
  • Supporté par tous les navigateurs  
  • Uni directionnel ‘server–> client 
  • Performant 
  • Reconnexion automatique en cas de perte de connexion sur mobile  

Il permet du bi directionnel combiné avec le protocole mercure.  

Web socket 

Le web socket est standard depuis 2019 :  

  • Nouveau protocole TCP 
  • Il est souvent utilisé par-dessus http  
  • Bi directionnel  
  • Code d’erreur diffèrent du standard http  

Le mercure  

Il possède une spécification basée sur http et Server Sent Event permettant :  

  • La publication post 
  • Les notions de topics 
  • L’authentification et les autorisations 

Symfony’s HTTP Client 

  • Robuste  
  • Compatible avec PSR/httpPLug 
  • Concurrent as asynchronous requests 
  • Non blocking monitoring / timeout 
  • Good debugging 
  • Profiler compatible 

Benchmarks 

  • Pas de https sur les benchmarks 
  • Limites systèmes pas logicielles 
  • PHP single thread 

Lire aussi | Sylius 1.8, les nouveautés de cette dernière version

5- La revue de code bienveillante  

La revue de code permet de contrôler la qualité du code par la détection de bug par anticipation et de maîtriser l’architecture logicielle pour qu’elle soit adaptée au projet et maintenable sur le long terme. 

Elle diffuse également les connaissances entre les développeurs et partage les responsabilités entre plusieurs personnes.  

Discriminations & bienveillance  

L’important pour faire une bonne revue de code est d’être bienveillant. Par bienveillant, on entend se concentrer sur le code uniquement et non sur les relations personnelles qu’on entretient avec la personne. Une critique sur votre code n’est pas une critique de vous-même, il ne faut pas la prendre personnellement. 

Mais cela suffit-il ? En réalité, la société se construit sur des bases mises en place par les personnes privilégiées, et cela engendre ce qu’on appelle de la discrimination systémique. 

Ce n’est pas une discrimination issue d’un point de vue personnel, mais une discrimination plus insidieuse, qui repose sur le fait que les personnes privilégiées construisent des éléments pour des gens avec les mêmes besoins qu’eux, puisqu’ils n’ont pas conscience des besoins des personnes sans ces privilèges. 

Un bon exemple pourrait être le manque d’accès en ville pour les personnes à mobilité réduite, ou l’accessibilité des sites internet pour les personnes malvoyantes. Nous avons mis du temps à instaurer des accès aux bâtiments pour les personnes à mobilité réduite car les personnes qui pensent ces constructions sont en majorité valides, et ne pensent pas naturellement aux problématiques qu’un fauteuil roulant pourrait poser. 

Les privilèges ne s’arrêtent malheureusement pas à la porte des entreprises, ils sont présents tous les jours dans la vie des développeurs et jouent un rôle dans leurs interactions. 

Par exemple, et sans en faire une liste exhaustive, les années d’expérience vs ceux qui sortent tout juste d’école, ceux qui ont fait des études vs les autodidactes, les développeurs back end vs les développeurs front end, sont autant de catégories différentes de personnes pouvant créer de la discrimination. 

Revue de code empathique 

Pour pallier les discriminations qui naissent, nous pouvons faire de la revue de code empathique en plus d’être bienveillante. 

Cela inclut de s’assurer que toutes les personnes de l’équipe : 

  • Fassent attention à leurs interactions sociales : si un senior et un junior travaillent ensemble sur un projet, il sera facile pour le senior de prendre plus de place que le junior et leurs interactions s’en retrouveront déséquilibrées car ils ne seront pas sur un pied d’égalité. 
  • Contribuent au projet de manière significative : quelqu’un qui sent qu’il est utile sur un projet sera plus investi et plus satisfait en travaillant dessus. 
  • Tirent de la reconnaissance de leurs contributions et gagnent en autonomie : par exemple en laissant quelqu’un faire passer des erreurs en prod au lieu de tout lui corriger, puis en le laissant les corriger et ainsi tirer satisfaction et enseignements de cette situation qu’il aura lui-même rectifiée. Cela permet également de dédramatiser l’idée d’un bug en production qui peut faire peur. 

Il est important de laisser assez de place à ceux qui ont moins de privilèges, ou sont perçus comme ayant moins de privilèges, afin qu’ils puissent également évoluer et progresser. 

Beaucoup d’informations ont été échangées au cours de ce forum et nous espérons avoir résumé les plus marquantes de cette année. Dedi est fier d’avoir participé à ce salon digital en tant que sponsor, et espère vous revoir l’année prochaine.  

Découvrez Dedi, l’agence qui ne crée pas seulement des sites internet

Découvrir