SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Les Web APIs en
.NET Core
François Camus
Jérôme Péronne
Modèle de données
REST
● REpresentational State Transfer
● Introduit par Roy Fielding en 2000
● Tout est une ressource identifié par un Uniform Resource Identifier (URI)
● Utilise le protocole HTTP
○ Méthode HTTP pour différencier les contextes d’accès à une ressource
○ Représentation des ressources en JSON, XML...
● Versioning
● Outils
○ Swagger (Swashbuckle ou NSwag)
○ Génération du code de l’API Client (NSwag)
Démo
Avantages
● Stateless
● Séparation entre client et serveur
○ Facile d’ajouter un nouveau type de client
● Simple à mettre en place
● Facilement scalable
● Support d’un grand nombre de types de média
● Supporté par tous les navigateurs
● Caching
Inconvénients
● Chatty
○ Beaucoup d’information transite
● Over fetching et under fetching
○ Structure rigide des données
● Typage faible entre client et serveur
● Pas facile à implémenter correctement
○ REST vs HTTP
○ Tout n’est pas resources
○ Création de endpoints spécifiques avec des GET et POST
● Versioning d’API peut devenir compliqué
○ URL
○ Header
OData
● Open Data Protocol
○ Créé par Microsoft en 2007
○ Version 4 standardisé OASIS en 2014
○ Basé sur HTTP, AtomPub et JSON
○ Mature en ASP.NET mais pas encore en ASP.NET Core (quelques bugs)
● Permet de requêter et manipuler des données de façon uniforme
○ Opérations CRUD
● Metadata
○ Description du modèle de données
○ Entity Data Model - Entity Framework
● Versioning
● Outils
○ Swagger via Swashbuckle
○ Génération du code possible de l’API client
Démo
Avantages
● Standard très mature (12 ans)
● Requêtage puissant
○ Ordonnancement
○ Paging, sorting et filtering
○ Contrôle du volume de données
○ Presque SQL via URL
● Facile à mettre en place
● Moins bavard que REST
Inconvénients
● Manque de contrôle sur les requêtes effectuées par le client
○ $expand, $filter… définis par le client
○ Difficile d’anticiper des problèmes de performance spécifiques à un client
○ Cas d’utilisation pas défini d’avance
○ Utilisation en interne (Applications CRUD)
● Couplage fort avec les entités définies dans Entity Framework
○ Pas trop le choix de retourner les entités au client
● Ne semble pas très populaire
GraphQL
● Créé par Facebook
● Rendu open source en 2015
● Surcouche d’une API REST permettant de requêter des données typées
● Spécification qui décrit les possibilités et les besoins en terme de données entre un client
et un serveur
● Outils
○ GraphiQL
○ Apollo
Démo
Avantages
● Peut se mettre en surcouche sur un système existant
● Moins bavard que REST
● Communauté grandissante
● Agrégation/orchestration des données de plusieurs sources différentes
● Tous les cas d’utilisation/requêtage doivent être défini
● Le client demande les données dont il a besoin ni plus ni moins
● Le client dicte la forme de la réponse qu’il souhaite
● Indépendance des développeurs front et back
● Possibilité de souscrire à un flux de données (Observable)
● Versioning
○ Les propriétés actuelles peuvent être déprécié (client reçoit un warning)
○ Ajout de nouvelles propriétés sans impacter les clients actuelles
● Outils
○ GraphiQL (système d’introspection)
Inconvénients
● Complexité
○ Pas mal de code pour la plomberie côté backend => Schéma
○ Ne vaut peut-être pas le coût si le format des données de change jamais
● Caching
○ Pas comme REST basé sur les URLs => Resource level caching
○ Les requêtes peuvent être différentes
■ Field level caching
■ DataLoader en GraphQL .NET
● Fait pour retourner du JSON
● Pas de paging, filtering et sorting de base
● Fait pour gérer des données typées et pas des données dynamiques
gRPC
● gRPC a été développé initialement par Google puis rendu open source.
● Permet de réaliser des clients et serveurs rpc via HTTP/2 et donc de profiter de ses
nouveautés.
● Les données sont sérialisées et désérialisées grâce à Protocol Buffers.
○ Protocol Buffers = format de sérialisation avec un langage de description d'interface (IDL)
développé par Google
● Le framework gRPC permet aussi d’avoir un client et un serveur dans différents langages.
Démo
Avantages
● Performance grâce à HTTP 2
○ Tramage binaire et compression
○ Multiplexage de plusieurs appels via une connexion TCP unique.
○ Streaming bidirectionnel
● Langage de description : Protobuf 3
○ Compact, strict, rapide
○ Rétrocompatibilité des messages
○ Génération automatique de code client
■ Android Java, C#,C,Dart,Go,Java,Node,PHP,Python,Ruby
● Pleinement supporté sous .NET Core 3
Inconvénients
● Trames binaires incompréhensibles par l'humain
● Prise en charge de navigateur limitée
○ gRPC-Web fournit une prise en charge limitée de gRPC dans le navigateur.
○ gRPC-Web se compose de deux parties: un client JavaScript qui prend en charge tous les
navigateurs modernes et un proxy sur le serveur. Le client gRPC-Web appelle le proxy et celui-ci
transfère les requêtes gRPC au serveur gRPC.
○ https://grpc.io/blog/state-of-grpc-web/
Code source
https://github.com/FrancoisCamus/WebApisInNetCore
-
François Camus
Twitter: @francois_camus
GitHub: FrancoisCamus
LinkedIn: francoiscamuspro
-
Jérôme Péronne
GitHub: winswolf
LinkedIn: jérôme-peronne-aa762088
Thank you!

