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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Cédrick Lunven
Developer Advocate @
Créateur de
Contributeur sur
3
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
http://academy.datastax.com
(Training | Videos | Developer Blog)
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
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Cassandra - Evelyn de Morgan (1855-1919)
Apache Cassandra
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
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
On-Premise
Data Center
Cluster
Apache Cassandra
10
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Application
11
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
http://dev.killrvideo.com
https://killrvideo.github.io/
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
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
Modèle conceptuel
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
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
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
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
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
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
25
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
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
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
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
Create API for your databases Rest, gRPC, GraphQL
@clunven | @SnowCampIO | #api
2019
 https://github.com/clun/snowcamp2019

Design API - SnowCampIO

  • 1.
    1 Create API foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019 2019 Designer ses API Pour l’accès aux données
  • 2.
    2 Create API foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019 Cédrick Lunven Developer Advocate @ Créateur de Contributeur sur
  • 3.
    3 Create API foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019 http://academy.datastax.com (Training | Videos | Developer Blog)
  • 4.
    4 Create API foryour 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 foryour 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 foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019 Cassandra - Evelyn de Morgan (1855-1919) Apache Cassandra
  • 7.
    7 Create API foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019 Noeud 1 à 3To 3000 Tx/sec/core Anneau (DataCenter) Apache Cassandra
  • 8.
    8 Create API foryour 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 foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019 On-Premise Data Center Cluster Apache Cassandra
  • 10.
    10 Create API foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019 Application
  • 11.
    11 Create API foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019 http://dev.killrvideo.com https://killrvideo.github.io/
  • 12.
    12 Create API foryour 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 foryour 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 foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019 Modèle conceptuel
  • 15.
    15 Create API foryour 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 foryour 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 foryour 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 foryour 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 foryour 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 foryour 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 foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019
  • 22.
    22 Create API foryour 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 foryour 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 foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019
  • 25.
    25 Create API foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019
  • 26.
    26 Create API foryour 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 foryour 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 foryour 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 foryour databases Rest, gRPC, GraphQL @clunven | @SnowCampIO | #api 2019  https://github.com/clun/snowcamp2019

Notes de l'éditeur

  • #3 Traitement, fonction, story, comportement  Qui traverse toutes les couches applicatives