Successfully reported this slideshow.
Your SlideShare is downloading. ×

10 API Gateway Pattern + Office 365 API = Microsoft Graph

Ad

aOS Genève
22 juin 2017
API Gateway Pattern + Office 365 API = Microsoft
Graph
@felix_billon

Ad

aOS Genève
22 juin 2017
Félix Billon
Développeur Web Organisateur Membre
@felix_billon
felixbillon
http://shakedatcode.fr

Ad

aOS Genève
22 juin 2017
Microservices ?
Approche Monolithic Approche Microservices
Commandes ProduitsClients Commandes Pro...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Check these out next

1 of 27 Ad
1 of 27 Ad

More Related Content

Slideshows for you (18)

More from aOS Community (20)

10 API Gateway Pattern + Office 365 API = Microsoft Graph

  1. 1. aOS Genève 22 juin 2017 API Gateway Pattern + Office 365 API = Microsoft Graph @felix_billon
  2. 2. aOS Genève 22 juin 2017 Félix Billon Développeur Web Organisateur Membre @felix_billon felixbillon http://shakedatcode.fr
  3. 3. aOS Genève 22 juin 2017 Microservices ? Approche Monolithic Approche Microservices Commandes ProduitsClients Commandes ProduitsClients
  4. 4. aOS Genève 22 juin 2017 Problème Approche Monolithic Approche Microservices Client Commandes ProduitsClients Commandes ProduitsClients Client
  5. 5. aOS Genève 22 juin 2017 API Gateway Pattern Félix Billon @felix_billon
  6. 6. aOS Genève 22 juin 2017 API Gateway pattern Commandes ProduitsClients Client Gateway
  7. 7. aOS Genève 22 juin 2017 Implémentation : NetFlix Falcor
  8. 8. aOS Genève 22 juin 2017 Implémentation : Facebook GraphQL Service 2 Service 3Service 1 Client GraphQL Server
  9. 9. aOS Genève 22 juin 2017 Implémentation : Microsoft Graph
  10. 10. aOS Genève 22 juin 2017 Microsoft Graph Félix Billon @felix_billon
  11. 11. aOS Genève 22 juin 2017 En bref • API Gateway pour communiquer avec l’ensemble des produits d’Office 365 mais pas que !
  12. 12. aOS Genève 22 juin 2017 Vision macro
  13. 13. aOS Genève 22 juin 2017 Authentification : via un utilisateur délégation des permissions 1. Enregistrement de l’application. 2. Appeler le serveur d’autorisation 3. Obtenir un access token 4. Appeler Micrososft Graph avec l’acess token 5. Rafraichir le token expiré avec le refresh token
  14. 14. aOS Genève 22 juin 2017 Authentification : sans utilisateur permission propre à l’application 1. Enregistrement de l’application. 2. Configurer les permissions de l’application (dans le portail) 3. Obtenir l’approbation d’un administrateur 4. Obtenir un access token 5. Appeler Micrososft Graph avec l’acess token
  15. 15. aOS Genève 22 juin 2017 Authentification • Librairie : • Azure AD (ADAL) • Azure AD 2.0 (MSAL) • MS Graph connect sample : • Angular2 • Node.JS • Android • PHP • …
  16. 16. aOS Genève 22 juin 2017 Utilisations MS Graph API • API rest classique : http + verb. Verbe Description GET Lire les données d’une ressource POST Créer une ressource ou effectuer une action PATCH Mettre à jour une ressources avec de nouvelles valeurs PUT Remplacer une ressource DELETE Supprimer une ressource
  17. 17. aOS Genève 22 juin 2017 Utilisations MS Graph API • Structure d’une requête : • Exemple : • https://graph.microsoft.com/v1.0/me/messages • https://graph.microsoft.com/beta/me/insights/trending • https://graph.microsoft.com/v1.0/me/messages?$filter=importance eq 'high‘
  18. 18. aOS Genève 22 juin 2017 Parcourir le graph • https://graph.microsoft.com/{version}/$metadata
  19. 19. aOS Genève 22 juin 2017 Personnaliser la réponse Nom Description $filter Filtre les résultats (lignes) $select Filtre les propriétés (colonnes) $expand Permet d’obtenir des ressources connexes. $orderBy Ordonne les résultats $top Limite les résultats. $count Donne le nombre de ressources correspondant à la requête. $skip Permet de sauter des résultats $search Recherche parmi les résultats
  20. 20. aOS Genève 22 juin 2017 Batch request • Permet de faire plusieurs requête en une seul
  21. 21. aOS Genève 22 juin 2017 Tracker les changements • Utiliser le query-parameter : $delta • Permet de parcourir l’ensemble des mutations de la ressource. • Retourne un nœud nommé @odata.nextLink = prochaine page de changement • Retourne un nœud nommé @odata.deltaLink = plus de changement
  22. 22. aOS Genève 22 juin 2017 Etendre les données • Deux façon : • Open extensions : • Simple d’utilisation • Permet d’ajouter des données non typée • Directement liée à une ressource • Récupération via $expand • Schema extentions : • Plus complexe • Ensemble de données typées. • Permet d’étendre le schéma du graph • Récupération via $select, possibilité de filtré dessus, …
  23. 23. aOS Genève 22 juin 2017 Exemples et SDKs
  24. 24. aOS Genève 22 juin 2017 SDKs
  25. 25. aOS Genève 22 juin 2017 Conclusion Félix Billon
  26. 26. aOS Genève 22 juin 2017 Conclusion • Grande avancée qui s’inscrit dans la logique de fédération des services sous Office 365. • Pas encore toutes les APIs/fonctionnalités et beaucoup en preview. • Avance à très grands pas ! • Le tournant à ne pas manquer pour les dev Office 365.
  27. 27. aOS Genève 22 juin 2017 Merci à nos sponsors !