Contenu connexe

Tendances

Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...Ouadie LAHDIOUI
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...Horacio Gonzalez
 
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...Clément OUDOT
 
Les nouveautés d'HTML 5
Les nouveautés d'HTML 5Les nouveautés d'HTML 5
Les nouveautés d'HTML 5StrasWeb
 
Introduction au développement Windows Phone 8
Introduction au développement Windows Phone 8Introduction au développement Windows Phone 8
Introduction au développement Windows Phone 8Microsoft
 
Importer des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshop
Importer des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshopImporter des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshop
Importer des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshopNuxeo
 

Tendances (7)

Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
 
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...
 
Les nouveautés d'HTML 5
Les nouveautés d'HTML 5Les nouveautés d'HTML 5
Les nouveautés d'HTML 5
 
Introduction au développement Windows Phone 8
Introduction au développement Windows Phone 8Introduction au développement Windows Phone 8
Introduction au développement Windows Phone 8
 
Importer des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshop
Importer des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshopImporter des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshop
Importer des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshop
 
ToursJUG mongoDB
ToursJUG mongoDBToursJUG mongoDB
ToursJUG mongoDB
 

Similaire à Les Web APIs en .NET Core

Panel de solutions javascript
Panel de solutions javascriptPanel de solutions javascript
Panel de solutions javascriptjp_mouton
 
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3Horacio Gonzalez
 
Saas Libre
Saas LibreSaas Libre
Saas Libregrolland
 
[RedHat Forum 2019] REX - COMMENT MONTER UNE OFFRE DE CLOUD EN MARQUE BLANCHE...
[RedHat Forum 2019] REX - COMMENT MONTER UNE OFFRE DE CLOUD EN MARQUE BLANCHE...[RedHat Forum 2019] REX - COMMENT MONTER UNE OFFRE DE CLOUD EN MARQUE BLANCHE...
[RedHat Forum 2019] REX - COMMENT MONTER UNE OFFRE DE CLOUD EN MARQUE BLANCHE...Worteks
 
Comprendre, utiliser et créer une API
Comprendre, utiliser et créer une APIComprendre, utiliser et créer une API
Comprendre, utiliser et créer une APIOlivia Reaney
 
Motwin - cto crunch - 141205 - Optimiser la latence applicative mobile
Motwin -  cto crunch - 141205 - Optimiser la latence applicative mobileMotwin -  cto crunch - 141205 - Optimiser la latence applicative mobile
Motwin - cto crunch - 141205 - Optimiser la latence applicative mobileCommunity motwin
 
Tutojres 13-jeromefenal
Tutojres 13-jeromefenalTutojres 13-jeromefenal
Tutojres 13-jeromefenalinf_med13
 
20120402 nantes gtug - app engine
20120402   nantes gtug - app engine20120402   nantes gtug - app engine
20120402 nantes gtug - app engineGDG Nantes
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...MSDEVMTL
 
Meetup du 21 septembre 2017
Meetup du 21 septembre 2017Meetup du 21 septembre 2017
Meetup du 21 septembre 2017AFUP_Limoges
 
S51 vos projets web services ibm i a l aide de php
S51   vos projets web services ibm i a l aide de phpS51   vos projets web services ibm i a l aide de php
S51 vos projets web services ibm i a l aide de phpGautier DUMAS
 
Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.netMSDEVMTL
 
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidementENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidementHoracio Gonzalez
 
