1
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Designer ses API
Pour l’accès aux données
2
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Cédrick Lunven
Developer Advocate
Créateur Contributeur
3
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
http://academy.datastax.com
(Training | Videos | Developer Blog)
4
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Objectifs
 Un repo Github avec plusieurs implémentations pour
une API
o REST, GraphQL, gRPC
 Détails d’implémentation
o Design
o Code Review
o Demos
 Points forts et points faibles
5
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Objectifs
 Un repo Github avec plusieurs implémentations pour
une API
o REST, GraphQL, gRPC
https://github.com/clun/devfestbdm2019
6
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Cassandra - Evelyn de Morgan (1855-1919)
Apache Cassandra
7
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Noeud
1 à 3To
3000 Tx/sec/core
Anneau
(DataCenter)
Apache Cassandra
8
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Apache Cassandra
 La donnée est partitionnée
 La donnée est répliquée
 Lecture/ écriture de partout
 Consistance Variable
Client
 Masterless
9
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
On-Premise
Data Center
Cluster
Apache Cassandra
10
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Application
11
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
http://dev.killrvideo.com
https://killrvideo.github.io/
12
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
1
killrvideo-dse
Drivers
DAO3
killrvideo-api-rest killrvideo-api-grpc killrvideo-api-graphql
2
Designer son service
13
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Modèle conceptuel
de données
(Entités, Relations)
Application
Workflow
(Requêtes)
Conversion
vers modèle
logique
Modèle
logique de
données
Optimisation
physique
Modèle
physique de
données
Modèle de données1
14
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Modèle conceptuel
15
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Application Workflow
R2: Recherche les commentaires associés à un utilisateur donné
• Retourne les plus récents en premier
• Pagine
R1: Recherche les commentaires associés à une vidéo en utilisant son id
• Retourne les plus récents en premier
• Pagine
R3: Permet les opérations CRUD unitaires
16
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Mapping
R2: Recherche les commentaires associés à un
utilisateur donné
• Retourne les plus récents en premier
• Pagine
comments_by_video
comments_by_user
R1: Recherche les commentaires associés
à une vidéo en utilisant son id
• Retourne les plus récents en premier
• Pagine
R3: Permet les opérations CRUD unitaires
17
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Modèle logique
userid
creationdate
commentid
videoid
comment
comments_by_user
K
C
↑
videoid
creationdate
commentid
userid
comment
comments_by_video
C
↑
K
C
↑
↑C
18
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Modèle physique
userid
commentid
videoid
comment
comments_by_user
TIMEUUID
K
TEXT
C
UUID
UUID
↑
videoid
commentid
userid
comment
comments_by_video
TIMEUUID
K
TEXT
C
UUID
UUID
↑
19
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Modèle physique
CREATE TABLE IF NOT EXISTS comments_by_user (
userid uuid,
commentid timeuuid,
videoid uuid,
comment text,
PRIMARY KEY ((userid), commentid)
) WITH CLUSTERING ORDER BY (commentid DESC);
CREATE TABLE IF NOT EXISTS comments_by_video (
videoid uuid,
commentid timeuuid,
userid uuid,
comment text,
PRIMARY KEY ((videoid), commentid)
) WITH CLUSTERING ORDER BY (commentid DESC);
20
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Designer son API
Modèle conceptuel
de données
(Entités, Relations)
Parcours applicatif
(Requêtes)
Base de données
(Technos +Table)
21
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
22
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Objectifs
 Un repo Github avec plusieurs implémentations pour
une API
o REST, GraphQL, gRPC
 Détails d’implémentation
o Design
o Code Review
o Demos
 Points forts et points faibles
23
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Designer son API
Modèle conceptuel
de données
(Entités, Relations)
Parcours applicatif
(Requêtes)
Base de données
(Technos +Table)
Cache
Sync vs Async Reactive
SLA (Volume)
Intégrité
Filtres
Pagination
Tris
Latences
Throughput
CRUD, SEARCH
Versioning
Confidentialité
Atomicité
Cardinalité
SEARCH, COMMANDS
Développement
Clients
Language
CodeFirst/
Vs SchemaFirst
Documentation
Test
Build
Packaging
Api Catalog
Interne vs
Externe Techno
Profil
XP
24
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
25
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
26
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
 Réutilisation d’HTTP, orienté ressources
 Découplage Client / Serveur
 Api évolutive (versioning)
 Tooling (API Management)
 Payloads lourds
 Exposition de fonctions/commandes
 Pas de discoverabilité
 CRUD Superstar
 Mutations (modifications)
27
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
 Haute Performance (Async, sérialisation)
 Sync, Async, Streaming
 Services Distribués
 Interopérabilité
 Couplage fort
 Protobuf
 CRUD possible mais non adapté
 API oriente commande / message
 Gros réseaux de services
28
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
 Découverte des signatures
 Personnalisation des réponses
 Composition de services
 Schéma types, implémentation des relations
 Complexité de mise en œuvre
 Appels cachés (N+1 select)
 Endpoint unique
 Agrégation de services
 Adapte pour contraintes reseau/latence
 Génial pour les client, attention pour le backend
GraphQL
29
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
https://github.com/clun/devfestbdm2019

