Le Post Infeeny

Les articles des consultants et experts Infeeny

#SPC2012 : Understanding OAuth, REST and OData

Session de 13h45 à 15h animée par Ted Pattison

Comme à son habitude, Ted Pattison fait salle comble alors que la session ne démarre que dans 10 mn. C’est la 1ère fois de la semaine que je vois des personnes refoulées à l’entrée de la salle faute de places disponibles. La rançon de la gloire quand on est une légende du monde SharePoint   😉

Et c’est parti par une introduction de ce qu’est REST comparé à son ancêtre qu’était SOAP, grandement utilisé par les webservices au début des années 2000 (notamment dans .NET)

SOAP était sur XML et réputé pour rendre compliqué des choses qui devaient être simple

REST a donc fait son apparition comme alternative à SOAP pour simplifier les choses tout en gardant des concepts connus (envoi de requêtes HTTP et récupération des réponses)

REST a été démocratisé via les services  RESTful qui permettent d’exécuter des actions particulières en fonction des verbes utilisés dans les requêtes HTTP (GET, POST, PUT, DELETE, PATCH)

Les services RESTful sont utilisés dans de très nombreuses API de développement et les données peuvent être transmises sous différentes formes (HTML, XML, ATOM, JSON)

Pour définir quel format de données est utilisé lors d’un appel, les leaders HTTP (Content-Type et Accept) sont utilisés avec des valeurs telles que text/html, text/xml, application/json…

Le deux formats les plus répandus sont ATOM (basé sur XML et donc plus verbeux) et JSON (notation condensée et donc plus légère à faire transiter sur le réseau)

Pour tout développeur devant se mettre à utiliser REST, des outils incontournables sont à connaitre:

  • Visual Studio 2012
  • jQuery
  • Fiddler

Passage à la 1ère démo et Ted se fait un peu de pub et indique que les slides et le code de ses démos est disponible dès à présent sur le site CriticalPathTraining (sa société)

Le but de cette démo est de réaliser une application web ASP.NET qui récupère des données REST sous différents formats (XML, JSON..) en utilisant jQuery

Il passe rapidement sur le code jQuery et lance Fiddler pour intercepter tout ce qui va transiter sur sa machine au niveau requêtes/réponses pour comprendre ce qui se passe lors d’appels à un service RESTful

Rien de bien compliqué jusqu’ici pour qui a déjà manipulé jQuery un minimum pour soumettre de requêtes à un serveur avec la commande $.ajax(….)

Même chose sur l’utilisation de Fiddler afin d’analyser les requêtes qui ont été soumises via jQuery et les réponses reçues du serveur

La seule partie intéressante dans cette démonstration concerne la possibilité de faire de débogage des scripts JS directement depuis IE via la console développeur dans laquelle on peut faire du pas à pas, avoir un inspecteur contenant la valeur des variables, etc…

Petit incident dans la salle… Quelqu’un vient de faire un malaise et du coup la session s’arrête pour quelques minutes

La session reprend et on voit que pour créer un objet JSON à partir d’une variable Javascript contenant les données, il existe JSON.stringify(…)

Retour aux slides pour faire un focus sur OData qui a été créé pour devenir LA référence des API destinées à l’accès à des données pour les applications basées sur des requêtes HTTP (pour la communication avec le serveur)

OData reprend les concepts de REST pour effectuer des opérations à savoir utiliser les verbes HTTP:

  • GET => Lecture
  • POST => Insertion
  • PATCH => Modification
  • DELETE => Suppression

Une requête OData est composée de 3 parties importantes:

  • L’URL du service
  • L’URL de la ressource souhaitée
  • Les paramètres éventuels (filtre, tri…)

Les informations qui sont données sont ni plus ni moins que celles que l’on retrouve sur le site officiel présentant OData (http://www.odata.org) donc passons sur tous les détails

Parlons maintenant de SharePoint dont la version 2010 avait introduit OData via le service client.svc pour accéder aux données

SharePoint 2013 étend les fonctinnalités de client.svc et surtout implémente désormais OData en accord avec les standards de ce protocole

SharePoint 2013 propose également une API côté client (CSOM) qui peut être utilisée en .NET ou Javascript et qui repose en partie sur OData

client.svc existe toujours mais un alias à été créé (_api) pour simplifier les appels à SharePoint pour récupérer des données (ex : http://server/sites/teamsite/_api/lists)

Si on copie l’URL précédente dans un navigateur Internet, on récupère les données au format OData / XML (ne pas oublier de désactiver le mode lecture RSS dans les paramètres de IE pour voir les données brutes car sinon elles sont mises en forme par IE)

Si l’on veut développer une application .NET qui utilise les services REST de SharePoint 2013, rien de plus simple grâce à HttpWebRequest et HttpWebResponse pour envoyer/récupérer les requêtes/réponses et XDocument.Descendants (si format XML) ou JavascriptSerializer (si format JSON)

Si on veut faire la même chose dans une application web côté client, la seule réponse à laquelle il faut penser même si d’autres existent est jQuery car c’est une solution qui a fait ses preuves

Pour les personnes qui ont travaillé sur les versions beta/preview, attention car une modification importante dans les headers est désormais requise. Il faut mettre application/json;odata=verbose pour le leader Accept (application/json seul suffisait auparavant)

Si jamais l’application doit faire des modifications dans SharePoint, il est nécessaire de fournir un token (dans le header X-RequestDigest) lors des appels REST, ce token étant généré en appelant au préalable l’URL _api/contextinfo (le token est valable 30mn par défaut)

Pour la suppression d’un élément d’une liste par exemple, il faut préciser le header If-Match:*

Si on veut modifier une élément d’une liste, il faut préciser le header If-Match:etag (etag étant l’identifiant récupéré lors de la lecture de l’élément). Le fait de préciser l’etag permet de s’assurer qu’un élément n’a pas été modifié entre la lecture et la modification. S’il a été modifié, il faut alors géré le conflit dans l’application

On repasse sur une démonstration montrant tout ce qui vient d’être expliqué (application console utilisant des WebRequest, application HTML utilisant jQuery…) donc rien de particulier à dire si ce n’est qu’évidemment, les données sont correctement récupérées/mises à jour dans SharePoint selon le comportement codé dans l’application

Pour finir la session, on aborde maintenant la partie OAuth qui va être survolée car des sessions entières sur ce sujet sont prévues

Il existait sur SP2010 des problèmes de sécurité que l’on utilise des solutions déployées sur la ferme (le code est considéré FullTrust) ou en mode sandbox

Dans SharePoint 2013, l’authentification est toujours gérée de la même manière pour les sites mais en revanche pour les applications qui vont manipuler les données à distance cela change

Les applications ont besoin d’autorisations pour effectuer certaines actions et elles ont des autorisations par défaut, le développeur définissant lesquelles sont nécessaires pour fonctionner

Lors de l’installation d’une application, si l’utilisateur refuse d’autoriser les permissions requises par l’application, celle-ci ne s’installe pas

Le processus général de comment fonctionne l’authentification avec OAuth est ensuite montré mais faute de temps, passé à la vitesse de la lumière

Une session intéressante pour les personnes ne connaissant pas du tout les services REST/OData désormais disponibles dans SharePoint 2013.

Ayant personnellement pas mal travaillé sur le sujet ces derniers mois, notamment pour préparer le café SharePoint du mois de Septembre avec le développement d’une application iPad communiquant avec Office 365, aucune nouvelle information à se mettre sous la dent ce qui laisse un petit goût amer notamment sur la partie OAuth qui a été survolée en 5mn chrono

Stéphane

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :