SlideShare une entreprise Scribd logo
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

PDF
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
PPTX
PDF
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
PDF
Zenika MongoDB Tour - REX Amadeus
PDF
Toutes les raisons d'adopter MongoDB
PPTX
Des cas d'intégration client par Sword: XL Airways, Ministere de la Culture...
KEY
Node.js et MongoDB: Mongoose
PDF
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
Zenika MongoDB Tour - REX Amadeus
Toutes les raisons d'adopter MongoDB
Des cas d'intégration client par Sword: XL Airways, Ministere de la Culture...
Node.js et MongoDB: Mongoose
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS

Tendances (7)

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

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

PDF
Panel de solutions javascript
PDF
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
PDF
Saas Libre
PDF
Cloud native chapitre 2 presentation.pdf
PDF
Cours Achitecture Logiciel - partie 2 V2.2.pdf
PDF
[RedHat Forum 2019] REX - COMMENT MONTER UNE OFFRE DE CLOUD EN MARQUE BLANCHE...
PDF
Comprendre, utiliser et créer une API
PDF
Motwin - cto crunch - 141205 - Optimiser la latence applicative mobile
PDF
Tutojres 13-jeromefenal
PPTX
20120402 nantes gtug - app engine
PDF
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
PDF
Meetup du 21 septembre 2017
PDF
S51 vos projets web services ibm i a l aide de php
PPTX
Intro grpc.net
PDF
IOT-1.pdf
PDF
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
PDF
[Geocom2017] Georchestra & monitoring
PDF
De l'Open Source à l'Open API (in French)
PDF
technologie web
PPTX
Web service qpplication web mobilee.pptx
Panel de solutions javascript
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
Saas Libre
Cloud native chapitre 2 presentation.pdf
Cours Achitecture Logiciel - partie 2 V2.2.pdf
[RedHat Forum 2019] REX - COMMENT MONTER UNE OFFRE DE CLOUD EN MARQUE BLANCHE...
Comprendre, utiliser et créer une API
Motwin - cto crunch - 141205 - Optimiser la latence applicative mobile
Tutojres 13-jeromefenal
20120402 nantes gtug - app engine
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Meetup du 21 septembre 2017
S51 vos projets web services ibm i a l aide de php
Intro grpc.net
IOT-1.pdf
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
[Geocom2017] Georchestra & monitoring
De l'Open Source à l'Open API (in French)
technologie web
Web service qpplication web mobilee.pptx
Publicité

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