[Geocom2017] Georchestra & monitoring
[Geocom2017] Georchestra & monitoring[Geocom2017] Georchestra & monitoring
[Geocom2017] Georchestra & monitoringCamptocamp
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)Restlet
 
Enib cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
Enib   cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !Enib   cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
Enib cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !Horacio Gonzalez
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
cours6.pdfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...
cours6.pdfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...cours6.pdfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...
cours6.pdfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...hindguendouz2000
 

Similaire à Les Web APIs en .NET Core (20)

Panel de solutions javascript
Panel de solutions javascriptPanel de solutions javascript
Panel de solutions javascript
 
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
 
Saas Libre
Saas LibreSaas Libre
Saas Libre
 
[RedHat Forum 2019] REX - COMMENT MONTER UNE OFFRE DE CLOUD EN MARQUE BLANCHE...
[RedHat Forum 2019] REX - COMMENT MONTER UNE OFFRE DE CLOUD EN MARQUE BLANCHE...[RedHat Forum 2019] REX - COMMENT MONTER UNE OFFRE DE CLOUD EN MARQUE BLANCHE...
[RedHat Forum 2019] REX - COMMENT MONTER UNE OFFRE DE CLOUD EN MARQUE BLANCHE...
 
Comprendre, utiliser et créer une API
Comprendre, utiliser et créer une APIComprendre, utiliser et créer une API
Comprendre, utiliser et créer une API
 
Motwin - cto crunch - 141205 - Optimiser la latence applicative mobile
Motwin -  cto crunch - 141205 - Optimiser la latence applicative mobileMotwin -  cto crunch - 141205 - Optimiser la latence applicative mobile
Motwin - cto crunch - 141205 - Optimiser la latence applicative mobile
 
Tutojres 13-jeromefenal
Tutojres 13-jeromefenalTutojres 13-jeromefenal
Tutojres 13-jeromefenal
 
20120402 nantes gtug - app engine
20120402   nantes gtug - app engine20120402   nantes gtug - app engine
20120402 nantes gtug - app engine
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
 
Meetup du 21 septembre 2017
Meetup du 21 septembre 2017Meetup du 21 septembre 2017
Meetup du 21 septembre 2017
 
S51 vos projets web services ibm i a l aide de php
S51   vos projets web services ibm i a l aide de phpS51   vos projets web services ibm i a l aide de php
S51 vos projets web services ibm i a l aide de php
 
Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.net
 
IOT-1.pdf
IOT-1.pdfIOT-1.pdf
IOT-1.pdf
 
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidementENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
 
[Geocom2017] Georchestra & monitoring
[Geocom2017] Georchestra & monitoring[Geocom2017] Georchestra & monitoring
[Geocom2017] Georchestra & monitoring
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
 
technologie web
technologie webtechnologie web
technologie web
 
Enib cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
Enib   cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !Enib   cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
Enib cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
cours6.pdfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...
cours6.pdfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...cours6.pdfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...
cours6.pdfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh...
 

