<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Burdier</title>
    <description>The latest articles on DEV Community by Burdier (@burdier).</description>
    <link>https://dev.to/burdier</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F115247%2Fa80f53ec-54a4-47a5-b5d2-5c1611c2b6c8.png</url>
      <title>DEV Community: Burdier</title>
      <link>https://dev.to/burdier</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/burdier"/>
    <language>en</language>
    <item>
      <title>Guía Swagger en ASP.NET Core, Para un Amigo</title>
      <dc:creator>Burdier</dc:creator>
      <pubDate>Sat, 12 Oct 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/burdier/guia-swagger-en-asp-net-core-para-un-amigo-o4i</link>
      <guid>https://dev.to/burdier/guia-swagger-en-asp-net-core-para-un-amigo-o4i</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fskBZqkN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.pinimg.com/originals/fa/60/d5/fa60d598bd43d8de29a5092c5d57a544.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fskBZqkN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.pinimg.com/originals/fa/60/d5/fa60d598bd43d8de29a5092c5d57a544.jpg" alt="Image result for space man ¿draw"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;¿Qué es swagger?  En palabras simple y no abundar en tecnicismos es un Postman, un Curl o un Insonmnia, los cuatro te permiten probar tu REST API  , la diferencia entre &lt;strong&gt;Swagger&lt;/strong&gt;  y los demas, es que Swagger tambien es una excelente manera de documentar tu API y no necesitas instalar ninguna herramienta para hacer test a tus endpoint.&lt;/p&gt;

&lt;h4&gt;
  
  
  Swagger Vs  Insomnia:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zVaz2vJ2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://swagger.io/swagger/media/Images/Tools/Opensource/Swagger_UI.png%3Fext%3D.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zVaz2vJ2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://swagger.io/swagger/media/Images/Tools/Opensource/Swagger_UI.png%3Fext%3D.png" alt="Swagger UI"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;A simple vista puedes saber todos las acciones que puedes ejecutar  en el REST API de &lt;strong&gt;Pet&lt;/strong&gt;, nos dice que permite mediante el método &lt;strong&gt;POST&lt;/strong&gt; agregar una nueva mascota, con el método &lt;strong&gt;GET&lt;/strong&gt; nos permite buscar una mascota por su ID. Es simplemente poderoso. &lt;/p&gt;

&lt;h4&gt;
  
  
  Caso Insomnia:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BQ2WZ4N0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://insomnia.rest/static/main-ac0a1732afac19acce5ad6825595c3bb-9a259.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BQ2WZ4N0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://insomnia.rest/static/main-ac0a1732afac19acce5ad6825595c3bb-9a259.webp" alt="Insomnia REST Client"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;No hay mucho que buscar, tienes un panel en la izquierda que te permite guardar los requests  que hiciste y también te permite organizarlo por directorios,  tienes una barra superior donde  colocas la URI del recurso REST, en el centro  te permite escribir el cuerpo de la petición, aquí tienes que haber leído el REST API antes de comenzar  a escribir la petición. Justo esa carencia de estas aplicaciones es lo que le da el poder a  &lt;strong&gt;Swagger&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué necesito para iniciar?
&lt;/h2&gt;

