{"id":2279,"date":"2016-04-26T11:00:01","date_gmt":"2016-04-26T09:00:01","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=2279"},"modified":"2016-04-26T10:03:10","modified_gmt":"2016-04-26T08:03:10","slug":"api-graph-introduccion-en-nuestros-desarrollos","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/","title":{"rendered":"C\u00f3mo utilizar API Graph en nuestros desarrollos"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/support.content.office.net\/es-es\/media\/c85d2e43-ba2a-43eb-af8f-b2af9651a60d.png\" alt=\"\" width=\"865\" height=\"413\" \/><\/p>\n<p>En los \u00faltimos meses hemos visto como en Microsoft han ido surgiendo aplicaciones en base a Graph. Quiz\u00e1s el notorio sea Delve&#8230; Por si alguien a\u00fan no lo conoce, Delve es una aplicaci\u00f3n que muestra la informaci\u00f3n que considera que nos interesa. Para hacerlo,\u00a0por un lado utiliza <strong>Machine Learning<\/strong> y, por otro utiliza <strong>Graph<\/strong> para obtener toda la informaci\u00f3n relativa a informaci\u00f3n a objetos que se encuentran en el <strong>Directorio Activo<\/strong>. En este art\u00edculo vamos a ver c\u00f3mo podemos empezar a utilizarla \ud83d\ude09<!--more--><\/p>\n<p>La API Graph (por definirlo de una forma muy sencilla)\u00a0<strong>es una unificaci\u00f3n de todas las API&#8217;s<\/strong> que actualmente hay en Office 365 aprovechando el acceso a datos, inteligencia y conocimientos procedentes de la nube de Microsoft.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/graph.microsoft.io\/Media\/Default\/Home-Page\/graph_illustration_horizontal_948x215_1.png\" alt=\"\" width=\"865\" height=\"215\" \/><\/p>\n<h2><\/h2>\n<h2>Manos a la Obra<\/h2>\n<p>Siempre que trabajemos con Autenticaci\u00f3n contra Office 365, el primer paso es<strong> registrar nuestra aplicaci\u00f3n dentro del tenant<\/strong> para indicarle cuales son los permisos que le vamos a otorgar. Lo podemos hacer de dos formas:<\/p>\n<ol>\n<li>Registramos la APP en el portal de Azure siguiendo los pasos indicando en este <a href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/2014\/11\/11\/registrar-una-aplicacion-en-el-portal-de-azure\/\" target=\"_blank\">art\u00edculo<\/a>\u00a0y dando permisos para utilizar la API Graph.<\/li>\n<li>Utilizando Visual Studio (bien a la hora de crear el proyecto) o pulsanso bot\u00f3n derecho desde el explorador de Soluciones y pulsar sobre la Opci\u00f3n de Configure Azure AD Autenticaci\u00f3n.<\/li>\n<\/ol>\n<p>Una vez tenemos la aplicaci\u00f3n autenticada, debemos tener claro los siguientes conceptos para el tema de la autenticaci\u00f3n de nuestra aplicaci\u00f3n contra el Azure Active Directory:<\/p>\n<ul>\n<li><strong>ClientID y SecretID<\/strong>: Son dos GUID que son los que identifican nuestra Aplicaci\u00f3n<\/li>\n<li><strong>TenantID<\/strong>: Guid del Tenant donde va a estar alojada la Aplicaci\u00f3n<\/li>\n<li><strong>Domain<\/strong>: Dominio donde esta la aplicaci\u00f3n por ejemplo encamina.com<\/li>\n<li><strong>PostLogoutRedirectUri:\u00a0<\/strong>P\u00e1gina de redirecci\u00f3n de la autenticaci\u00f3n una vez se autentica contra el AAD<\/li>\n<\/ul>\n<p>Ahora desde la aplicaci\u00f3n que estamos desarrollando, tendremos que autenticarnos contra el Azure Active Directory. Para ello, vamos a utilizar la librer\u00eda ADAL. Una librer\u00eda que la podemos obtener mediante Nugget, y cuya funci\u00f3n principal es abstraernos de las peticiones que hay que hacer a Azure para autenticarse, lo cual simplifica mucho nuestro desarrollo. Si quer\u00e9is saber m\u00e1s, pod\u00e9is <a href=\"http:\/\/www.compartimoss.com\/revistas\/numero-24\/active-directory-authentication-library-aportacion-desarrollo-office-365\" target=\"_blank\">leer este art\u00edculo que escrib\u00ed\u00a0<\/a>para la Revista <a href=\"http:\/\/www.compartimos.com\" target=\"_blank\">CompartiMOSS<\/a>.<\/p>\n<p>Un ejemplo de autenticaci\u00f3n utilizando ADAL en una aplicaci\u00f3n ASP.NET puede ser el siguiente:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n  app.UseOpenIdConnectAuthentication(\r\n                new OpenIdConnectAuthenticationOptions\r\n                {\r\n                    ClientId = Settings.ClientId,\r\n                    Authority = string.Concat(Settings.AadInstance, Settings.TenantId),\r\n                    PostLogoutRedirectUri = Settings.PostLogoutRedirectUri,\r\n                    AuthenticationMode = AuthenticationMode.Active,\r\n                    TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters { ValidateIssuer = false },\r\n\r\n\r\n                    Notifications = new OpenIdConnectAuthenticationNotifications()\r\n                    {\r\n                        RedirectToIdentityProvider = n =&gt;\r\n                        {\r\n                            \/\/ if signing out, add the id_token_hint\r\n                            if (n.ProtocolMessage.RequestType == OpenIdConnectRequestType.LogoutRequest)\r\n                            {\r\n                                var idTokenHint = n.OwinContext.Authentication.User.FindFirst(&quot;id_token&quot;);\r\n\r\n                                if (idTokenHint != null)\r\n                                {\r\n                                    n.ProtocolMessage.IdTokenHint = idTokenHint.Value;\r\n                                }\r\n                            }\r\n\r\n                            return Task.FromResult(0);\r\n                        },\r\n\r\n                        AuthorizationCodeReceived = async (context) =&gt;\r\n                        {\r\n                            var userObjectId = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;\r\n                            var encaminaAdal = new EncaminaAdalTokenCache(userObjectId);\r\n\r\n                            var authContext = new AuthenticationContext(Settings.AzureADAuthority, encaminaAdal);\r\n\r\n                            \/\/ Generate the parameterized URL for Azure login.\r\n                            authContext.GetAuthorizationRequestURL(\r\n                                Settings.O365UnifiedAPIResource,\r\n                                Settings.ClientId,\r\n                                new Uri(Settings.PostLogoutRedirectUri),\r\n                                UserIdentifier.AnyUser,\r\n                                null);\r\n\r\n                            var authenticationResult = await authContext.AcquireTokenByAuthorizationCodeAsync(\r\n                                context.Code,\r\n\t\t\t\t\t\t        new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)),\r\n                                new ClientCredential(Settings.ClientId, Settings.ClientSecret),                                                        \r\n                                Settings.O365UnifiedAPIResource);\r\n                            \r\n                           \r\n                        }\r\n\r\n<\/pre>\n<p>Este c\u00f3digo lo ubicamos dentro del modulo de arranque de nuestra aplicaci\u00f3n. En nuestro caso, hemos a\u00f1adido un <strong>sistema de \u00abCache del Token\u00bb<\/strong>, de tal forma que podamos ahorrarnos llamadas de autenticaci\u00f3n al AAD.<\/p>\n<p>Antes de hacer una petici\u00f3n, con este token lo que hacemos es <strong>verificar\u00a0si el Token sigue vigente<\/strong> y que prolongue su vigencia de tal forma que mientras estemos haciendo uso de la API no tendremos ning\u00fan problema en acceder. En el caso de que estemos un periodo sin actividad y volvamos a utilizar la aplicaci\u00f3n, esta nos volver\u00e1 a pedir las credenciales. \u00bfA que os suena este comportamiento?<\/p>\n<p>Para poder utilizar la Api Graph, en primer lugar obtendremos el Token de la siguiente forma:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n     public async Task&lt;string&gt; GetTokenForApplication()\r\n        {\r\n                  \r\n            var signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;\r\n            var userObjectID =\r\n                    ClaimsPrincipal.Current.FindFirst(&quot;http:\/\/schemas.microsoft.com\/identity\/claims\/objectidentifier&quot;)\r\n                        .Value;\r\n                \/\/ get a token for the Graph without triggering any user interaction (from the cache, via multi-resource refresh token, etc)\r\n                var clientcred = new ClientCredential(this.clientId, this.clientSecret);\r\n                \/\/ initialize AuthenticationContext with the token cache of the currently signed in user, as kept in the app's database\r\n                var encaminaAdalTokenCache = new EncaminaAdalTokenCache(signedInUserID);\r\n                var authenticationContext =\r\n                    new AuthenticationContext(string.Concat(this.aadInstance, this.tenantId), encaminaAdalTokenCache);\r\n\r\n                var authenticationResult =\r\n                    await authenticationContext.AcquireTokenSilentAsync(this.O365UnifiedAPIResource, clientcred,\r\n                        new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));\r\n                return authenticationResult.AccessToken;           \r\n        }\r\n<\/pre>\n<p>Con este\u00a0Token ya podemos realizar una <strong>consulta a la API<\/strong>. Por ejemplo, que nos devuelva todos los grupos a los que pertenece un usuario:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n  public async Task&lt;IEnumerable&lt;GroupGraph&gt;&gt; GetGroups()\r\n        {\r\n            var accessToken = await this.service.GetTokenForApplication();\r\n            IEnumerable&lt;GroupGraph&gt; groupGraphResponse = null;\r\n            using (var client = new HttpClient())\r\n            {\r\n                using (var request = new HttpRequestMessage(HttpMethod.Get, Settings.GetMyGroupOrganization))\r\n                {\r\n                    request.Headers.Authorization = new AuthenticationHeaderValue(&quot;Bearer&quot;, accessToken);\r\n                    using (var response = await client.SendAsync(request))\r\n                    {\r\n                        if (response.IsSuccessStatusCode)\r\n                        {\r\n                            using (var content = response.Content)\r\n                            {\r\n                                var result = await content.ReadAsStringAsync();\r\n                                groupGraphResponse = JsonConvert.DeserializeObject&lt;GroupResponse&gt;(result).value;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return groupGraphResponse;\r\n        }\r\n<\/pre>\n<p>Para poder saber todos los EndPoint que hay disponibles, os recomiendo ir a la <a href=\"https:\/\/msdn.microsoft.com\/Library\/Azure\/Ad\/Graph\/api\/api-catalog\" target=\"_blank\">documentaci\u00f3n oficial<\/a> que proporciona Microsoft. Tambi\u00e9n <a href=\"https:\/\/graph.microsoft.io\/en-us\/graph-explorer\" target=\"_blank\">disponemos de una aplicaci\u00f3n<\/a> para poder realizadas a la API y podemos probar su funcionamiento, as\u00ed como la devoluci\u00f3n de los datos.<\/p>\n<h2>Resumen<\/h2>\n<p>Como hemos podido ver, Microsoft cada vez nos proporciona <strong>m\u00e1s herramientas para que podamos utilizar las servicios que hay en Office 365<\/strong> <strong>en nuestros desarrollos<\/strong>. Ahora mismo la tendencia de que est\u00e9 todo centralizado en un \u00fanico producto (SharePoint) ha cambiado. Ahora todos son servicios que se pueden consumir desde la app\/dispositivo que se quiera.<\/p>\n<p>Esto proporciona <strong>m\u00e1s libertad a la hora de escoger\/plantear una soluci\u00f3n<\/strong> con lo cual todo el mundo sale beneficiado: el desarrollador porque no debe incrustar un desarrollo en una plataforma que no esta preparada para ello y el cliente porque recibe un desarrollo de m\u00e1s calidad y m\u00e1s acorde a las expectativas solicitadas.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>En los \u00faltimos meses hemos visto como en Microsoft han ido surgiendo aplicaciones en base a Graph. Quiz\u00e1s el notorio sea Delve&#8230; Por si alguien a\u00fan no lo conoce, Delve es una aplicaci\u00f3n que muestra la informaci\u00f3n que considera que &hellip; <a href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[119,113],"tags":[172],"class_list":["post-2279","post","type-post","status-publish","format-standard","hentry","category-azure-2","category-office-365-2","tag-graph"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>C\u00f3mo utilizar API Graph en nuestros desarrollos - Desarrollando sobre SharePoint<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"C\u00f3mo utilizar API Graph en nuestros desarrollos - Desarrollando sobre SharePoint\" \/>\n<meta name=\"twitter:description\" content=\"En los \u00faltimos meses hemos visto como en Microsoft han ido surgiendo aplicaciones en base a Graph. Quiz\u00e1s el notorio sea Delve&#8230; Por si alguien a\u00fan no lo conoce, Delve es una aplicaci\u00f3n que muestra la informaci\u00f3n que considera que &hellip; Continue reading &rarr;\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/support.content.office.net\/es-es\/media\/c85d2e43-ba2a-43eb-af8f-b2af9651a60d.png\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adri\u00e1n D\u00edaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/api-graph-introduccion-en-nuestros-desarrollos\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/api-graph-introduccion-en-nuestros-desarrollos\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"C\u00f3mo utilizar API Graph en nuestros desarrollos\",\"datePublished\":\"2016-04-26T09:00:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/api-graph-introduccion-en-nuestros-desarrollos\\\/\"},\"wordCount\":1058,\"commentCount\":0,\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/api-graph-introduccion-en-nuestros-desarrollos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/support.content.office.net\\\/es-es\\\/media\\\/c85d2e43-ba2a-43eb-af8f-b2af9651a60d.png\",\"keywords\":[\"graph\"],\"articleSection\":[\"Azure\",\"Office 365\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/api-graph-introduccion-en-nuestros-desarrollos\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/api-graph-introduccion-en-nuestros-desarrollos\\\/\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/api-graph-introduccion-en-nuestros-desarrollos\\\/\",\"name\":\"C\u00f3mo utilizar API Graph en nuestros desarrollos - Desarrollando sobre SharePoint\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/api-graph-introduccion-en-nuestros-desarrollos\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/api-graph-introduccion-en-nuestros-desarrollos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/support.content.office.net\\\/es-es\\\/media\\\/c85d2e43-ba2a-43eb-af8f-b2af9651a60d.png\",\"datePublished\":\"2016-04-26T09:00:01+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/api-graph-introduccion-en-nuestros-desarrollos\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/api-graph-introduccion-en-nuestros-desarrollos\\\/#primaryimage\",\"url\":\"https:\\\/\\\/support.content.office.net\\\/es-es\\\/media\\\/c85d2e43-ba2a-43eb-af8f-b2af9651a60d.png\",\"contentUrl\":\"https:\\\/\\\/support.content.office.net\\\/es-es\\\/media\\\/c85d2e43-ba2a-43eb-af8f-b2af9651a60d.png\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/\",\"name\":\"Desarrollando sobre SharePoint\",\"description\":\"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\",\"name\":\"Adri\u00e1n D\u00edaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"caption\":\"Adri\u00e1n D\u00edaz\"},\"description\":\"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/author\\\/desarrollandosobresharepoint\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\u00f3mo utilizar API Graph en nuestros desarrollos - Desarrollando sobre SharePoint","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/","twitter_card":"summary_large_image","twitter_title":"C\u00f3mo utilizar API Graph en nuestros desarrollos - Desarrollando sobre SharePoint","twitter_description":"En los \u00faltimos meses hemos visto como en Microsoft han ido surgiendo aplicaciones en base a Graph. Quiz\u00e1s el notorio sea Delve&#8230; Por si alguien a\u00fan no lo conoce, Delve es una aplicaci\u00f3n que muestra la informaci\u00f3n que considera que &hellip; Continue reading &rarr;","twitter_image":"https:\/\/support.content.office.net\/es-es\/media\/c85d2e43-ba2a-43eb-af8f-b2af9651a60d.png","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"C\u00f3mo utilizar API Graph en nuestros desarrollos","datePublished":"2016-04-26T09:00:01+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/"},"wordCount":1058,"commentCount":0,"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/#primaryimage"},"thumbnailUrl":"https:\/\/support.content.office.net\/es-es\/media\/c85d2e43-ba2a-43eb-af8f-b2af9651a60d.png","keywords":["graph"],"articleSection":["Azure","Office 365"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/","url":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/","name":"C\u00f3mo utilizar API Graph en nuestros desarrollos - Desarrollando sobre SharePoint","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"primaryImageOfPage":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/#primaryimage"},"image":{"@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/#primaryimage"},"thumbnailUrl":"https:\/\/support.content.office.net\/es-es\/media\/c85d2e43-ba2a-43eb-af8f-b2af9651a60d.png","datePublished":"2016-04-26T09:00:01+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/api-graph-introduccion-en-nuestros-desarrollos\/#primaryimage","url":"https:\/\/support.content.office.net\/es-es\/media\/c85d2e43-ba2a-43eb-af8f-b2af9651a60d.png","contentUrl":"https:\/\/support.content.office.net\/es-es\/media\/c85d2e43-ba2a-43eb-af8f-b2af9651a60d.png"},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/","name":"Desarrollando sobre SharePoint","description":"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb","name":"Adri\u00e1n D\u00edaz","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","caption":"Adri\u00e1n D\u00edaz"},"description":"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/author\/desarrollandosobresharepoint\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/2279","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/comments?post=2279"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/2279\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=2279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=2279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=2279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}