DevFestBdm2019

  • 1.
    1 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Designer ses API Pour l’accès aux données
  • 2.
    2 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Cédrick Lunven Developer Advocate Créateur Contributeur
  • 3.
    3 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM http://academy.datastax.com (Training | Videos | Developer Blog)
  • 4.
    4 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Objectifs  Un repo Github avec plusieurs implémentations pour une API o REST, GraphQL, gRPC  Détails d’implémentation o Design o Code Review o Demos  Points forts et points faibles
  • 5.
    5 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Objectifs  Un repo Github avec plusieurs implémentations pour une API o REST, GraphQL, gRPC https://github.com/clun/devfestbdm2019
  • 6.
    6 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Cassandra - Evelyn de Morgan (1855-1919) Apache Cassandra
  • 7.
    7 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Noeud 1 à 3To 3000 Tx/sec/core Anneau (DataCenter) Apache Cassandra
  • 8.
    8 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Apache Cassandra  La donnée est partitionnée  La donnée est répliquée  Lecture/ écriture de partout  Consistance Variable Client  Masterless
  • 9.
    9 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM On-Premise Data Center Cluster Apache Cassandra
  • 10.
    10 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Application
  • 11.
    11 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM http://dev.killrvideo.com https://killrvideo.github.io/
  • 12.
    12 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM 1 killrvideo-dse Drivers DAO3 killrvideo-api-rest killrvideo-api-grpc killrvideo-api-graphql 2 Designer son service
  • 13.
    13 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Modèle conceptuel de données (Entités, Relations) Application Workflow (Requêtes) Conversion vers modèle logique Modèle logique de données Optimisation physique Modèle physique de données Modèle de données1
  • 14.
    14 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Modèle conceptuel
  • 15.
    15 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Application Workflow R2: Recherche les commentaires associés à un utilisateur donné • Retourne les plus récents en premier • Pagine R1: Recherche les commentaires associés à une vidéo en utilisant son id • Retourne les plus récents en premier • Pagine R3: Permet les opérations CRUD unitaires
  • 16.
    16 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Mapping R2: Recherche les commentaires associés à un utilisateur donné • Retourne les plus récents en premier • Pagine comments_by_video comments_by_user R1: Recherche les commentaires associés à une vidéo en utilisant son id • Retourne les plus récents en premier • Pagine R3: Permet les opérations CRUD unitaires
  • 17.
    17 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Modèle logique userid creationdate commentid videoid comment comments_by_user K C ↑ videoid creationdate commentid userid comment comments_by_video C ↑ K C ↑ ↑C
  • 18.
    18 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Modèle physique userid commentid videoid comment comments_by_user TIMEUUID K TEXT C UUID UUID ↑ videoid commentid userid comment comments_by_video TIMEUUID K TEXT C UUID UUID ↑
  • 19.
    19 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Modèle physique CREATE TABLE IF NOT EXISTS comments_by_user ( userid uuid, commentid timeuuid, videoid uuid, comment text, PRIMARY KEY ((userid), commentid) ) WITH CLUSTERING ORDER BY (commentid DESC); CREATE TABLE IF NOT EXISTS comments_by_video ( videoid uuid, commentid timeuuid, userid uuid, comment text, PRIMARY KEY ((videoid), commentid) ) WITH CLUSTERING ORDER BY (commentid DESC);
  • 20.
    20 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Designer son API Modèle conceptuel de données (Entités, Relations) Parcours applicatif (Requêtes) Base de données (Technos +Table)
  • 21.
    21 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM
  • 22.
    22 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Objectifs  Un repo Github avec plusieurs implémentations pour une API o REST, GraphQL, gRPC  Détails d’implémentation o Design o Code Review o Demos  Points forts et points faibles
  • 23.
    23 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM Designer son API Modèle conceptuel de données (Entités, Relations) Parcours applicatif (Requêtes) Base de données (Technos +Table) Cache Sync vs Async Reactive SLA (Volume) Intégrité Filtres Pagination Tris Latences Throughput CRUD, SEARCH Versioning Confidentialité Atomicité Cardinalité SEARCH, COMMANDS Développement Clients Language CodeFirst/ Vs SchemaFirst Documentation Test Build Packaging Api Catalog Interne vs Externe Techno Profil XP
  • 24.
    24 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM
  • 25.
    25 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM
  • 26.
    26 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM  Réutilisation d’HTTP, orienté ressources  Découplage Client / Serveur  Api évolutive (versioning)  Tooling (API Management)  Payloads lourds  Exposition de fonctions/commandes  Pas de discoverabilité  CRUD Superstar  Mutations (modifications)
  • 27.
    27 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM  Haute Performance (Async, sérialisation)  Sync, Async, Streaming  Services Distribués  Interopérabilité  Couplage fort  Protobuf  CRUD possible mais non adapté  API oriente commande / message  Gros réseaux de services
  • 28.
    28 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM  Découverte des signatures  Personnalisation des réponses  Composition de services  Schéma types, implémentation des relations  Complexité de mise en œuvre  Appels cachés (N+1 select)  Endpoint unique  Agrégation de services  Adapte pour contraintes reseau/latence  Génial pour les client, attention pour le backend GraphQL
  • 29.
    29 Designer une APIpour votre base de données (Rest || GraphQL || gRPC) @clunven | @DevfestBdM | #api | #DevFestBDM https://github.com/clun/devfestbdm2019