&lt;p&gt;Para implementarlo en ASP.NET Core vamos necesitar un NuGet Package llamado  *&lt;em&gt;Swashbuckle *&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Hay tres  componentes principales para *&lt;em&gt;Swashbuckle *&lt;/em&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.nuget.org/packages/Swashbuckle.AspNetCore.SwaggerGen/"&gt;Swashbuckle.AspNetCore.SwaggerGen&lt;/a&gt; : Esto mira tus controller, Rutas  y Modelos  y genera los objetos     &lt;code&gt;SwaggerDocument&lt;/code&gt;   que no es más que lo que recibe  y retorna tu método, y si tienes una documentación adicional como esta también se agrega al &lt;code&gt;SwaggerDocument&lt;/code&gt; :&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u6YtZVDr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://docs.microsoft.com/en-us/visualstudio/ide/reference/media/doc-result-cs.png%3Fview%3Dvs-2019" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u6YtZVDr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://docs.microsoft.com/en-us/visualstudio/ide/reference/media/doc-result-cs.png%3Fview%3Dvs-2019" alt="Completed comment"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si te fijas en la comparación &lt;em&gt;Swagger vs Insomnia&lt;/em&gt; el método POST  tiene una breve descripción que dice: &lt;em&gt;Add a new pet to the store&lt;/em&gt; en la documentación de tu método esto  es el &lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.nuget.org/packages/Swashbuckle.AspNetCore.Swagger/"&gt;Swashbuckle.AspNetCore.Swagger&lt;/a&gt; :  Esto crea un &lt;a href="https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.0"&gt;middleware&lt;/a&gt; expone como un JSON la documentación que genera &lt;strong&gt;Swashbuckle.AspNetCore.SwaggerGen&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.nuget.org/packages/Swashbuckle.AspNetCore.SwaggerUI/"&gt;Swashbuckle.AspNetCore.SwaggerUI&lt;/a&gt;: No es más que  el &lt;strong&gt;Swagger UI tool&lt;/strong&gt;, que genera una interfaz  en base al JSON que se genera directamente desde tu código y expuesto con  el componente numero 2.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Al instalar *&lt;em&gt;Swashbuckle *&lt;/em&gt; todo esos componentes quedan instalados como dependencia, también necesitarás el  namespace &lt;code&gt;using Microsoft.OpenApi.Models;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Instalación:
&lt;/h3&gt;

&lt;p&gt;Con el Package Manager Console:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nf"&gt;Install-Package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Swashbuckle.AspNetCore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;5.0.0-rc4&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Usando Manage NutGet Packages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click-Rerecho en el proyecto en el &lt;strong&gt;Solution Explorer&lt;/strong&gt; &amp;gt;  &lt;strong&gt;Manage NuGet Packages&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;En el Package Source  selecciona "nuget.org"&lt;/li&gt;
&lt;li&gt;Asegurate de  tener activada la opción "Include prerelease"&lt;/li&gt;
&lt;li&gt;En la caja de busqueda  escribe   "Swashbuckle.AspNetCore" &lt;/li&gt;
&lt;li&gt;Selecciona la  ultima version de  "Swashbuckle.AspNetCore"   y presiona instalar. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Con .NET Core CLI y Visual Studio Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet add TodoApi.csproj package Swashbuckle.AspNetCore &lt;span class="nt"&gt;-v&lt;/span&gt; 5.0.0-rc4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuración:
&lt;/h3&gt;

&lt;p&gt;Para esta guía he creado un código simple para dar un mejor contexto, este es el &lt;a href="https://github.com/burdier/SwaggerSimpleNetCore"&gt;link&lt;/a&gt; del proyecto en github.&lt;/p&gt;

&lt;h6&gt;
  
  
  Requerimiento:
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agendar cita&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Actualizar Cita &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ver Cita&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cancelar cita&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modelo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MedicalAppointment&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt; &lt;span class="n"&gt;Appointment&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;IsActive&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Lo primero que haremos configurar la generación de la documentación.&lt;/p&gt;

&lt;p&gt;En el &lt;code&gt;Startup.cs&lt;/code&gt; de tu proyecto REST API  en el método &lt;code&gt;ConfigureService&lt;/code&gt;   luego de añadir la configuración quedaría algo como esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddSwaggerGen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SwaggerDoc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;OpenApiInfo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Citas Medicas Documentación"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"REST API  para la  Aplicacion Citas Medicas by: bursoft"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Contact&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;OpenApiContact&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Paula Example"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"PaulaExample@burdier.com.do"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Con &lt;code&gt;services.AddSwaggerGen&lt;/code&gt; estamos registrando el servicio en nuestro proyecto, el primer parámetro del método por extensión  &lt;code&gt;c.SwaggerDoc()&lt;/code&gt; es la versión de la api a la que se le va a generar la documentación,  puedes usar múltiples versiones de tu REST API, el objetivo de esta  guía no es enseñar a versionar tu software, será en otra edición de este post.&lt;/p&gt;

&lt;p&gt;Seguimos,  el segundo parámetro es  un modelo  que proviene de  &lt;code&gt;Microsoft.OpenApi.Models&lt;/code&gt;, míralo como un objeto con información adicionales  para la documentación que ayuda con la especificación de Open Api, en el &lt;strong&gt;&lt;em&gt;Swagger UI&lt;/em&gt;&lt;/strong&gt; esa información se presenta de esta manera: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ct1Uc5iC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/GpsXXkH/Capture.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ct1Uc5iC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/GpsXXkH/Capture.png" alt="Capture"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Fíjate que la información  hace match con la que pasamos en el &lt;code&gt;Startup.cs&lt;/code&gt;, pero no tan rápido, tú necesitas otro paso para poder verlo,  ya tienes la documentación básica  ahora necesitas crear el &lt;a href="https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.0"&gt;middleware&lt;/a&gt;   que nos generara un lindo UI para interactuar con nuestra REST API, en base a la documentación. &lt;/p&gt;

&lt;p&gt;Código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Crea un middleware para exponer la documentación en el JSON.&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseSwagger&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// Crea  un middleware para exponer el UI (HTML, JS, CSS, etc.),&lt;/span&gt;
&lt;span class="c1"&gt;// Especificamos en que endpoint buscara el json.&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseSwaggerUI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SwaggerEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/swagger/v1/swagger.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Citas Medicas Api V1"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;¿Recuerda que hablamos sobre una vaina que genera un JSON? pues ahí le estamos diciendo al &lt;strong&gt;Swagger UI&lt;/strong&gt; hey, consume la documentación en  el endpoint  &lt;code&gt;"/swagger/v1/swagger.json"&lt;/code&gt; , el segundo parámetro &lt;code&gt;"Citas Medicas Api V1"&lt;/code&gt; es un discriminador con el cual en el UI puedes  decirle  a &lt;strong&gt;Swagger&lt;/strong&gt;  mira, yo necesito ejecutar esta acción   en x versión de mi REST API.&lt;/p&gt;

&lt;p&gt;Espera un segundo, ten pendiente que debes de decirle a Visual Studio que genere la documentación XML, ¿Como así y  &lt;strong&gt;Swagger&lt;/strong&gt; no la genera sola? parte si y parte no, si quieres que swagger  se complemente  con la documentación XML que pones en los comentarios del  los métodos en el &lt;code&gt;Controller&lt;/code&gt;, tiene que configurar el proyecto para que genere el XML.&lt;/p&gt;

&lt;p&gt;Hay dos maneras de hacerlo usando Visual Studio o manual, si estas en linux o usas visual studio code tendrás que hacerlo manual.&lt;/p&gt;

&lt;p&gt;Con Visual Studio:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ve al Solution Explorer&lt;/li&gt;
&lt;li&gt;Click Derecho sobre el nombre de tu proyecto&lt;/li&gt;
&lt;li&gt;Luego haga click en Properties&lt;/li&gt;
&lt;li&gt;En el menú izquierdo seleccione Build&lt;/li&gt;
&lt;li&gt;En la ultima sección  se encuentra el apartado &lt;code&gt;Output Path&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;marque la opción &lt;code&gt;XML documentation file&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recuerda que para cada entorno debes hacer lo mismo, tanto como para Release como para Debug.&lt;/p&gt;

&lt;p&gt;Con VS Code /linux:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Busque el archivo del proyecto normalmente termina con &lt;code&gt;.csproj&lt;/code&gt; en mi caso &lt;code&gt;CitaMedica.csproj&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Con VS Code u otro editor de su preferencia edite el archivo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una vez con el proyecto abierto en su editor de texto, agregar la siguiente configuración:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Project&lt;/span&gt; &lt;span class="na"&gt;Sdk=&lt;/span&gt;&lt;span class="s"&gt;"Microsoft.NET.Sdk.Web"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;PropertyGroup&lt;/span&gt; &lt;span class="na"&gt;Condition=&lt;/span&gt;&lt;span class="s"&gt;"'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;DocumentationFile&amp;gt;&lt;/span&gt;C:\Users\BURSOFT\source\repos\CitaMedica\CitaMedica\CitaMedica.xml&lt;span class="nt"&gt;&amp;lt;/DocumentationFile&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;PropertyGroup&lt;/span&gt; &lt;span class="na"&gt;Condition=&lt;/span&gt;&lt;span class="s"&gt;"'$(Configuration)|$(Platform)'=='Release|AnyCPU'"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;DocumentationFile&amp;gt;&lt;/span&gt;C:\Users\BURSOFT\source\repos\CitaMedica\CitaMedica\CitaMedica.xml&lt;span class="nt"&gt;&amp;lt;/DocumentationFile&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/Project&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Note también que deberá remplazar la ruta del proyecto por la suya.&lt;/p&gt;

