{"id":1168,"date":"2019-11-14T09:26:15","date_gmt":"2019-11-14T09:26:15","guid":{"rendered":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?p=1168"},"modified":"2019-11-14T12:32:33","modified_gmt":"2019-11-14T12:32:33","slug":"vitamina-tu-api-en-net-core-con-odata","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/","title":{"rendered":"Vitamina tu API en .Net Core con OData"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1181\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata.jpg\" alt=\"Vitamina tu API .Net Core con Odata\" width=\"1161\" height=\"863\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata.jpg 1161w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata-300x223.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata-768x571.jpg 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata-1024x761.jpg 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata-610x453.jpg 610w\" sizes=\"auto, (max-width: 1161px) 100vw, 1161px\" \/><\/p>\n<p>Siempre has querido definir tu API para que realice consultas de una forma poderosa (como las disponibles en <strong>Azure Search<\/strong>)\u00a0 y lo sabes. En este post veremos qu\u00e9 es <strong>OData<\/strong> y c\u00f3mo integrarlo en nuestra API realizada en .NET Core para vitaminizarlas de una manera muy sencilla.<\/p>\n<p><!--more--><\/p>\n<p>NOTA: <strong>La implementaci\u00f3n actual de OData s\u00f3lo puede admitir hasta ASP.NET Core 2.2. <\/strong>Para ASP.NET Core 3.0 est\u00e1 previsto que se libere en el segundo trimestre de 2020.<\/p>\n<h1>\u00bfQu\u00e9 es OData?<\/h1>\n<p><strong>OData<\/strong> (<strong>Open Data Protocol<\/strong>) es un est\u00e1ndar que define un conjunto de mejores pr\u00e1cticas para la construcci\u00f3n y consumo de RESTful APIs, permitiendo a los desarrolladores la capacidad de desarrollar <strong>Queryable APIs<\/strong>. Este protocolo utiliza otras tecnolog\u00edas ya reconocidas como <strong>HTTP<\/strong>, <strong>AtomPub<\/strong> o <strong>JSON<\/strong> y permite a cualquier cliente obtenga informaci\u00f3n de cualquier fuente bas\u00e1ndose en:<\/p>\n<ul>\n<li>La estandarizaci\u00f3n de una forma uniforme de representaci\u00f3n de datos estructurados a trav\u00e9s de <strong>Atom<\/strong> o <strong>JSON<\/strong>.<\/li>\n<li>La utilizaci\u00f3n de convenciones <strong>URL<\/strong> uniformes, tanto para la navegaci\u00f3n, filtrado, orden y paginaci\u00f3n de datos (entre otros).<\/li>\n<li>La creaci\u00f3n de operaciones uniformes mediante m\u00e9todos <strong>HTTP<\/strong> (<strong>GET, POST, PUT y DELETE<\/strong>).<\/li>\n<\/ul>\n<p>Para m\u00e1s informaci\u00f3n pod\u00e9is visitar <a href=\"https:\/\/www.odata.org\/\">https:\/\/www.odata.org\/<\/a><\/p>\n<p>La potencia de <strong>OData<\/strong> nos da la posibilidad, entre otras, de:<\/p>\n<ul>\n<li>Aplicar filtros en los datos a obtener.<\/li>\n<li>Habilitar paginaci\u00f3n.<\/li>\n<li>Ordenar los datos.<\/li>\n<li>Reestructurar los datos de respuesta.<\/li>\n<li>Env\u00edo de solicitudes de forma as\u00edncrona o en modo <strong><em>batch<\/em><\/strong>.<\/li>\n<\/ul>\n<h1>Al l\u00edo que es lo que nos mola<\/h1>\n<p>Lo primero que debemos hacer es descargarnos el siguiente paquete Nuget: <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.AspNetCore.OData\/\">Microsoft.AspNetCore.OData<\/a><\/p>\n<p>Una vez instalado vamos a configurar <strong>OData<\/strong> en la inicializaci\u00f3n de nuestra API. En nuestra clase <strong>Startup.cs<\/strong> debemos agregar el servicio de <strong>OData<\/strong> de la siguiente forma:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\r\npublic void ConfigureServices(IServiceCollection services)\r\n{\r\n   services.AddOData();\r\n   services.AddODataQueryFilter();\r\n\r\n   services.AddDbContext&lt;AdventureWorks2016Context&gt;(options =&gt; options.UseSqlServer(Configuration.GetConnectionString(&quot;DefaultConnection&quot;)));\r\n\r\n   services.AddMvc(options =&gt;\r\n   {\r\n      options.EnableEndpointRouting = false;\r\n   }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);\r\n}\r\n\r\n<\/pre>\n<p>Hay que tener en cuenta que la versi\u00f3n 2.2 de .Net Core tiene habilitado por defecto el <em><strong>\u201cendpoint routing\u201d. <\/strong><\/em>Tenemos que deshabilitarlo para no recibir un bonito mensaje como este:<\/p>\n<p><strong>System.InvalidOperationException: &#8216;Cannot use &#8216;Microsoft.AspNet.OData.Routing.ODataRoute&#8217; with Endpoint Routing.&#8217;<\/strong><\/p>\n<p>Luego configuramos el <strong>routing<\/strong> de la siguiente forma:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\r\npublic static void Configure(IApplicationBuilder app, IHostingEnvironment env)\r\n{\r\n   if (env.IsDevelopment())\r\n   {\r\n      app.UseDeveloperExceptionPage();\r\n   }\r\n   else\r\n   {\r\n      \/\/ The default HSTS value is 30 days. You may want to change this for production scenarios, see https:\/\/aka.ms\/aspnetcore-hsts.\r\n      app.UseHsts();\r\n   }\r\n\r\n   app.UseHttpsRedirection();\r\n   app.UseMvc(routeBuilder =&gt;;\r\n   {\r\n      routeBuilder.EnableDependencyInjection();\r\n      routeBuilder.Select().Filter().OrderBy().Expand().Count().MaxTop(10);\r\n\r\n      routeBuilder.MapODataServiceRoute(&quot;api&quot;, &quot;api&quot;, GetEdmModel(app.ApplicationServices));\r\n   });\r\n}\r\n\r\nprivate static IEdmModel GetEdmModel(IServiceProvider serviceProvider)\r\n{\r\n   ODataModelBuilder builder = new ODataConventionModelBuilder(serviceProvider);\r\n\r\n   builder.EntitySet&lt;Person&gt;(&quot;Person&quot;)\r\n           .EntityType\r\n           .Filter()\r\n           .Count()\r\n           .Expand()\r\n           .OrderBy()\r\n           .Page()\r\n           .Select();\r\n   .. .. ..\r\n   return builder.GetEdmModel();\r\n}\r\n\r\n<\/pre>\n<h3>L\u00edneas de c\u00f3digo<\/h3>\n<p>Comentemos algo de estas lineas de c\u00f3digo.<\/p>\n<ul>\n<li><strong>routeBuilder.EnableDependencyInjection<\/strong>: \u00a0Esto habilita la inyecci\u00f3n de dependencias para inyectar los servicios de <strong>OData<\/strong> en nuestros controladores.<\/li>\n<li><strong>routeBuilder.Select().Filter().OrderBy().Expand().Count().MaxTop(10)<\/strong>: Esta l\u00ednea de c\u00f3digo establece qu\u00e9 funcionalidad de <strong>OData<\/strong> queremos habilitar en nuestra API.<\/li>\n<li><strong>routeBuilder.MapODataServiceRoute(\u00abapi\u00bb, \u00abapi\u00bb, GetEdmModel(app.ApplicationServices))<\/strong>: Esta l\u00ednea habilita el mapeo de la ruta <strong>OData<\/strong> con los atributos de ruta de <strong>OData<\/strong> que veremos m\u00e1s adelante en los controladores.<\/li>\n<\/ul>\n<p>Si os fij\u00e1is en la \u00faltima l\u00ednea, se configura <strong>EDM<\/strong> (<strong>Entity Data Model<\/strong>) para definir el mapeo de forma correcta entre nuestras entidades de datos en entidades que usa <strong>OData<\/strong> para realizar las operaciones de filtro, selecci\u00f3n, ordenaci\u00f3n, etc.<\/p>\n<p>Con esto ya tendr\u00edamos configurado <strong>OData<\/strong> en nuestra API. \u00bfSencillo no?<\/p>\n<h3>Controladores<\/h3>\n<p>Echemos un ojo a los controladores.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\r\nusing AspNetCoreOData.Database;\r\nusing Microsoft.AspNet.OData;\r\nusing Microsoft.AspNet.OData.Query;\r\nusing Microsoft.AspNet.OData.Routing;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing System.Linq;\r\n\r\nnamespace AspNetCoreOData.Controllers\r\n{\r\n   &#x5B;ODataRoutePrefix(&quot;Person&quot;)]\r\n   public class PersonController : ODataController\r\n   {\r\n      private AdventureWorks2016Context db;\r\n\r\n      public PersonController(AdventureWorks2016Context adventureWorks2016Context)\r\n      {\r\n         db = adventureWorks2016Context;\r\n      }\r\n\r\n      &#x5B;ODataRoute]\r\n      &#x5B;EnableQuery(PageSize = 20, AllowedQueryOptions = AllowedQueryOptions.All)]\r\n      &#x5B;HttpGet]\r\n      public IActionResult Get()\r\n      {\r\n         return Ok(db.Person.AsQueryable());\r\n      }\r\n\r\n      &#x5B;ODataRoute(&quot;({key})&quot;)]\r\n      &#x5B;EnableQuery(PageSize = 20, AllowedQueryOptions = AllowedQueryOptions.All)]\r\n      &#x5B;HttpGet]\r\n      public IActionResult Get(&#x5B;FromODataUri] int key)\r\n      {\r\n         return Ok(db.Person.Find(key));\r\n      }\r\n   }\r\n}\r\n\r\n<\/pre>\n<p>Lo primero que debemos tener en cuenta es que el controlador heredar\u00e1 la clase <strong>ODataController<\/strong>. Despu\u00e9s, al tener habilitado el <strong>routing<\/strong> de <strong>OData<\/strong>, estableceremos a nivel de controlador el atributo <strong>ODataRoutePrefix<\/strong>, indicando el prefijo (como ya hab\u00edamos avanzado).<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\r\n&#x5B;ODataRoutePrefix(&quot;Person&quot;)]\r\n\r\n<\/pre>\n<p>Decoraremos con el atributo <strong>ODataRoute <\/strong>y habilitaremos las consultas<strong> OData <\/strong>con<strong> EnableQuery<\/strong> nuestras acciones del controlador.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\r\n&#x5B;ODataRoute(&quot;({key})&quot;)]\r\n&#x5B;EnableQuery(PageSize = 20, AllowedQueryOptions = AllowedQueryOptions.All)]\r\n\r\n<\/pre>\n<h1><strong>Preparados, listos\u2026 \u00a1YA!<\/strong><\/h1>\n<p><strong>\u00a0<\/strong>Ejecutamos nuestra API y vemos algunos tipos de consultas que podemos hacer (para m\u00e1s informaci\u00f3n de la sintaxis OData Query, puedes visitar: <a href=\"https:\/\/www.odata.org\/documentation\/odata-version-2-0\/uri-conventions\/\">https:\/\/www.odata.org\/documentation\/odata-version-2-0\/uri-conventions\/<\/a>).<\/p>\n<p>En el c\u00f3digo se adjuntar\u00e1 una colecci\u00f3n <strong>Postman<\/strong> para que pod\u00e1is trastear. Algunas consultas que podemos hacer son las siguientes:<\/p>\n<ul>\n<li>Seleccionar todas las personas:<\/li>\n<\/ul>\n<p><strong>https:\/\/localhost:5001\/api\/Person<\/strong><\/p>\n<ul>\n<li>Seleccionar todas las personas que se llaman Helen:<\/li>\n<\/ul>\n<p><strong>\u00a0https:\/\/localhost:5001\/api\/Person?$filter=FirstName eq &#8216;Helen&#8217;<\/strong><\/p>\n<ul>\n<li>Seleccionar la persona con identificador igual a 3:<\/li>\n<\/ul>\n<p><strong>https:\/\/localhost:5001\/api\/Person(3)<\/strong><\/p>\n<ul>\n<li>Seleccionar todas las personas que se llaman Helen pero mostrar s\u00f3lo nombres y apellidos:<\/li>\n<\/ul>\n<p><strong>https:\/\/localhost:5001\/api\/Person?$filter=FirstName eq &#8216;Helen&#8217; &amp;$select=FirstName,LastName<\/strong><\/p>\n<ul>\n<li>Seleccionar todas las personas que se llaman Helen ordenadas por apellidos de forma descendente:<\/li>\n<\/ul>\n<p><strong>https:\/\/localhost:5001\/api\/Person?$filter=FirstName eq &#8216;Helen&#8217;&amp;$orderby=LastName desc<\/strong><\/p>\n<h1><strong>Conclusiones<\/strong><\/h1>\n<p>La conclusi\u00f3n que sacamos de OData es que mola y mucho \ud83d\ude42 Nos da potencia para realizar consultas bestial y encima la configuraci\u00f3n en nuestra API en .NET Core es muy sencilla.<\/p>\n<p>El c\u00f3digo de ejemplo junto con una colecci\u00f3n de Postman y una base de datos de prueba lo pod\u00e9is descargar desde <a href=\"https:\/\/github.com\/Encamina\/Blogs\/tree\/master\/Desarrolla%20en%20colores\/AspNetCoreOData\">GitHub<\/a><\/p>\n<p>Happy coding!!<\/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>Siempre has querido definir tu API para que realice consultas de una forma poderosa (como las disponibles en Azure Search)\u00a0 y lo sabes. En este post veremos qu\u00e9 es OData y c\u00f3mo integrarlo en nuestra API realizada en .NET Core &hellip; <a href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/\">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":185,"featured_media":1181,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70],"tags":[],"class_list":["post-1168","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net"],"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>Vitamina tu API en .Net Core con OData - Piensa en software, desarrolla en colores<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vitamina tu API en .Net Core con OData\" \/>\n<meta property=\"og:description\" content=\"Siempre has querido definir tu API para que realice consultas de una forma poderosa (como las disponibles en Azure Search)\u00a0 y lo sabes. En este post veremos qu\u00e9 es OData y c\u00f3mo integrarlo en nuestra API realizada en .NET Core &hellip; Continue reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/\" \/>\n<meta property=\"og:site_name\" content=\"Piensa en software, desarrolla en colores\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-14T09:26:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-11-14T12:32:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1161\" \/>\n\t<meta property=\"og:image:height\" content=\"863\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sergio Parra Guerra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sergio Parra Guerra\" \/>\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\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/vitamina-tu-api-en-net-core-con-odata\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/vitamina-tu-api-en-net-core-con-odata\\\/\"},\"author\":{\"name\":\"Sergio Parra Guerra\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/bc314219999e4f7ed909d299efa70f4b\"},\"headline\":\"Vitamina tu API en .Net Core con OData\",\"datePublished\":\"2019-11-14T09:26:15+00:00\",\"dateModified\":\"2019-11-14T12:32:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/vitamina-tu-api-en-net-core-con-odata\\\/\"},\"wordCount\":1016,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/vitamina-tu-api-en-net-core-con-odata\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2019\\\/11\\\/Vitamina-tu-API-.Net-Core-con-Odata.jpg\",\"articleSection\":[\".NET\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/vitamina-tu-api-en-net-core-con-odata\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/vitamina-tu-api-en-net-core-con-odata\\\/\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/vitamina-tu-api-en-net-core-con-odata\\\/\",\"name\":\"Vitamina tu API en .Net Core con OData - Piensa en software, desarrolla en colores\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/vitamina-tu-api-en-net-core-con-odata\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/vitamina-tu-api-en-net-core-con-odata\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2019\\\/11\\\/Vitamina-tu-API-.Net-Core-con-Odata.jpg\",\"datePublished\":\"2019-11-14T09:26:15+00:00\",\"dateModified\":\"2019-11-14T12:32:33+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/bc314219999e4f7ed909d299efa70f4b\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/vitamina-tu-api-en-net-core-con-odata\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/vitamina-tu-api-en-net-core-con-odata\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2019\\\/11\\\/Vitamina-tu-API-.Net-Core-con-Odata.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2019\\\/11\\\/Vitamina-tu-API-.Net-Core-con-Odata.jpg\",\"width\":1161,\"height\":863,\"caption\":\"Vitamina tu API .Net Core con Odata\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/\",\"name\":\"Piensa en software, desarrolla en colores\",\"description\":\"Las ventajas que te ofrece Microsoft Azure y el mundo.NET\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/bc314219999e4f7ed909d299efa70f4b\",\"name\":\"Sergio Parra Guerra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g\",\"caption\":\"Sergio Parra Guerra\"},\"description\":\"Sergio Parra es Ingeniero T\u00e9cnico en Inform\u00e1tica de Sistemas por la UPSAM. Tiene a sus espaldas much\u00edsimas certificaciones entre las cuales Microsoft Certified Professional y ex Microsoft MVP Visual Studio and Development Technologies. Actualmente es un magn\u00edfico Software &amp; Cloud Architect en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/author\\\/sparra\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Vitamina tu API en .Net Core con OData - Piensa en software, desarrolla en colores","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":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/","og_locale":"es_ES","og_type":"article","og_title":"Vitamina tu API en .Net Core con OData","og_description":"Siempre has querido definir tu API para que realice consultas de una forma poderosa (como las disponibles en Azure Search)\u00a0 y lo sabes. En este post veremos qu\u00e9 es OData y c\u00f3mo integrarlo en nuestra API realizada en .NET Core &hellip; Continue reading &rarr;","og_url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/","og_site_name":"Piensa en software, desarrolla en colores","article_published_time":"2019-11-14T09:26:15+00:00","article_modified_time":"2019-11-14T12:32:33+00:00","og_image":[{"width":1161,"height":863,"url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata.jpg","type":"image\/jpeg"}],"author":"Sergio Parra Guerra","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Sergio Parra Guerra","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/"},"author":{"name":"Sergio Parra Guerra","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/bc314219999e4f7ed909d299efa70f4b"},"headline":"Vitamina tu API en .Net Core con OData","datePublished":"2019-11-14T09:26:15+00:00","dateModified":"2019-11-14T12:32:33+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/"},"wordCount":1016,"commentCount":1,"image":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata.jpg","articleSection":[".NET"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/","name":"Vitamina tu API en .Net Core con OData - Piensa en software, desarrolla en colores","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/#primaryimage"},"image":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata.jpg","datePublished":"2019-11-14T09:26:15+00:00","dateModified":"2019-11-14T12:32:33+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/bc314219999e4f7ed909d299efa70f4b"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/vitamina-tu-api-en-net-core-con-odata\/#primaryimage","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata.jpg","contentUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/11\/Vitamina-tu-API-.Net-Core-con-Odata.jpg","width":1161,"height":863,"caption":"Vitamina tu API .Net Core con Odata"},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/","name":"Piensa en software, desarrolla en colores","description":"Las ventajas que te ofrece Microsoft Azure y el mundo.NET","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/bc314219999e4f7ed909d299efa70f4b","name":"Sergio Parra Guerra","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g","caption":"Sergio Parra Guerra"},"description":"Sergio Parra es Ingeniero T\u00e9cnico en Inform\u00e1tica de Sistemas por la UPSAM. Tiene a sus espaldas much\u00edsimas certificaciones entre las cuales Microsoft Certified Professional y ex Microsoft MVP Visual Studio and Development Technologies. Actualmente es un magn\u00edfico Software &amp; Cloud Architect en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/author\/sparra\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/1168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/users\/185"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/comments?post=1168"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/1168\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media\/1181"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media?parent=1168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/categories?post=1168"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/tags?post=1168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}