Editor's Notes

  • application monolitich : découpée en différente couche fonctionnelle (présentation layer, BLL, DLL, …)

    Image tirée de la doc de service frabric
  • Problème micro services :
    déploiement : azure service fabric, container, …
    communication : event driven, …
    service discovery …

    Multiple endpoint
  • Joue le rôle de routeur de requêtes/ orchestrateur
    Avantages : moins d’aller retour client/services, simplification code client, une seul authentification (spécifique), loggins, contrôle du traffic, …
    Inconvénient : ajout d’un nouveau composant (déploiement, …), higly avaible, doit connaitre tous les endpoints des microservices.
  • Developer preview
    Open source depuis 2015

    Le client va chercher ses données dans un gros model json (model falcor)
  • 2015 également
    Spécification, implémentation : .Net, Javascript, Python, Ruby, Scala PHP, …
    Modélise les données sous forme de graph au sein du graphQl server puis dire comment les résoudre.
    On utilise un client pour parler au graph
  • graph API facebook
    API gateway = one endpoint
    Donnée organiser sous forme de graph
    Lié à projet rome : transmettre des scénario entre device !
    Insight (mode delve objet tendance, personne avec qui je travail, personne en rapport avec un sujet, …) rapport, ….
    Interroger et muter ce graph.
    Tracker les changement du graph
  • OpenID single sign on + Oauth 2.0 gestions des autorisations.

    Un seul endpoint pour accéder à l’ensemble des données.
  • Il faut un access token contenant les scope nécessaire pour effectuer une requête à MS Graph

    Enregistrement de l’application sur : MS App Registration Portal.
    Via utilisateur : serveur d’autohirsation demande d’approbation de l’utilisateur (donner les droits à l’application)
    Approbation administrateur via API ou portail.

    DEMO

  • Get : obetnir les info d’un utilisateur, d’un group, obtenir les mails, worksheet, …
    Post : envoyer un mail, créer un répertoire sous onedrive, ajouter un contact, …
  • Version : 1.0 production App, Beta inclue les APIs en preview
    Ressource : me, users, group, drives and sites. Ressource avec laquelle on souhaite interagir. Point d’entré dans le graph.
    Query-paramter : customiser la réponse.

    DEMO

  • Obtenir la description du graph pour pouvoir comprendre la façon dont il est modélisé.
    Suis les normes Odata protocol (ISO/IEC approved) standardisé par Oasis.
    Voir dans la doc la liste des api : user, groups, excel, azure active directory, onedrive, onenote, …

    @odata.context situe le contexte au sein du graph

    DEMO
  • $filter = where (egal, superieur, inferieur, and, or, contains, startwith, any, all, …
    https://graph.microsoft.com/v1.0/users?$filter=GivenName eq 'Félix‘

    $select = select (nom de champs)
    https://graph.microsoft.com/v1.0/me/events?$select=subject,body,bodyPreview,organizer,attendees,start,end,location

    $expand = pour accéder à une ressource relative ou à une collection (de base non retourné pour limiter la bande passante et alléger le temps de réponse du service. (un utilisateur et son manager, un utilisateur et ses collaborateurs,…)
    https://graph.microsoft.com/v1.0/me/drive/root?$expand=children($select=id,name)

    $orderBy = orderBy
    $top = $skipToken (page suivante)

    $count = retourne le nombre dans une propriété
    https://graph.microsoft.com/v1.0/me/contacts?$count=true

    $skip = sauté les premier résultat

    $search = (seulement message et personne) limité à 250 résultat. (tous les message avec le mot…)
    https://graph.microsoft.com/beta/me/people/?$search=j
    https://graph.microsoft.com/v1.0/me/messages?$search="from:felix.billon@wanadoo.fr« 

    Sur le endpoint beta, $ est optionel !

    DEMO
  • En beta pour l’instant
  • Spécifité du $select permet de ne tracker que les champs demandé
    $expand inutilisable.

    Les liens contiennent des tokens

    DEMO
    https://graph.microsoft.com/v1.0/users/delta?$select=displayName,givenName,surname
  • Open extensions = Office 365 data extentions

    Schema extentions peut être CRUD de façon indépendante.
  • Connect samplle : exemple de connection
    Snippet sample : exemple d’interrogation du graph (envoi d’email, accès aux excel, …)
    SDKs : aide pour interroger le graph

×