&lt;p&gt;Tenga cuidado con este documento, puede romper su proyecto. &lt;/p&gt;

&lt;p&gt;Ya casi terminamos, ahora nos falta agregar el comentario a un método cualquiera en el &lt;code&gt;Controller&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;En mi caso lo agregaré al método POST  :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;/// Agrega una cita medica &lt;/span&gt;
&lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;/// &amp;lt;param name="medicalAppointment"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;/// &amp;lt;returns&amp;gt;Retorna los datos de la cita&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HttpPost&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ActionResult&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;MedicalAppointment&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MedicalAppointment&lt;/span&gt; &lt;span class="n"&gt;medicalAppointment&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;_medicalAppointmentService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;medicalAppointment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;BadRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Ahora solo nos falta decirle a &lt;strong&gt;Swagger&lt;/strong&gt; donde se esta guardando esa documentación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;xmlFile&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$ "&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Assembly&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetExecutingAssembly&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;GetName&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.XML"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;xmlPath&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xmlFile&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IncludeXmlComments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xmlPath&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Quedando la configuración final de la documentación así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddSwaggerGen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SwaggerDoc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"v2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;OpenApiInfo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Citas medicas  Documentación esta es la version dos "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"v2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"REST API  para la  Aplicacion Citas  Medica by: Burdier"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Contact&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;OpenApiContact&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Jose Australiano"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"joseAustraliano@outlook.com"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;xmlFile&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$ "&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Assembly&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetExecutingAssembly&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;GetName&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.xml"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;xmlPath&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xmlFile&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IncludeXmlComments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xmlPath&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusión:
&lt;/h3&gt;

&lt;p&gt;Como resultado de esta sencilla guía nos queda esto: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UJG6Zytm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/HLSjJQ1/Capture.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UJG6Zytm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/HLSjJQ1/Capture.png" alt="Capture"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;No soy experto en la especificaciones de Open Api,  tampoco en &lt;strong&gt;swagger&lt;/strong&gt;, solo soy alguien que necesitaba integrar &lt;strong&gt;swagger&lt;/strong&gt; a su proyecto tal como tú, así que cualquier  aclaración puedes notificarme vía &lt;a href="https://twitter.com/BurdierLuis"&gt;twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Este post ha sido escrito tambíen para &lt;a href="https://burdierblog.netlify.com/blog/Gu%C3%ADa-Swagger-en-ASP.NET-Core-para-un-amigo"&gt;BlogBurdier&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>swagger</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Qué Lenguaje de Programación Debería Aprender ?</title>
      <dc:creator>Burdier</dc:creator>
      <pubDate>Fri, 28 Jun 2019 05:19:48 +0000</pubDate>
      <link>https://dev.to/burdier/que-lenguaje-de-programacion-deberia-aprender-2m3a</link>
      <guid>https://dev.to/burdier/que-lenguaje-de-programacion-deberia-aprender-2m3a</guid>
      <description>&lt;p&gt;Cuando iniciamos en el mundo de la programación, de una manera autodidacta, se nos genera una laguna de dudas  que nos induce a navegar en miles de blogs, podcast,  y demás medios.&lt;/p&gt;

&lt;p&gt;Pero no solo pasa  cuando iniciamos por nuestra cuenta, sin ningún tutor o instituto sino que tarde o temprano llegamos a esa pregunta.&lt;/p&gt;

&lt;p&gt;Qué lenguaje debo aprender? &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F7zm49zsacnbuxlomw21y.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F7zm49zsacnbuxlomw21y.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;esta pregunta no tiene una respuesta en concreto, pero si varias sugerencias.&lt;/p&gt;

&lt;p&gt;En el mundo de la programación tienes varias etapas, no las citaré todas, solo la primera: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fij32hdqw0xcddewz1e9f.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fij32hdqw0xcddewz1e9f.PNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.- Cuando estas   aprendiendo lo esencial de la  lógica computacional, la cual es independiente de todo lenguaje. &lt;/p&gt;

&lt;p&gt;En esa etapa el lenguaje que uses no debería importar, lo que tienes que tener en cuenta es que no agregue una capa de complejidad a lo esencial.&lt;/p&gt;

&lt;p&gt;Ok, ya sé lo esencial, quiero formarme para el mundo laboral o superar un reto personal, que hago?&lt;/p&gt;

