Backend et API

Chapitre 4

Résumé du cours jusqu'à présent
04:25

  • Composants: transformer le DOM avec la même simplicité que si on le recréait de zéro avec d'autres avantages:
    • Encapsulation
    • Réutilisabilité
    • Testabilité
  • SPA
    • Répond aux besoins d'UX de plus en plus exigents
    • Relativement faciles à développer depuis l'apparition des frameworks à componsants
    • Crée des difficultés supplémentaires
      • Référencement
      • Accessibilité
      • Premier chargement lent
  • Les difficultés des SPA peuvent être mitigées via le SSR

Outline du chapitre
04:25

  • Quel langage de programmation pour le backend?
  • API
    • Qu'est-ce qu'une API?
    • REST
    • Underfetching, overfetching
    • GraphQL
  • Persistence de données
    • ORM

Interlude: la montée du mobile
04:25

Mobile traffic

Les smartphones sont moins performants et ont des connexions plus lente. Ces deux facteurs influent sur l'autonomie de la batterie. En terme d'UX, il est également pertinent d'offrir une interface adaptée à la taille de l'écran.

Choix du langage côté serveur
04:25

Contrairement au front-end où le JavaScript est pratiquement imposé, le choix est plus libre pour le backend, qui peut être écrit en Python, PHP, etc.

Question

Pourriez-vous penser à des raisons pour lesquelles le JavaScript a un avantage sur les autres langages?

API
04:25

Remark

Nous emploierons le terme API pour désigner une API Web côté serveur.

Definition

Une API web côté serveur consiste en un ou plusieurs points d'accès exposés publiquement répondant avec des données (par exemple, en XML ou JSON).

Exemple: Poké API
04:25

Poké API
04:25

Exemple: NASA
04:25

Chess.com
04:25

Pourquoi?
04:25

Question

  • Pourquoi utilise-t-on des API publiques?
  • Quels sont les avantages à écrire une API pour une application web?

REST
04:25

REST est un style d'architecture web

  • Architecture client/serveur
  • Sans état
  • Avec mise en cache
  • En couches
  • Avec une interface uniforme

En pratique, une API REST associe des URLs à des ressources, et le verbe HTTP décrit comment la manipuler. Ce type d'architecture est performant (grâce à la mise en cache) et scalable.

CRUD
04:25

Voici un exemple typique de requêtes et de leur effets.

GET /users/
Obtient la liste des utilisateurs
GET /users/1
Obtient les informations sur l'utilisateur 1
POST /users/
Crée un utilisateur avec le corps
POST /users/2
Modifie l'utilisateur 2 avec le corps
DELETE /users/1
Supprime l'utilisateur 1

Remark

On parle souvent de CRUD pour désigner les opérations de création, lecture, mise à jour, suppression.

REST: exemple d'implémentation
04:25

Example

API qui permet de lire et modifier des utilisateurs, stockés en mémoire vive. Dans la vie réelle, on implémenterait l'authentification et on utiliserait une base de données.

Exercise

Rappelez-moi de continuer l'implémentation devant vous

Désavantages de REST
04:25

Question

Quelles sont les inconvénients d'une API REST

  • Underfetching
  • Overfetching
  • Il faut connaître les URL
  • L'API doit être documentée
  • DX

GraphQL: présentation
04:25

GraphQL logo
  • Objectif: flexibilité pour obtenir les données en une requête
  • Développé par Facebook (2015) pour répondre aux exigences de l'application mobile
  • Un seul point d'entrée
  • L'API peut être explorée sans documentation
  • Meilleure DX

GraphQL
04:25

Question

Qu'est-ce qu'un graphe?

GraphQL Graph

Caractéristiques de GraphQL

  • Un point d'entrée (souvent /graphql)
  • On envoie via POST exactement les données que l'on veut avec une syntaxe qui ressemble à la structure des données de retour.

GraphQL: exemple
04:25

Persistence des données
04:25

  • Fichiers
  • Base de données relationnelles
  • NoSQL

Vous avez eu un cours sur cela au premier quadrimestre, nous nous contenterons seulement de discuter l'aspect pratique dans le cas du Web.

Question

Quelle solution employeriez-vous et pourquoi?

Base de données: aspects développeur
04:25

  • Que faire si l'on change de serveur de base de données (e.g. MariaDB Postgres)?
  • Que faire pour éviter les erreurs de sécurité telles que les injections SQL
  • Comment manier les données plus rapidement?
  • Comment écrire du code réutilisable et plus maintenable pour manipuler les données?

ORM
04:25

Idea

Utiliser la programmation orientée objet (en particulier l'héritage) pour simplifier la manipulation de données.

Question

Qu'est-ce qu'un ORM?

Definition

Un ORM (mapping objet-relationnel) est une couche entre une base de données relationnelle dont le but est de simuler une base de données orientée objet.

Exemples
04:25

Requête SQL

ORM

Fonctionnement et Implémentation
04:25

  • Pour simplifier, une classe par table
  • Une instance correspond à une entrée en DB
  • Les tables correspondent à des classes qui héritent d'une classe mère (Model). La classe contient au moins les informations propres à la table comme son nom et la clé primaire
  • La classe mère Model implémente des méthodes pour générer et exécuter quelques requêtes SQL typiques comme au slide précédent.

Un ORM simple
04:25

Todo app avec un ORM
04:25

Design patterns
04:25

Un thème clair du cours est de séparer l'application en morceaux composables. Ceci permet une grande réutilisation pour servir des clients aux besoins différents (navigateur, application mobile). Cela permet également une collaboration d'une équipe avec des bagages techniques différents.

  • Modèle (ORM) pour manipuler les données
  • Morceler l'UI en petits composants
  • Utiliser une API pour séparer les données du rendu

On appelle cette idée la séparation des préoccupations (separation of concerns).

Remark

Les bonnes pratiques changent avec le temps:

  • Séparation des langages (HTML, CSS, etc.) séparations des fonctionnalités (bouton, barre de navigation, etc.)
  • La séparation backend/frontend (frontière réseau) disparaît dans les projets en JavaScript au profit d'une découpe par fonctionnalité.

Design patterns en Web
04:25

  • Composants et composition
  • MVC, MVVM, MVW
  • Flux
  • File-based routing (une URL, un fichier)
  • etc.

Exemple: Odoo
04:25

  • ERP
  • Projet avec un coeur open source
  • Écrit en Python/TypeScript
  • Architecture très modulaire
  • SPA
  • Emploi de leur propre framework de composants (Owl)
  • Emploi de leur propre ORM