1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 10
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Application
11. 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. 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. 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. 14
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
Modèle conceptuel
15. 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. 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. 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. 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. 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. 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. 21
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
22. 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. 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. 24
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
25. 25
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
26. 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. 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. 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. 29
Designer une API pour votre base de données (Rest || GraphQL || gRPC)
@clunven | @DevfestBdM | #api | #DevFestBDM
https://github.com/clun/devfestbdm2019