&lt;p&gt;Bien, entonces lo que necesitas ahora es análisis, necesitas saber donde estas parado, necesitas saber que tecnología domina tu territorio. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fy87y6ittbcj0wzmmtp82.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fy87y6ittbcj0wzmmtp82.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Algo que no se menciona en algunos artículos de esta naturaleza,  es que necesitas saber que tecnologías usan más las instituciones publicas y privadas  de tu país, con el fin de que puedas encontrar trabajo con facilidad, ya que si aprendes a programar en C#(lenguaje de programación) pero la mayoría de trabajo que ofrecen en tu país es de Java(lenguaje de programación), realmente si quieres cobrar y vivir de lo que haces, no veo como C# puede apoyarte. &lt;/p&gt;

&lt;p&gt;No digo con esto que no puedas aprender más de un lenguaje, solo que necesitas saber tu contexto y adaptarte a él para que puedas desempeñar lo aprendido de una manera mas rápida.&lt;/p&gt;

&lt;p&gt;En mi caso, en mi país C# es utilizado por el estado y por el sector privado, pero a mi me encanta Python(lenguaje de programación)... Aprendí C# y tecnologías de Microsoft  para poder subsistir, al final de eso se trata, ojo que no olvidé Python, mis proyectos personales y para clientes cercanos lo hago en él. &lt;/p&gt;

&lt;p&gt;Python es atractivo para lo laboral en otros países a los cuales quiero migrar más adelante, actualmente trabajo con C# e intento mejorar  cada día y hasta comenzó a gustarme. &lt;/p&gt;

&lt;p&gt;La conclusión es que investigues primero y tomes decisiones en base a la misma, puedes entrar a paginas de buscar trabajos y filtrarlo por desarrollo de software, desarrollo web, preguntarle a una persona cercana o que tengas contacto   que te diga que tecnologías de desarrollo se usan más pero siempre orientado a tu país.&lt;/p&gt;

&lt;p&gt;Ahora sí te daré una lista lista de lenguajes para aprender  la lógica programación:&lt;/p&gt;

&lt;p&gt;1.- Python&lt;br&gt;
2.- JavaScript&lt;br&gt;
3.- Php&lt;br&gt;
5.- C#&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fixisow64qt0jcl3mmlxf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fixisow64qt0jcl3mmlxf.gif"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>csharp</category>
      <category>php</category>
      <category>java</category>
    </item>
    <item>
      <title>Default Value of a Dictionary, Python Trick </title>
      <dc:creator>Burdier</dc:creator>
      <pubDate>Fri, 17 May 2019 13:17:10 +0000</pubDate>
      <link>https://dev.to/burdier/default-value-of-a-dictionary-python-trick-4dmf</link>
      <guid>https://dev.to/burdier/default-value-of-a-dictionary-python-trick-4dmf</guid>
      <description>&lt;p&gt;When you need get a value from dicctionary is very easy, anybody know how do it, but i believe this solution is unknow from a  new programer of python.&lt;/p&gt;

&lt;p&gt;the most common way to get a value from dictionary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;computer_component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"output"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"monitor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"teclado"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"storage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"SSD"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;get_component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;computer_component&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'output'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;get_component&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;the problem with that is when  value not exists in dictionary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;computer_component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"output"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"monitor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"teclado"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"storage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"SSD"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;get_component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;computer_component&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'internet'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;get_component&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#output:
#Traceback (most recent call last):
#  File "main.py", line 2, in &amp;lt;module&amp;gt;
#    get_component = computer_component['internet']
#KeyError: 'internet'
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Ok, you can  validate if value exists:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;computer_component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"output"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"monitor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"teclado"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"storage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"SSD"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s"&gt;"internet"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;computer_component&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
  &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;computer_component&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"internet"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"internet 404"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#output:
#internet 404
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;but the best way to get value from  a dictionary is this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;computer_component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"output"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"monitor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"teclado"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"storage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"SSD"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;computer_component&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"output"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"404"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;#output
#monitor
&lt;/span&gt;
&lt;span class="c1"&gt;#--in case when value not exists:
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;computer_component&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"internet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"404"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="c1"&gt;#output
#404
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;where the  firt param is the value and the second is the value by default.&lt;/p&gt;

&lt;p&gt;Forgive me, but my English is a little bad, I want to improve it.&lt;/p&gt;

</description>
      <category>python</category>
    </item>
  </channel>
</rss>
