l existe une grande variété de patterns pour accéder à vos bases de données en fonction des cas d’usage et des technologies utilisées : simple CRUD, streaming, asynchrone, réactif, fonctions…
Chez DataStax, au travers de l'implémentation d'application de references comme [Killrvideo](killrvideo.github.io) nous avons eu l’opportunité de tester la meme API en REST, gRPC et GraphQL avec Java (SpringBoot 2). Je vous propose un tour d’horizon des 3 solutions, les points forts, les points faibles, les details d’implementation au travers d'une demo et code review
1. 1
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
2019
Designer ses API
Pour l’accès aux données
2. 2
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Cédrick Lunven
Developer Advocate @
Créateur de
Contributeur sur
3. 3
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
http://academy.datastax.com
(Training | Videos | Developer Blog)
4. 4
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Objectifs
Un repo Github avec plusieurs implémentations pour
une API
o REST, GraphQL, gRPC
https://github.com/clun/snowcamp2019
6. 6
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Cassandra - Evelyn de Morgan (1855-1919)
Apache Cassandra
7. 7
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Noeud
1 à 3To
3000 Tx/sec/core
Anneau
(DataCenter)
Apache Cassandra
8. 8
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
On-Premise
Data Center
Cluster
Apache Cassandra
10. 10
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Application
11. 11
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
http://dev.killrvideo.com
https://killrvideo.github.io/
12. 12
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
1
killrvideo-dse
Drivers
DAO3
killrvideo-api-rest killrvideo-api-grpc killrvideo-api-graphql
2
Designer son service
13. 13
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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ées ?1
14. 14
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Modèle conceptuel
15. 15
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Designer son API
Modèle conceptuel
de données
(Entités, Relations)
Parcours applicatif
(Requêtes)
Base de données
(Technos +Table)
21. 21
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
22. 22
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
25. 25
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
26. 26
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Réutilisation HTTP, orienté ressources
Découplage Client/Serveur
Api évolutive (versioning)
Tooling (API Management)
Attention au payload
Exposition de fonctions/commandes
Pas de découverte
CRUD Superstar
Mutations (modifications)
27. 27
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Haute Performance (Async, serialisation)
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
https://github.com/clun/snowcamp2019
Notes de l'éditeur
Traitement, fonction, story, comportement
Qui traverse toutes les couches applicatives