Les Web APIs en .NET Core

  • 1. Les Web APIs en .NET Core François Camus Jérôme Péronne
  • 3. REST ● REpresentational State Transfer ● Introduit par Roy Fielding en 2000 ● Tout est une ressource identifié par un Uniform Resource Identifier (URI) ● Utilise le protocole HTTP ○ Méthode HTTP pour différencier les contextes d’accès à une ressource ○ Représentation des ressources en JSON, XML... ● Versioning ● Outils ○ Swagger (Swashbuckle ou NSwag) ○ Génération du code de l’API Client (NSwag)
  • 5. Avantages ● Stateless ● Séparation entre client et serveur ○ Facile d’ajouter un nouveau type de client ● Simple à mettre en place ● Facilement scalable ● Support d’un grand nombre de types de média ● Supporté par tous les navigateurs ● Caching
  • 6. Inconvénients ● Chatty ○ Beaucoup d’information transite ● Over fetching et under fetching ○ Structure rigide des données ● Typage faible entre client et serveur ● Pas facile à implémenter correctement ○ REST vs HTTP ○ Tout n’est pas resources ○ Création de endpoints spécifiques avec des GET et POST ● Versioning d’API peut devenir compliqué ○ URL ○ Header
  • 7. OData ● Open Data Protocol ○ Créé par Microsoft en 2007 ○ Version 4 standardisé OASIS en 2014 ○ Basé sur HTTP, AtomPub et JSON ○ Mature en ASP.NET mais pas encore en ASP.NET Core (quelques bugs) ● Permet de requêter et manipuler des données de façon uniforme ○ Opérations CRUD ● Metadata ○ Description du modèle de données ○ Entity Data Model - Entity Framework ● Versioning ● Outils ○ Swagger via Swashbuckle ○ Génération du code possible de l’API client
  • 9. Avantages ● Standard très mature (12 ans) ● Requêtage puissant ○ Ordonnancement ○ Paging, sorting et filtering ○ Contrôle du volume de données ○ Presque SQL via URL ● Facile à mettre en place ● Moins bavard que REST
  • 10. Inconvénients ● Manque de contrôle sur les requêtes effectuées par le client ○ $expand, $filter… définis par le client ○ Difficile d’anticiper des problèmes de performance spécifiques à un client ○ Cas d’utilisation pas défini d’avance ○ Utilisation en interne (Applications CRUD) ● Couplage fort avec les entités définies dans Entity Framework ○ Pas trop le choix de retourner les entités au client ● Ne semble pas très populaire
  • 11. GraphQL ● Créé par Facebook ● Rendu open source en 2015 ● Surcouche d’une API REST permettant de requêter des données typées ● Spécification qui décrit les possibilités et les besoins en terme de données entre un client et un serveur ● Outils ○ GraphiQL ○ Apollo
  • 12. Démo
  • 13. Avantages ● Peut se mettre en surcouche sur un système existant ● Moins bavard que REST ● Communauté grandissante ● Agrégation/orchestration des données de plusieurs sources différentes ● Tous les cas d’utilisation/requêtage doivent être défini ● Le client demande les données dont il a besoin ni plus ni moins ● Le client dicte la forme de la réponse qu’il souhaite ● Indépendance des développeurs front et back ● Possibilité de souscrire à un flux de données (Observable) ● Versioning ○ Les propriétés actuelles peuvent être déprécié (client reçoit un warning) ○ Ajout de nouvelles propriétés sans impacter les clients actuelles ● Outils ○ GraphiQL (système d’introspection)
  • 14. Inconvénients ● Complexité ○ Pas mal de code pour la plomberie côté backend => Schéma ○ Ne vaut peut-être pas le coût si le format des données de change jamais ● Caching ○ Pas comme REST basé sur les URLs => Resource level caching ○ Les requêtes peuvent être différentes ■ Field level caching ■ DataLoader en GraphQL .NET ● Fait pour retourner du JSON ● Pas de paging, filtering et sorting de base ● Fait pour gérer des données typées et pas des données dynamiques
  • 15. gRPC ● gRPC a été développé initialement par Google puis rendu open source. ● Permet de réaliser des clients et serveurs rpc via HTTP/2 et donc de profiter de ses nouveautés. ● Les données sont sérialisées et désérialisées grâce à Protocol Buffers. ○ Protocol Buffers = format de sérialisation avec un langage de description d'interface (IDL) développé par Google ● Le framework gRPC permet aussi d’avoir un client et un serveur dans différents langages.
  • 16. Démo
  • 17. Avantages ● Performance grâce à HTTP 2 ○ Tramage binaire et compression ○ Multiplexage de plusieurs appels via une connexion TCP unique. ○ Streaming bidirectionnel ● Langage de description : Protobuf 3 ○ Compact, strict, rapide ○ Rétrocompatibilité des messages ○ Génération automatique de code client ■ Android Java, C#,C,Dart,Go,Java,Node,PHP,Python,Ruby ● Pleinement supporté sous .NET Core 3
  • 18. Inconvénients ● Trames binaires incompréhensibles par l'humain ● Prise en charge de navigateur limitée ○ gRPC-Web fournit une prise en charge limitée de gRPC dans le navigateur. ○ gRPC-Web se compose de deux parties: un client JavaScript qui prend en charge tous les navigateurs modernes et un proxy sur le serveur. Le client gRPC-Web appelle le proxy et celui-ci transfère les requêtes gRPC au serveur gRPC. ○ https://grpc.io/blog/state-of-grpc-web/
  • 19. Code source https://github.com/FrancoisCamus/WebApisInNetCore - François Camus Twitter: @francois_camus GitHub: FrancoisCamus LinkedIn: francoiscamuspro - Jérôme Péronne GitHub: winswolf LinkedIn: jérôme-peronne-aa762088