{
    "componentChunkName": "component---packages-blog-gatsby-blog-core-src-templates-post-js",
    "path": "/graphql-query-parsing-and-validation/",
    "result": {"data":{"post":{"id":"9fe0732b-2cb8-5db5-9f24-c74d3b8c833b","title":"GraphQL query parsing and validation?","slug":"/graphql-query-parsing-and-validation/","link":null,"excerpt":"Abstract Keywords: Software service architecture, RESTful, GraphQL, GraphQL architecture, Query…","tableOfContents":{"items":[{"url":"#abstract","title":"Abstract"},{"url":"#1-introduction","title":"1. Introduction"},{"url":"#2-lexing","title":"2. Lexing"},{"url":"#3-parsing","title":"3. Parsing"},{"url":"#4-validation","title":"4. Validation"},{"url":"#5-execution","title":"5. Execution"},{"url":"#6-conclusion","title":"6. Conclusion"},{"url":"#references","title":"References"}]},"timeToRead":5,"featured":null,"protected":null,"thumbnailText":null,"date":"October 27, 2019","category":{"id":"586422b6-b6df-56a6-b4f7-5071c49da347","name":"Software Architecture","slug":"/category/software-architecture/","color":null,"icon":"/static/171c4f2a122d83963638a8e07c0520ed/software.svg"},"author":{"id":"947e8b57-e3c9-5b4b-9872-fc27eb54f257","name":"Suresh Kumar Mukhiya","slug":"/author/suresh-kumar-mukhiya/","title":"Software Engineer","description":"Researcher by chance. I prefer green food and nice code. Artificial Intelligence, Big data and Frontend Technologies fascinates me. I like taking pictures.","skills":["Software Architecture","Frontend Development","Natural Language Processing"],"social":[{"name":"Github","url":"http://github.com/sureshHARDIYA/"},{"name":"Twitter","url":"https://twitter.com/dr_code_skm"},{"name":"Website","url":"https://www.skmukhiya.com.np/"}],"thumbnail":{"__typename":"ImageSharp","ImageSharp_small":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/416a0/suresh.png 96w","sizes":"48px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a3542/suresh.webp 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/0f66d/suresh.webp 96w","type":"image/webp","sizes":"48px"}]},"width":48,"height":48},"ImageSharp_regular":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/d612b/suresh.png 300w","sizes":"150px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/ae23d/suresh.webp 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/bd37b/suresh.webp 300w","type":"image/webp","sizes":"150px"}]},"width":150,"height":150}}},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"GraphQL query parsing and validation?\",\n  \"date\": \"2019-10-27T00:00:00.000Z\",\n  \"category\": \"Software Architecture\",\n  \"tags\": [\"GraphQL\", \"GraphQL Query parsing\", \"GraphQL Query validation\"],\n  \"thumbnail\": \"ast.png\",\n  \"author\": \"Suresh Kumar Mukhiya\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", {\n    \"id\": \"abstract\"\n  }, \"Abstract\"), mdx(\"div\", {\n    style: {\n      \"backgroundColor\": \"#f1f0f0\",\n      \"color\": \"rgba(0, 0, 0, 1)\",\n      \"padding\": \"1rem\",\n      \"fontStyle\": \"italic\",\n      \"textAlign\": \"justify\"\n    }\n  }, \"The main aim of this article is to show how a GraphQL query is parsed and validated before execution. Here, I assume the reader knows about what is GraphQL?; how to compose GraphQL  schema?; what is GraphQL query? and what are resolvers,  mutations and subscriptions? If you are not familiar with these concepts, I suggest you read my previous article first.\"), mdx(\"h3\", {\n    \"id\": \"keywords\"\n  }, \"Keywords:\"), mdx(\"p\", null, \"Software service architecture, RESTful, GraphQL, GraphQL architecture, Query, mutations, resolvers.\"), mdx(\"h2\", {\n    \"id\": \"1-introduction\"\n  }, \"1. Introduction\"), mdx(\"p\", null, \"A few weeks ago, I wrote an article about how to get started with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL\"), \" \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"#2\"\n  }, \"[2]\"), \" and its main working paradigm. Here is the link to Part 1 of article: \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/how-does-graphql-work/\"\n  }, \"How to get started with GraphQL?\"), \". This article uses images extracted from medium post by Christian Joudrey \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"#5\"\n  }, \"[5]\"), \".\"), mdx(\"p\", null, \"As mentioned \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/how-does-graphql-work/\"\n  }, \"in the previous post\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL\"), \" query systems provides flexibility to the clients to formulate and query backend. Having said that, let us look at GraphQL Query given below:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"query getPatient {\\n  Patient(_id: \\\"5cdbe44c25c6150ac290fe87\\\") {\\n    id\\n    resourceType\\n    name {\\n      use\\n      family\\n      given\\n    }\\n    gender\\n\\n  }\\n}\\n\")), mdx(\"p\", null, \"In order to get results from above query, it undergoes several steps including query parsing, query lexing, query validation and then query execution as shown in figure 1. Let us examine each steps closely.\"), mdx(\"figure\", null, \"\\n  \", mdx(\"figure\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1140px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"37.54385964912281%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB2UlEQVQoz0WSzWsTYRCHZzeJaxKTWkqL4kE8evJvEBWsaHbfTXbTFhMaUYSeBGO+Nm1MjPEDotG29OpHjl60By/erVj0EgTPHop4UPEPeHR3E3sYXub3zjwz77wjojzEahKcykPLtMf+KmLVENVBUz3EaiCqGWia/RBRt8d+HVEt9Gw/jAmSA0CD6PyAxLln6JYPraKpOyTzuxjOm8AXq0LUeU6q8I1Idh2xbgXQxPIXkqWvITyoYoew5NkhSfUIw/XQVJdk/iOJ/A663UPMm0SdF6SLexj57bB7y4eNSF/7TcTZCDWfqp9/TOLMkLjVR89VieV6ASzu7qCpDpK5wQH3JVPFPWLu6wAupkf6yohDV3+h554gZjkcU8pa53j2FTPuU4y8RyR7nxPXP3O0tItud4PA+MKQU+UfzJXeottVxGxxbGXEycofjIVNxPSfvoZYHlLbeM+0M2C62EEuNljZ/MDpxidiuXuIqjBT6NMcfmd2eZvUYguZL3Oh+47S1k+i7haGU0es1fCDfJtduotme8Rya4jZYO5yn4NOGzHrQcVots2RwiAcuN+B2eDwUp+pxQeIWd3fEP/OB0qmHooTIVMLkv5X9FfhUnXfn8T4eWrc2ST3n/0FMRg0lkxdHwAAAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"GraphQL Query Parsing, Execution\",\n    \"title\": \"GraphQL Query Parsing, Execution\",\n    \"src\": \"/static/4dc2a81f6d1a8f3239eda5b503633ca4/b5cea/query.png\",\n    \"srcSet\": [\"/static/4dc2a81f6d1a8f3239eda5b503633ca4/0e2fe/query.png 285w\", \"/static/4dc2a81f6d1a8f3239eda5b503633ca4/432e7/query.png 570w\", \"/static/4dc2a81f6d1a8f3239eda5b503633ca4/b5cea/query.png 1140w\", \"/static/4dc2a81f6d1a8f3239eda5b503633ca4/b59fb/query.png 1285w\"],\n    \"sizes\": \"(max-width: 1140px) 100vw, 1140px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"GraphQL Query Parsing, Execution\"), \"\\n  \"), \"\\n  \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"style\": {\n      \"textAlign\": \"center\"\n    }\n  }, \"Fig.1 - GraphQL Query Parsing, Lexing, Validation and Execution\")), mdx(\"h2\", {\n    \"id\": \"2-lexing\"\n  }, \"2. Lexing\"), mdx(\"p\", null, \"When a client execute a GraphQL query (via an \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"HTTP\"), \" Request), the first thing the server needs to do is transform the query into comprehensible format. This process is known as lexing and parsing. Lexing or lexical analysis is the process of breaking up a stream of character into tokens.\"), mdx(\"figure\", null, \"\\n  \", mdx(\"figure\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1140px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"42.45614035087719%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAz0lEQVQY04WQUWuEMBCE8/9/WkAfJOiLUhKIgYSIqGTNJmaP1kOu9trO2+58w7DLtm1TSmmtjTHjOGqtAaCUQt8lpazrmnMuhGjbtuu6EAIjIu+9lFJrHWNERHqnnHPf91VVDcNQSkkpEdFneF1XpdQ8zz8Lb+Wcc2MMEZ0kOw1r7TRNF3d6H1+6xhCCEMI59yYspfTev1aVUo7juNBlWZqmufLPMADknFNKvx1MRPu+O+cQEQAujCFijJH+k7UWAG5LlnP++09EhIjnR27kAywRzwPhfdHLAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"An Example of lexing of a GraphQL Query\",\n    \"title\": \"An Example of lexing of a GraphQL Query\",\n    \"src\": \"/static/ae293c520b3414f548fcba77b62d1775/b5cea/query%20lexing.png\",\n    \"srcSet\": [\"/static/ae293c520b3414f548fcba77b62d1775/0e2fe/query%20lexing.png 285w\", \"/static/ae293c520b3414f548fcba77b62d1775/432e7/query%20lexing.png 570w\", \"/static/ae293c520b3414f548fcba77b62d1775/b5cea/query%20lexing.png 1140w\", \"/static/ae293c520b3414f548fcba77b62d1775/2cefc/query%20lexing.png 1400w\"],\n    \"sizes\": \"(max-width: 1140px) 100vw, 1140px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"An Example of lexing of a GraphQL Query\"), \"\\n  \"), \"\\n  \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"style\": {\n      \"textAlign\": \"center\"\n    }\n  }, \"Fig.2 - An Example of lexing of a GraphQL Query\")), mdx(\"p\", null, \"The rules the GraphQL lexer uses to split up the query are \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://graphql.github.io/graphql-spec/draft/#sec-Appendix-Grammar-Summary.Lexical-Tokens\"\n  }, \"defined in the GraphQL grammar\"), \". Lexer for \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL\"), \" can be found in the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/graphql/graphql-js/blob/6938c1ab65264616805889c6e19fb3b74ce95658/src/language/lexer.js\"\n  }, \"library for interested user to understand how lexing actually works\"), \". The core of the lexer is based on regular expressions. The lexer analyzes the query string, and whenever it finds a token that matches a regular expression on the left, the action on the right are executed.\"), mdx(\"figure\", null, \"\\n  \", mdx(\"figure\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1140px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"42.45614035087719%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA/UlEQVQY04WQa4vCMBBF/f9/rYIGVmsNYsCWphO1Jg3k5UykZlf2yZ4P8+meucMshmFYrVZVVTHG6rpmjFlr81d2u52U0hgjhBjH0VqrlIoxLnLOQoj1el3XdUopxph/sN/vD4fDNE3n85meAAAiznLf98vlUghRokT0TeacA0AIwXtfAlLK+/0+y4i42Wzatn2ZZR6Px7KxnB1CuN1uKSUiGobhvTnG+Pak67rPhUSEiKWZc661btu2yEopIlogolLKf5B/g3PeNI3W+nQ6ee+J6Hq9zvI4jsaY/DdEtN1uAcA5p7UOISAiAMzy5XLJ/2GtTSkh4usjzrmc8wNyCcmKWIUFcgAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Query (left) and tokens (right)\",\n    \"title\": \"Query (left) and tokens (right)\",\n    \"src\": \"/static/481bc3b10e9ae298e78241027baa6f54/b5cea/afterlexing.png\",\n    \"srcSet\": [\"/static/481bc3b10e9ae298e78241027baa6f54/0e2fe/afterlexing.png 285w\", \"/static/481bc3b10e9ae298e78241027baa6f54/432e7/afterlexing.png 570w\", \"/static/481bc3b10e9ae298e78241027baa6f54/b5cea/afterlexing.png 1140w\", \"/static/481bc3b10e9ae298e78241027baa6f54/2cefc/afterlexing.png 1400w\"],\n    \"sizes\": \"(max-width: 1140px) 100vw, 1140px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"Query (left) and tokens (right)\"), \"\\n  \"), \"\\n  \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"style\": {\n      \"textAlign\": \"center\"\n    }\n  }, \"Fig.3 - Query (left) and tokens (right)\")), mdx(\"p\", null, \"As illustrated in the figure 3, none of the whitespaces are shown in the token list. This is because spaces and tabs are part of the ignored tokens in the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL\"), \" grammar rule. After lexer, the sequences of tokens are turned into a more abstract form. This step is called parsing.\"), mdx(\"h2\", {\n    \"id\": \"3-parsing\"\n  }, \"3. Parsing\"), mdx(\"p\", null, \"The rules for parser are \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://graphql.github.io/graphql-spec/draft/#sec-Appendix-Grammar-Summary.Document\"\n  }, \"defined in the GraphQL Grammar\"), \". The rules defined in the Grammar are very comprehensive and helps the readers to better understand the language.\"), mdx(\"figure\", null, \"\\n  \", mdx(\"figure\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"662px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"153.33333333333331%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAYAAADnTu3OAAAACXBIWXMAAAsTAAALEwEAmpwYAAACTElEQVRIx6VVi5KCMAz0//9QHXyBigJCoa1QWnKzQbhDvRO4zoRWoOsmuykLIiIpJcVxTEIIapzDLWqaZjCPHQtsQCRJQkHgU5oVZF17bw7oAhetNd1uN6qqip73TmaIizGGwjCk0+nEcxiembF7Sn90yhgA8DyPDocDbTYbnsF4VspgkmUZswMwAgJZa+cBKqXocrn0aWONMsxWGQOieBuP9vs9rddrBu4Ax0bPsCxL9mKe55wqGM8ZAGXA+/1OQRDQdrtlQXzf5zpqdWfDX69XiqKIs9BS8zPUXKt2jXdAapAyGKJ2eFjXNTnryJSGawm1EaYy7b3afK9NG53FelHSNOUAMKIoivkpgxGor1YrTm+5XHKgnkgf5cCMtP8SaiAKBEF03us2IhXcQ4zpnJ4hCu77B4qihJQuiX7Z9MmXDIiCgx3murZkjP3owY+A5/OZa/bg8b/zsOuU3W7H7QdhfvbxXyyfGfeAsAlURMC0o2xCDS6vKaN+cRLzQ1bUWRaqUxfG7X5j5nVte9C3DGFucRMkMsEM0TFgK4Xqf0sh2fz8/UlzatxrnRddutg0VYB3ovUMoXCWfoO6CUfWC0OkC5VFnlNR6r4j2pfbSk06sfEPAIVdwuuFMplTrkqqKvPw5Hg/9r2MOhayYJOzytaRc81DxYmAsEWEQzSJKREZFVKSdW5Yq+bVIh9Txjl415oBVVUOKvfOxL8CAgiew4l9PB4ZHKzxaUAYU49n+PMFdADsA8XhS3QQ1ipX01IGCE5lnDjogrF9+w7wC4l6g+uDHyH8AAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"GraphQL Grammar Excerpt\",\n    \"title\": \"GraphQL Grammar Excerpt\",\n    \"src\": \"/static/a347c4193b61f91640be5ead9c139495/be86f/parser.png\",\n    \"srcSet\": [\"/static/a347c4193b61f91640be5ead9c139495/0e2fe/parser.png 285w\", \"/static/a347c4193b61f91640be5ead9c139495/432e7/parser.png 570w\", \"/static/a347c4193b61f91640be5ead9c139495/be86f/parser.png 662w\"],\n    \"sizes\": \"(max-width: 662px) 100vw, 662px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"GraphQL Grammar Excerpt\"), \"\\n  \"), \"\\n  \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"style\": {\n      \"textAlign\": \"center\"\n    }\n  }, \"Fig.4 - GraphQL Grammar Excerpt\")), mdx(\"p\", null, \"Here is what the excerpt in figure 4 is saying:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The root of all \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"GraphQL\"), \" queries is known as a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Document\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"A \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Document\"), \" has one or many \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Definition\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"A \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Definition\"), \" can be either a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"ExecutableDefinition\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"TypeSystemDefinition\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"TypeSystemExtension\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"An \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"ExecutableDefinition\"), \" can be \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"OperationDefinition\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"FragmentDefinition\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"An \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"OperationDefinition\"), \" is either a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SelectionSet\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"OperationType\"), \" optionally followed by \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Name\"), \" or optionally followed by \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"VariableDefinition\"), \" or optionally followed by \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Directives\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SelectionSet\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"A \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SelectionSet\"), \" has one or many \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Selection\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"A \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Selection\"), \" can be \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Field\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"FragmentSpread\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"InlineFragment\"), \" and so on.\")), mdx(\"p\", null, \"Multiple rules depend on other rules and the Grammar defines all of them. If you continue reading the rules, ultimately the token starts appearing. For example, the rule for \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"OperationType\"), \" states that it can be one of the following \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"query\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"mutation\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"subscriptions\"), \" \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"#2\"\n  }, \"[2]\"), \". This is what we discussed in the previous article.\"), mdx(\"figure\", null, \"\\n  \", mdx(\"figure\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1140px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"79.29824561403508%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAAACXBIWXMAAAsTAAALEwEAmpwYAAABrUlEQVQoz4WT246qMBRA5///xydzCInoAwpouRlTtdCWAgUkQlRQ6MlQx4yZM4f1tNN07exL+yGEyPM8SZKiKPIvsiw7Ho+apqmqCiF8HcqgKArOedd1H0IIQgiEkFKKMaYDhJDlcmkYxnIAIRRFkbwQhiEeaJrmKSOEhBB1XW+3W8/zfN+v6/pyuUAIkyRpmiYMQ9u2d7vd+XxO0xRj3Lbtp4wxJoSIAQjhn4HpdKrruqZp8/l8tVopimKa5vV6lW2+yRhjKR8OB13XHccBALiu63keAMCyrCAI0jS93W7/kznnTdPIuKqq0+kkhOj7XggxLud5jhAyDMNxHN/3FUVZLBZhGBJCKKUy769yWZamaaqqOpvNJpOJbdvr9RoAwBgjhIzIRVFACIMgYIxhjLOBsiyzLJPrGSmbENK2rWxV8hLGZYRQVVXiCylzzqUwIlNKoyjinKfvMMZGpi338Xg82m/Iav+9qnBAypRSznnf9/d3uq6LokjKcnhPWf4E2Z7MGscx+0Ecx23b9n2fZZkc6qccBIFlWbZtv56k+wsAgM1m47rufr+/3+9/AWsUb3Oji3CAAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Parser Visual Representation\",\n    \"title\": \"Parser Visual Representation\",\n    \"src\": \"/static/cbbbfeeeff6fb7e25e2415eb737f7c3e/b5cea/parserVisual.png\",\n    \"srcSet\": [\"/static/cbbbfeeeff6fb7e25e2415eb737f7c3e/0e2fe/parserVisual.png 285w\", \"/static/cbbbfeeeff6fb7e25e2415eb737f7c3e/432e7/parserVisual.png 570w\", \"/static/cbbbfeeeff6fb7e25e2415eb737f7c3e/b5cea/parserVisual.png 1140w\", \"/static/cbbbfeeeff6fb7e25e2415eb737f7c3e/46115/parserVisual.png 1290w\"],\n    \"sizes\": \"(max-width: 1140px) 100vw, 1140px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"Parser Visual Representation\"), \"\\n  \"), \"\\n  \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"style\": {\n      \"textAlign\": \"center\"\n    }\n  }, \"Fig.5 - Parser Visual Representation\")), mdx(\"p\", null, \"Figure 5 shows a visual representation of the example query above once it is been parsed out. If you are interested more in learning about how parser has been implemented in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL\"), \", \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/graphql/graphql-js/blob/6938c1ab65264616805889c6e19fb3b74ce95658/src/language/parser.js\"\n  }, \"here is the file one should be looking into\"), \". After parsing, the structure we get is referred to as Abstract Syntax Tree (AST) \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"#4\"\n  }, \"[4]\"), \".\"), mdx(\"p\", null, \"For the query given below, the AST looks like one in the figure 6:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-javascript\"\n  }, \"query PostsForAuthor {\\n  author(id: \\\"1\\\") {\\n    username\\n    posts {\\n      title\\n      votes\\n      createdAt\\n    }\\n  }\\n}\\n\")), mdx(\"figure\", null, \"\\n  \", mdx(\"figure\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1140px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"44.21052631578947%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABHElEQVQoz43RyW7DIBCA4bz/o0XKxaqUBTPB4xUlKPFgx2YJVIH2kLaHfieE9ItlNs650+mEiF3Xcc6bpinLskqEEEopItJaj+NIRPf7fV3X+G0TY7zdbrvdjnO+3+8ZY4jYNI3W2hgzz/OSaK3neZ6myXv/FnvvEbEoCsYYAPR9DwBSyrZth2Ewxqzr6pzz3tvEJF9x7gHgfD4johCi6zoiUkpJKYnoer0SUT5fKZVfEUJ4xSGEGOPlctlutwCQ4+PxWFVVnbRtO47j39fO8fP5/EgQEQCKhDHGOe/7noimaSIi59xbnMsYY13Xh8NhSIQQZVlKKYUQiPh4POIvr9gYQ0QhBGvtsiwusdbmf8oLa21I3uI8jx+7//QJ57X9to7osvAAAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Abstract Syntax Tree\",\n    \"title\": \"Abstract Syntax Tree\",\n    \"src\": \"/static/69d98b0c562bd0dfaa10f53baff6e903/b5cea/ast.png\",\n    \"srcSet\": [\"/static/69d98b0c562bd0dfaa10f53baff6e903/0e2fe/ast.png 285w\", \"/static/69d98b0c562bd0dfaa10f53baff6e903/432e7/ast.png 570w\", \"/static/69d98b0c562bd0dfaa10f53baff6e903/b5cea/ast.png 1140w\", \"/static/69d98b0c562bd0dfaa10f53baff6e903/8cdda/ast.png 1168w\"],\n    \"sizes\": \"(max-width: 1140px) 100vw, 1140px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"Abstract Syntax Tree\"), \"\\n  \"), \"\\n  \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"style\": {\n      \"textAlign\": \"center\"\n    }\n  }, \"Fig.6 - Abstract Syntax Tree\")), mdx(\"p\", null, \"The next step in the query execution is query validation which is discussed in the next section. In order to get deeper understanding of the lexers, parsers and AST, I recommend the reader to read COMPILER DESIGN: SYNTACTIC AND SEMANTIC ANALYSIS by: Reinhard Wilhelm, Helmut Seidl, Sebastian Hack.\"), mdx(\"h2\", {\n    \"id\": \"4-validation\"\n  }, \"4. Validation\"), mdx(\"p\", null, \"Figure 6 shows the AST of the example query. At this point, it is clear that the query is syntactically correct. But it does not mean, it is executable. There could be plethora of issues with it:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Author\"), \" type could well not have a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"username\"), \" field.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The argument \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"id\"), \" could not have type \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Int\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SelectionSet\"), \" for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"posts\"), \" may not have one or many valid \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"field\"), \".\")), mdx(\"p\", null, \"The parser doesn\\u2019t care about these phases. It is the job of the validation phase. The \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL\"), \" specification has entire section that covers about the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://graphql.github.io/graphql-spec/draft/#sec-Validation\"\n  }, \"validation\"), \". There are several implementations for \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL\"), \" query validation including \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/graphql/graphql-js/blob/master/src/graphql.js\"\n  }, \"JS version\"), \". When it comes to the validation, there is one thing that is common: the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.dofactory.com/javascript/visitor-design-pattern\"\n  }, \"visitor pattern\"), \". While Wikipedia provides a theoretical explanation of the visitor pattern, I\\u2019d like to explore how it\\u2019s used in GraphQL implementations to power the validation phase. We\\u2019ll also look at some sample code from \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/graphql/graphql-js/blob/master/src/graphql.js\"\n  }, \"GraphQL.js\"), \".\"), mdx(\"p\", null, \"First, let\\u2019s start with a simple query and its AST representation:\"), mdx(\"figure\", null, \"\\n  \", mdx(\"figure\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1140px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"75.43859649122807%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAIAAABr+ngCAAAACXBIWXMAAAsTAAALEwEAmpwYAAABXElEQVQoz42Sy47kIAxF+///sBSpSAA7gCESZIHCw+mZoHl1VVpzNqyO7rXxx3meWmshRErp/JfW2nEcKaVSSmvtfOFjPEqpaZr2fc85A8A0TTFGczHPMxEZY179n3IphYi2beu9t9Zyzvu+H8dBRNZaKWUIwXvPzF9lZs45v1bqvWutEVFr7Zyz1vbe39fmiy+ylFIptSwLIq7r+ib5vKG1Zoyx1mqt6eI2+U4GgOfzaa313r9f2G/4F6P2cAAghEBE/1ubmUspAICIy7Ls+05E3yW31rz3McYxJwDIC6UUEYUQRvLf7f7IpRQhBCIKIYwxWmtrrVLq8XjM8wwApZTvatdaW2u993pBRN57pRQiSinHFM65GOO4qNtt11oRcds2pVRKCREBYNu2eZ5DCKPIrczMzrl1XaWUY+3ee+eclHJdV+ccM9/KpZQQQq11XPU4GGYeH+69/5H8CfJOYP1qIRx4AAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Abstract Syntax Tree validation\",\n    \"title\": \"Abstract Syntax Tree validation\",\n    \"src\": \"/static/a4d867d89ab7b8612dfb7322669c96aa/b5cea/astValid.png\",\n    \"srcSet\": [\"/static/a4d867d89ab7b8612dfb7322669c96aa/0e2fe/astValid.png 285w\", \"/static/a4d867d89ab7b8612dfb7322669c96aa/432e7/astValid.png 570w\", \"/static/a4d867d89ab7b8612dfb7322669c96aa/b5cea/astValid.png 1140w\", \"/static/a4d867d89ab7b8612dfb7322669c96aa/2cefc/astValid.png 1400w\"],\n    \"sizes\": \"(max-width: 1140px) 100vw, 1140px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"Abstract Syntax Tree validation\"), \"\\n  \"), \"\\n  \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"style\": {\n      \"textAlign\": \"center\"\n    }\n  }, \"Fig.7 - Abstract Syntax Tree Tree validation\")), mdx(\"p\", null, \"In order to determine whether the query can be executed or not, \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/graphql/graphql-js/blob/master/src/graphql.js\"\n  }, \"GraphQL.js\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"validate\"), \" function will traverse the AST using a \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://en.wikipedia.org/wiki/Depth-first_search\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"a\"\n  }, \"depth-first traversal\")), \". In other words, it will start at the root of the AST (in this case, the Document node) and it will explore as far as possible along the first branch before backtracking and continuing on to the next branch.\"), mdx(\"figure\", null, \"\\n  \", mdx(\"figure\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1140px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"79.29824561403508%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAAACXBIWXMAAAsTAAALEwEAmpwYAAABV0lEQVQoz5WTcYvzIAzG7/t/xMEoY6U1ahITp62btndUeA9uG+z9/SWSx8Qnydf+RGttmiZVJSJmVlVjTGvtOfLr+WrbNhG53W5EJCIxRlXdtu1TsfceEQGgH5h5f8ULca0VER+PR0ppWZb7/U5En5a973sIAQDGcZzn2Rijqv+R2TlXa805L8tSa/Xe11o/zczMzrlpmuyBiLzN/MfJ1hoippS62932T91urQGAiCBijDHnzMxvDVPVEIKIeO/neXbOAcDlchmGYToIIfQC//ErttaWUnpjSinGmB59P9j3HRHfGpZSEhE9EJGcMxFdr9dhGM7n8+l0AgBVtdYyc4xRRPqjr/9MRL1V67q21szBuq4xxl6d9/7X7T8gIhEBgHMOEb33RBRCcM5Za/vCvJ1tZu6hXcMH3VHvfQihz9zrCQOAdV37SpVSxnEEgFJK73zOGQB+xN/Vq6FWWr0RdQAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Depth-first traversal of our example query\",\n    \"title\": \"Depth-first traversal of our example query\",\n    \"src\": \"/static/3be04f257c08a8b8eaf4249761dc89fd/b5cea/dfs.png\",\n    \"srcSet\": [\"/static/3be04f257c08a8b8eaf4249761dc89fd/0e2fe/dfs.png 285w\", \"/static/3be04f257c08a8b8eaf4249761dc89fd/432e7/dfs.png 570w\", \"/static/3be04f257c08a8b8eaf4249761dc89fd/b5cea/dfs.png 1140w\", \"/static/3be04f257c08a8b8eaf4249761dc89fd/fbf76/dfs.png 1252w\"],\n    \"sizes\": \"(max-width: 1140px) 100vw, 1140px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"Depth-first traversal of our example query\"), \"\\n  \"), \"\\n  \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"style\": {\n      \"textAlign\": \"center\"\n    }\n  }, \"Fig.8 - Depth-first traversal of our example query\")), mdx(\"p\", null, \"Visitors (in this case, validations rules) can watch as the AST is being traversed and perform actions when a certain type of node is reached. In \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL.js\"), \", visitors can be implemented in different ways, but in their simplest form they are an object with a enter and leave function.\"), mdx(\"p\", null, \"During the traversal, when a node is reached the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"enter\"), \" function of the visitor will get called. When backtracking, the visitor\\u2019s \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"leave\"), \" function gets called.\"), mdx(\"p\", null, \"Here\\u2019s a simple visitor that logs whenever a node is entered or left. Notice in this example we are using \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL.js\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"visit\"), \" function to traverse the AST. This is the same function that validate uses.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-javascript\"\n  }, \"import { visit } from 'graphql/language/visitor'\\nimport { parse } from 'graphql/language'\\n\\nconst query = `\\n  query {\\n    viewer {\\n      username\\n      email\\n    }\\n  }\\n`\\n\\nvar indent = ''\\n\\nvar visitor = {\\n  enter(node) {\\n    console.log(`${indent}Enter ${node.kind}`)\\n    indent = indent + '  '\\n  },\\n\\n  leave(node) {\\n    indent = indent.substring(0, indent.length - 2)\\n    console.log(`${indent}Leave ${node.kind}`)\\n  }\\n}\\n\\nvisit(parse(query), visitor)\\n\\n// Output:\\n//\\n// Enter Document\\n//   Enter OperationDefinition\\n//     Enter SelectionSet\\n//       Enter Field\\n//         Enter Name\\n//         Leave Name\\n//         Enter SelectionSet\\n//           Enter Field\\n//             Enter Name\\n//             Leave Name\\n//           Leave Field\\n//           Enter Field\\n//             Enter Name\\n//             Leave Name\\n//           Leave Field\\n//         Leave SelectionSet\\n//       Leave Field\\n//     Leave SelectionSet\\n//   Leave OperationDefinition\\n// Leave Document\\n\")), mdx(\"p\", null, \"Some GraphQL rules might only be interested by a specific type of node. For example, a rule might want to validate that an \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"OperationDefinition\"), \" always has a \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"name\"), \" (i.e. query Name { .. }.) For this reason each \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL.js\"), \" rule can decide to hook onto individual types of nodes. This can be done by nesting the enter and leave functions under a key named the same as the kind of AST node of interest.\"), mdx(\"p\", null, \"Here\\u2019s an example of a visitor that only cares about when an \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"OperationDefinition\"), \" node is entered:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-javascript\"\n  }, \"import { visit } from 'graphql/language/visitor'\\nimport { parse } from 'graphql/language'\\n\\nconst query = `\\n  query FetchViewerUsernameAndEmail {\\n    viewer {\\n      username\\n      email\\n    }\\n  }\\n`\\n\\nvar visitor = {\\n  OperationDefinition: {\\n    enter(node) {\\n      console.log(node)\\n    }\\n  }\\n}\\n\\nvisit(parse(query), visitor)\\n\\n// Output:\\n//\\n// { kind: 'OperationDefinition',\\n//   operation: 'query',\\n//   name:\\n//    { kind: 'Name',\\n//      value: 'FetchViewerUsernameAndEmail',\\n//      loc: { start: 9, end: 36 } },\\n//   variableDefinitions: [],\\n//   directives: [],\\n//   selectionSet:\\n//    { kind: 'SelectionSet',\\n//      selections: [ [Object] ],\\n//      loc: { start: 37, end: 88 } },\\n//   loc: { start: 3, end: 88 } }\\n\")), mdx(\"p\", null, \"The \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"OperationDefinition\"), \" key in the above example can be replaced with any valid \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"AST\"), \" node kind to observe that kind of node. A visitor can also observe multiple node kinds at once by setting the corresponding keys.\"), mdx(\"p\", null, \"Now that we have a better understanding of the visitor pattern and how visitors are implemented in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL.js\"), \", we can add the missing parts to turn this visitor into a GraphQL.js validation rule.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-javascript\"\n  }, \"import { GraphQLError } from 'graphql/error'\\n\\nfunction OperationHasName(context) {\\n  return {\\n    OperationDefinition: {\\n      enter(node) {\\n        if (!node.name) {\\n          context.reportError(\\n            new GraphQLError(\\n              `The operation \\\\`${node.operation}\\\\` is missing a name.`,\\n              [node]\\n            )\\n          )\\n        }\\n      }\\n    }\\n  }\\n}\\n\")), mdx(\"p\", null, \"If you\\u2019re interested in learning more about the validation phase, check out \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GraphQL.js\\u2019\"), \" inside \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"src/validation\"), \" folder. A lot of what was discussed is explained as comments in the code.\"), mdx(\"h2\", {\n    \"id\": \"5-execution\"\n  }, \"5. Execution\"), mdx(\"p\", null, \"Once the query is validated against these rules, it is simply executed. The resolvers then fetches the data from backend and responds back to the user.\"), mdx(\"h2\", {\n    \"id\": \"6-conclusion\"\n  }, \"6. Conclusion\"), mdx(\"p\", null, \"GraphQL is a protocol and a query language. GraphQL API \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"#1\"\n  }, \"[1]\"), \" can access data stores directly but for most use cases GraphQL API is a data aggregator and an abstraction layer. The layer that improves velocity of development, decreases maintenance and makes developers happier. For these reasons, GraphQL makes even more sense for a public API. GraphQL is meant to be used for client applications, where network bandwidth and latency are critical. It provides clients, the ability to query an object graph (a hierarchical structure of related objects). Using GraphQL, clients also get to choose what fields need to be included in the response. This makes it a whole lot simpler and easier to use and manage data fetching on the client\\u2019s end.\"), mdx(\"h2\", {\n    \"id\": \"references\"\n  }, \"References\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"a\", {\n    name: \"1\"\n  }), \"Li, J., Xiong, Y., Liu, X., & Zhang, L. (2013). How does web service API evolution affect clients? In Proceedings - IEEE 20th International Conference on Web Services, ICWS 2013. https://doi.org/10.1109/ICWS.2013.48\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"a\", {\n    name: \"2\"\n  }), \"GraphQL Mutation: https://www.tutorialspoint.com/graphql/graphql_mutation.htm.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"a\", {\n    name: \"3\"\n  }), \"GraphQL: https://graphql.org/learn/\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"a\", {\n    name: \"4\"\n  }), \"Abstract Syntax Tree https://en.wikipedia.org/wiki/Abstract_syntax_tree\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"a\", {\n    name: \"5\"\n  }), \"Original Source: https://medium.com/@cjoudrey/life-of-a-graphql-query-validation-18a8fb52f189\")));\n}\n;\nMDXContent.isMDXComponent = true;","keywords":null,"tags":[{"id":"4412d279-876b-554b-8f10-cead0afdcbac","name":"GraphQL","slug":"/tag/graphql/"},{"id":"9bc5126b-d154-5c4c-810a-4f8f7fce3f58","name":"GraphQL Query parsing","slug":"/tag/graphql-query-parsing/"},{"id":"c6dbb246-ceff-538d-9601-73da6c88643e","name":"GraphQL Query validation","slug":"/tag/graphql-query-validation/"}],"thumbnail":{"__typename":"ImageSharp","ImageSharp_vertical":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/69d98b0c562bd0dfaa10f53baff6e903/19188/ast.png","srcSet":"/static/69d98b0c562bd0dfaa10f53baff6e903/db297/ast.png 190w,\n/static/69d98b0c562bd0dfaa10f53baff6e903/19188/ast.png 380w","sizes":"(min-width: 380px) 380px, 100vw"},"sources":[{"srcSet":"/static/69d98b0c562bd0dfaa10f53baff6e903/228d6/ast.webp 190w,\n/static/69d98b0c562bd0dfaa10f53baff6e903/6b99c/ast.webp 380w","type":"image/webp","sizes":"(min-width: 380px) 380px, 100vw"}]},"width":380,"height":290},"ImageSharp_hero":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/69d98b0c562bd0dfaa10f53baff6e903/20d1c/ast.png","srcSet":"/static/69d98b0c562bd0dfaa10f53baff6e903/40116/ast.png 584w,\n/static/69d98b0c562bd0dfaa10f53baff6e903/20d1c/ast.png 1168w","sizes":"(min-width: 1168px) 1168px, 100vw"},"sources":[{"srcSet":"/static/69d98b0c562bd0dfaa10f53baff6e903/67375/ast.webp 584w,\n/static/69d98b0c562bd0dfaa10f53baff6e903/64ebe/ast.webp 1168w","type":"image/webp","sizes":"(min-width: 1168px) 1168px, 100vw"}]},"width":1600,"height":650.6849315068494}}},"tagCategoryPosts":{"nodes":[{"id":"bcdd1461-6069-56a7-b618-6e13f6eb2306","title":"How does GraphQL work?","slug":"/how-does-graphql-work/","link":null,"excerpt":"Abstract Keywords: Software service architecture, RESTful, GraphQL, GraphQL architecture, Query…","timeToRead":6,"featured":null,"thumbnailText":null,"date":"June 20, 2019","category":{"id":"586422b6-b6df-56a6-b4f7-5071c49da347","name":"Software Architecture","slug":"/category/software-architecture/","color":null,"icon":"/static/171c4f2a122d83963638a8e07c0520ed/software.svg"},"author":{"id":"947e8b57-e3c9-5b4b-9872-fc27eb54f257","name":"Suresh Kumar Mukhiya","slug":"/author/suresh-kumar-mukhiya/","title":"Software Engineer","description":"Researcher by chance. I prefer green food and nice code. Artificial Intelligence, Big data and Frontend Technologies fascinates me. I like taking pictures.","skills":["Software Architecture","Frontend Development","Natural Language Processing"],"social":[{"name":"Github","url":"http://github.com/sureshHARDIYA/"},{"name":"Twitter","url":"https://twitter.com/dr_code_skm"},{"name":"Website","url":"https://www.skmukhiya.com.np/"}],"thumbnail":{"__typename":"ImageSharp","ImageSharp_small":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/416a0/suresh.png 96w","sizes":"48px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a3542/suresh.webp 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/0f66d/suresh.webp 96w","type":"image/webp","sizes":"48px"}]},"width":48,"height":48},"ImageSharp_regular":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/d612b/suresh.png 300w","sizes":"150px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/ae23d/suresh.webp 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/bd37b/suresh.webp 300w","type":"image/webp","sizes":"150px"}]},"width":150,"height":150}}},"thumbnail":{"__typename":"ImageSharp","ImageSharp_vertical":{"layout":"constrained","backgroundColor":"#080808","images":{"fallback":{"src":"/static/762edb84b0bf808c1746d10188ebf04a/19188/graphql.png","srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/db297/graphql.png 190w,\n/static/762edb84b0bf808c1746d10188ebf04a/19188/graphql.png 380w","sizes":"(min-width: 380px) 380px, 100vw"},"sources":[{"srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/228d6/graphql.webp 190w,\n/static/762edb84b0bf808c1746d10188ebf04a/6b99c/graphql.webp 380w","type":"image/webp","sizes":"(min-width: 380px) 380px, 100vw"}]},"width":380,"height":290},"ImageSharp_hero":{"layout":"constrained","backgroundColor":"#080808","images":{"fallback":{"src":"/static/762edb84b0bf808c1746d10188ebf04a/945a8/graphql.png","srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/17e9b/graphql.png 800w,\n/static/762edb84b0bf808c1746d10188ebf04a/945a8/graphql.png 1600w","sizes":"(min-width: 1600px) 1600px, 100vw"},"sources":[{"srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/c9f06/graphql.webp 800w,\n/static/762edb84b0bf808c1746d10188ebf04a/f47df/graphql.webp 1600w","type":"image/webp","sizes":"(min-width: 1600px) 1600px, 100vw"}]},"width":1600,"height":650}}}]},"tagPosts":{"nodes":[{"id":"bcdd1461-6069-56a7-b618-6e13f6eb2306","title":"How does GraphQL work?","slug":"/how-does-graphql-work/","link":null,"excerpt":"Abstract Keywords: Software service architecture, RESTful, GraphQL, GraphQL architecture, Query…","timeToRead":6,"featured":null,"thumbnailText":null,"date":"June 20, 2019","category":{"id":"586422b6-b6df-56a6-b4f7-5071c49da347","name":"Software Architecture","slug":"/category/software-architecture/","color":null,"icon":"/static/171c4f2a122d83963638a8e07c0520ed/software.svg"},"author":{"id":"947e8b57-e3c9-5b4b-9872-fc27eb54f257","name":"Suresh Kumar Mukhiya","slug":"/author/suresh-kumar-mukhiya/","title":"Software Engineer","description":"Researcher by chance. I prefer green food and nice code. Artificial Intelligence, Big data and Frontend Technologies fascinates me. I like taking pictures.","skills":["Software Architecture","Frontend Development","Natural Language Processing"],"social":[{"name":"Github","url":"http://github.com/sureshHARDIYA/"},{"name":"Twitter","url":"https://twitter.com/dr_code_skm"},{"name":"Website","url":"https://www.skmukhiya.com.np/"}],"thumbnail":{"__typename":"ImageSharp","ImageSharp_small":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/416a0/suresh.png 96w","sizes":"48px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a3542/suresh.webp 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/0f66d/suresh.webp 96w","type":"image/webp","sizes":"48px"}]},"width":48,"height":48},"ImageSharp_regular":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/d612b/suresh.png 300w","sizes":"150px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/ae23d/suresh.webp 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/bd37b/suresh.webp 300w","type":"image/webp","sizes":"150px"}]},"width":150,"height":150}}},"thumbnail":{"__typename":"ImageSharp","ImageSharp_vertical":{"layout":"constrained","backgroundColor":"#080808","images":{"fallback":{"src":"/static/762edb84b0bf808c1746d10188ebf04a/19188/graphql.png","srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/db297/graphql.png 190w,\n/static/762edb84b0bf808c1746d10188ebf04a/19188/graphql.png 380w","sizes":"(min-width: 380px) 380px, 100vw"},"sources":[{"srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/228d6/graphql.webp 190w,\n/static/762edb84b0bf808c1746d10188ebf04a/6b99c/graphql.webp 380w","type":"image/webp","sizes":"(min-width: 380px) 380px, 100vw"}]},"width":380,"height":290},"ImageSharp_hero":{"layout":"constrained","backgroundColor":"#080808","images":{"fallback":{"src":"/static/762edb84b0bf808c1746d10188ebf04a/945a8/graphql.png","srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/17e9b/graphql.png 800w,\n/static/762edb84b0bf808c1746d10188ebf04a/945a8/graphql.png 1600w","sizes":"(min-width: 1600px) 1600px, 100vw"},"sources":[{"srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/c9f06/graphql.webp 800w,\n/static/762edb84b0bf808c1746d10188ebf04a/f47df/graphql.webp 1600w","type":"image/webp","sizes":"(min-width: 1600px) 1600px, 100vw"}]},"width":1600,"height":650}}}]},"categoryPosts":{"nodes":[{"id":"40c99c9c-876e-56bd-9a15-a00fd5b53059","title":"Difference between software architecture and software design","slug":"/difference-between-software-architecture-and-software-design/","link":null,"excerpt":"Abstract Keywords: Software design, Software architecture, Software system, Software pattern…","timeToRead":5,"featured":null,"thumbnailText":null,"date":"January 24, 2021","category":{"id":"586422b6-b6df-56a6-b4f7-5071c49da347","name":"Software Architecture","slug":"/category/software-architecture/","color":null,"icon":"/static/171c4f2a122d83963638a8e07c0520ed/software.svg"},"author":{"id":"947e8b57-e3c9-5b4b-9872-fc27eb54f257","name":"Suresh Kumar Mukhiya","slug":"/author/suresh-kumar-mukhiya/","title":"Software Engineer","description":"Researcher by chance. I prefer green food and nice code. Artificial Intelligence, Big data and Frontend Technologies fascinates me. I like taking pictures.","skills":["Software Architecture","Frontend Development","Natural Language Processing"],"social":[{"name":"Github","url":"http://github.com/sureshHARDIYA/"},{"name":"Twitter","url":"https://twitter.com/dr_code_skm"},{"name":"Website","url":"https://www.skmukhiya.com.np/"}],"thumbnail":{"__typename":"ImageSharp","ImageSharp_small":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/416a0/suresh.png 96w","sizes":"48px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a3542/suresh.webp 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/0f66d/suresh.webp 96w","type":"image/webp","sizes":"48px"}]},"width":48,"height":48},"ImageSharp_regular":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/d612b/suresh.png 300w","sizes":"150px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/ae23d/suresh.webp 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/bd37b/suresh.webp 300w","type":"image/webp","sizes":"150px"}]},"width":150,"height":150}}},"thumbnail":{"__typename":"ImageSharp","ImageSharp_vertical":{"layout":"constrained","backgroundColor":"#e85848","images":{"fallback":{"src":"/static/fab3b3276c4f887c6fb8194b3db9b256/19188/arch.png","srcSet":"/static/fab3b3276c4f887c6fb8194b3db9b256/db297/arch.png 190w,\n/static/fab3b3276c4f887c6fb8194b3db9b256/19188/arch.png 380w","sizes":"(min-width: 380px) 380px, 100vw"},"sources":[{"srcSet":"/static/fab3b3276c4f887c6fb8194b3db9b256/228d6/arch.webp 190w,\n/static/fab3b3276c4f887c6fb8194b3db9b256/6b99c/arch.webp 380w","type":"image/webp","sizes":"(min-width: 380px) 380px, 100vw"}]},"width":380,"height":290},"ImageSharp_hero":{"layout":"constrained","backgroundColor":"#e85848","images":{"fallback":{"src":"/static/fab3b3276c4f887c6fb8194b3db9b256/945a8/arch.png","srcSet":"/static/fab3b3276c4f887c6fb8194b3db9b256/17e9b/arch.png 800w,\n/static/fab3b3276c4f887c6fb8194b3db9b256/945a8/arch.png 1600w","sizes":"(min-width: 1600px) 1600px, 100vw"},"sources":[{"srcSet":"/static/fab3b3276c4f887c6fb8194b3db9b256/c9f06/arch.webp 800w,\n/static/fab3b3276c4f887c6fb8194b3db9b256/f47df/arch.webp 1600w","type":"image/webp","sizes":"(min-width: 1600px) 1600px, 100vw"}]},"width":1600,"height":650}}},{"id":"38a729f0-c16d-5883-9dd4-4ed2a67942f5","title":"Test Driven Development vs Behaviour Driven Development","slug":"/test-driven-development-vs-behaviour-driven-development/","link":null,"excerpt":"Abstract Keywords: Test Driven Development, Behaviour Driven Development, Acceptance Test Driven…","timeToRead":2,"featured":null,"thumbnailText":null,"date":"December 24, 2020","category":{"id":"586422b6-b6df-56a6-b4f7-5071c49da347","name":"Software Architecture","slug":"/category/software-architecture/","color":null,"icon":"/static/171c4f2a122d83963638a8e07c0520ed/software.svg"},"author":{"id":"947e8b57-e3c9-5b4b-9872-fc27eb54f257","name":"Suresh Kumar Mukhiya","slug":"/author/suresh-kumar-mukhiya/","title":"Software Engineer","description":"Researcher by chance. I prefer green food and nice code. Artificial Intelligence, Big data and Frontend Technologies fascinates me. I like taking pictures.","skills":["Software Architecture","Frontend Development","Natural Language Processing"],"social":[{"name":"Github","url":"http://github.com/sureshHARDIYA/"},{"name":"Twitter","url":"https://twitter.com/dr_code_skm"},{"name":"Website","url":"https://www.skmukhiya.com.np/"}],"thumbnail":{"__typename":"ImageSharp","ImageSharp_small":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/416a0/suresh.png 96w","sizes":"48px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a3542/suresh.webp 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/0f66d/suresh.webp 96w","type":"image/webp","sizes":"48px"}]},"width":48,"height":48},"ImageSharp_regular":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/d612b/suresh.png 300w","sizes":"150px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/ae23d/suresh.webp 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/bd37b/suresh.webp 300w","type":"image/webp","sizes":"150px"}]},"width":150,"height":150}}},"thumbnail":{"__typename":"ImageSharp","ImageSharp_vertical":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/c9cd266b0efb20736b1bcbd9a91097a2/19188/tdd.png","srcSet":"/static/c9cd266b0efb20736b1bcbd9a91097a2/db297/tdd.png 190w,\n/static/c9cd266b0efb20736b1bcbd9a91097a2/19188/tdd.png 380w","sizes":"(min-width: 380px) 380px, 100vw"},"sources":[{"srcSet":"/static/c9cd266b0efb20736b1bcbd9a91097a2/228d6/tdd.webp 190w,\n/static/c9cd266b0efb20736b1bcbd9a91097a2/6b99c/tdd.webp 380w","type":"image/webp","sizes":"(min-width: 380px) 380px, 100vw"}]},"width":380,"height":290},"ImageSharp_hero":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/c9cd266b0efb20736b1bcbd9a91097a2/8d218/tdd.png","srcSet":"/static/c9cd266b0efb20736b1bcbd9a91097a2/7bba1/tdd.png 434w,\n/static/c9cd266b0efb20736b1bcbd9a91097a2/8d218/tdd.png 867w","sizes":"(min-width: 867px) 867px, 100vw"},"sources":[{"srcSet":"/static/c9cd266b0efb20736b1bcbd9a91097a2/795fe/tdd.webp 434w,\n/static/c9cd266b0efb20736b1bcbd9a91097a2/d6f0a/tdd.webp 867w","type":"image/webp","sizes":"(min-width: 867px) 867px, 100vw"}]},"width":1600,"height":649.59630911188}}},{"id":"c21a2e38-b56e-5e0f-abc6-5cff1879670f","title":"Factory Design Pattern in Python","slug":"/factory-design-pattern-in-python/","link":null,"excerpt":"Abstract Keywords: Design pattern, Factory Design Pattern in Python, Creational Design Pattern…","timeToRead":3,"featured":null,"thumbnailText":null,"date":"July 29, 2020","category":{"id":"586422b6-b6df-56a6-b4f7-5071c49da347","name":"Software Architecture","slug":"/category/software-architecture/","color":null,"icon":"/static/171c4f2a122d83963638a8e07c0520ed/software.svg"},"author":{"id":"947e8b57-e3c9-5b4b-9872-fc27eb54f257","name":"Suresh Kumar Mukhiya","slug":"/author/suresh-kumar-mukhiya/","title":"Software Engineer","description":"Researcher by chance. I prefer green food and nice code. Artificial Intelligence, Big data and Frontend Technologies fascinates me. I like taking pictures.","skills":["Software Architecture","Frontend Development","Natural Language Processing"],"social":[{"name":"Github","url":"http://github.com/sureshHARDIYA/"},{"name":"Twitter","url":"https://twitter.com/dr_code_skm"},{"name":"Website","url":"https://www.skmukhiya.com.np/"}],"thumbnail":{"__typename":"ImageSharp","ImageSharp_small":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/416a0/suresh.png 96w","sizes":"48px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a3542/suresh.webp 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/0f66d/suresh.webp 96w","type":"image/webp","sizes":"48px"}]},"width":48,"height":48},"ImageSharp_regular":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/d612b/suresh.png 300w","sizes":"150px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/ae23d/suresh.webp 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/bd37b/suresh.webp 300w","type":"image/webp","sizes":"150px"}]},"width":150,"height":150}}},"thumbnail":{"__typename":"ImageSharp","ImageSharp_vertical":{"layout":"constrained","backgroundColor":"#e8f8f8","images":{"fallback":{"src":"/static/15620787b55f5f970c115462cc86771a/19188/task.png","srcSet":"/static/15620787b55f5f970c115462cc86771a/db297/task.png 190w,\n/static/15620787b55f5f970c115462cc86771a/19188/task.png 380w","sizes":"(min-width: 380px) 380px, 100vw"},"sources":[{"srcSet":"/static/15620787b55f5f970c115462cc86771a/228d6/task.webp 190w,\n/static/15620787b55f5f970c115462cc86771a/6b99c/task.webp 380w","type":"image/webp","sizes":"(min-width: 380px) 380px, 100vw"}]},"width":380,"height":290},"ImageSharp_hero":{"layout":"constrained","backgroundColor":"#e8f8f8","images":{"fallback":{"src":"/static/15620787b55f5f970c115462cc86771a/4c012/task.png","srcSet":"/static/15620787b55f5f970c115462cc86771a/f8224/task.png 279w,\n/static/15620787b55f5f970c115462cc86771a/4c012/task.png 558w","sizes":"(min-width: 558px) 558px, 100vw"},"sources":[{"srcSet":"/static/15620787b55f5f970c115462cc86771a/a058d/task.webp 279w,\n/static/15620787b55f5f970c115462cc86771a/bd1be/task.webp 558w","type":"image/webp","sizes":"(min-width: 558px) 558px, 100vw"}]},"width":1600,"height":650.8960573476702}}},{"id":"22454c7f-446b-5f84-aa6f-ad1756a5e602","title":"All about Information Architecture","slug":"/all-about-information-architecture/","link":null,"excerpt":"Abstract And many more. Well, being full stack web development/ frontend development these not very…","timeToRead":14,"featured":null,"thumbnailText":null,"date":"October 27, 2019","category":{"id":"586422b6-b6df-56a6-b4f7-5071c49da347","name":"Software Architecture","slug":"/category/software-architecture/","color":null,"icon":"/static/171c4f2a122d83963638a8e07c0520ed/software.svg"},"author":{"id":"947e8b57-e3c9-5b4b-9872-fc27eb54f257","name":"Suresh Kumar Mukhiya","slug":"/author/suresh-kumar-mukhiya/","title":"Software Engineer","description":"Researcher by chance. I prefer green food and nice code. Artificial Intelligence, Big data and Frontend Technologies fascinates me. I like taking pictures.","skills":["Software Architecture","Frontend Development","Natural Language Processing"],"social":[{"name":"Github","url":"http://github.com/sureshHARDIYA/"},{"name":"Twitter","url":"https://twitter.com/dr_code_skm"},{"name":"Website","url":"https://www.skmukhiya.com.np/"}],"thumbnail":{"__typename":"ImageSharp","ImageSharp_small":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/416a0/suresh.png 96w","sizes":"48px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a3542/suresh.webp 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/0f66d/suresh.webp 96w","type":"image/webp","sizes":"48px"}]},"width":48,"height":48},"ImageSharp_regular":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/d612b/suresh.png 300w","sizes":"150px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/ae23d/suresh.webp 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/bd37b/suresh.webp 300w","type":"image/webp","sizes":"150px"}]},"width":150,"height":150}}},"thumbnail":{"__typename":"ImageSharp","ImageSharp_vertical":{"layout":"constrained","backgroundColor":"#e8e8e8","images":{"fallback":{"src":"/static/515a3b7ad5c1101c170a555bc2c979ac/19188/ia.png","srcSet":"/static/515a3b7ad5c1101c170a555bc2c979ac/db297/ia.png 190w,\n/static/515a3b7ad5c1101c170a555bc2c979ac/19188/ia.png 380w","sizes":"(min-width: 380px) 380px, 100vw"},"sources":[{"srcSet":"/static/515a3b7ad5c1101c170a555bc2c979ac/228d6/ia.webp 190w,\n/static/515a3b7ad5c1101c170a555bc2c979ac/6b99c/ia.webp 380w","type":"image/webp","sizes":"(min-width: 380px) 380px, 100vw"}]},"width":380,"height":290},"ImageSharp_hero":{"layout":"constrained","backgroundColor":"#e8e8e8","images":{"fallback":{"src":"/static/515a3b7ad5c1101c170a555bc2c979ac/a0508/ia.png","srcSet":"/static/515a3b7ad5c1101c170a555bc2c979ac/9e437/ia.png 657w,\n/static/515a3b7ad5c1101c170a555bc2c979ac/a0508/ia.png 1314w","sizes":"(min-width: 1314px) 1314px, 100vw"},"sources":[{"srcSet":"/static/515a3b7ad5c1101c170a555bc2c979ac/a3bb1/ia.webp 657w,\n/static/515a3b7ad5c1101c170a555bc2c979ac/bb649/ia.webp 1314w","type":"image/webp","sizes":"(min-width: 1314px) 1314px, 100vw"}]},"width":1600,"height":650.2283105022831}}},{"id":"bcdd1461-6069-56a7-b618-6e13f6eb2306","title":"How does GraphQL work?","slug":"/how-does-graphql-work/","link":null,"excerpt":"Abstract Keywords: Software service architecture, RESTful, GraphQL, GraphQL architecture, Query…","timeToRead":6,"featured":null,"thumbnailText":null,"date":"June 20, 2019","category":{"id":"586422b6-b6df-56a6-b4f7-5071c49da347","name":"Software Architecture","slug":"/category/software-architecture/","color":null,"icon":"/static/171c4f2a122d83963638a8e07c0520ed/software.svg"},"author":{"id":"947e8b57-e3c9-5b4b-9872-fc27eb54f257","name":"Suresh Kumar Mukhiya","slug":"/author/suresh-kumar-mukhiya/","title":"Software Engineer","description":"Researcher by chance. I prefer green food and nice code. Artificial Intelligence, Big data and Frontend Technologies fascinates me. I like taking pictures.","skills":["Software Architecture","Frontend Development","Natural Language Processing"],"social":[{"name":"Github","url":"http://github.com/sureshHARDIYA/"},{"name":"Twitter","url":"https://twitter.com/dr_code_skm"},{"name":"Website","url":"https://www.skmukhiya.com.np/"}],"thumbnail":{"__typename":"ImageSharp","ImageSharp_small":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/416a0/suresh.png 96w","sizes":"48px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a3542/suresh.webp 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/0f66d/suresh.webp 96w","type":"image/webp","sizes":"48px"}]},"width":48,"height":48},"ImageSharp_regular":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/d612b/suresh.png 300w","sizes":"150px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/ae23d/suresh.webp 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/bd37b/suresh.webp 300w","type":"image/webp","sizes":"150px"}]},"width":150,"height":150}}},"thumbnail":{"__typename":"ImageSharp","ImageSharp_vertical":{"layout":"constrained","backgroundColor":"#080808","images":{"fallback":{"src":"/static/762edb84b0bf808c1746d10188ebf04a/19188/graphql.png","srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/db297/graphql.png 190w,\n/static/762edb84b0bf808c1746d10188ebf04a/19188/graphql.png 380w","sizes":"(min-width: 380px) 380px, 100vw"},"sources":[{"srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/228d6/graphql.webp 190w,\n/static/762edb84b0bf808c1746d10188ebf04a/6b99c/graphql.webp 380w","type":"image/webp","sizes":"(min-width: 380px) 380px, 100vw"}]},"width":380,"height":290},"ImageSharp_hero":{"layout":"constrained","backgroundColor":"#080808","images":{"fallback":{"src":"/static/762edb84b0bf808c1746d10188ebf04a/945a8/graphql.png","srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/17e9b/graphql.png 800w,\n/static/762edb84b0bf808c1746d10188ebf04a/945a8/graphql.png 1600w","sizes":"(min-width: 1600px) 1600px, 100vw"},"sources":[{"srcSet":"/static/762edb84b0bf808c1746d10188ebf04a/c9f06/graphql.webp 800w,\n/static/762edb84b0bf808c1746d10188ebf04a/f47df/graphql.webp 1600w","type":"image/webp","sizes":"(min-width: 1600px) 1600px, 100vw"}]},"width":1600,"height":650}}},{"id":"27d95ea0-f879-5183-b4f2-8a8650eb45c1","title":"Adaptive Technology in Mental Health","slug":"/adaptive-technology-in-mental-health/","link":null,"excerpt":"Technology has open new domains in data collection and mental health. The uniqueness of mental…","timeToRead":3,"featured":null,"thumbnailText":null,"date":"January 04, 2019","category":{"id":"586422b6-b6df-56a6-b4f7-5071c49da347","name":"Software Architecture","slug":"/category/software-architecture/","color":null,"icon":"/static/171c4f2a122d83963638a8e07c0520ed/software.svg"},"author":{"id":"947e8b57-e3c9-5b4b-9872-fc27eb54f257","name":"Suresh Kumar Mukhiya","slug":"/author/suresh-kumar-mukhiya/","title":"Software Engineer","description":"Researcher by chance. I prefer green food and nice code. Artificial Intelligence, Big data and Frontend Technologies fascinates me. I like taking pictures.","skills":["Software Architecture","Frontend Development","Natural Language Processing"],"social":[{"name":"Github","url":"http://github.com/sureshHARDIYA/"},{"name":"Twitter","url":"https://twitter.com/dr_code_skm"},{"name":"Website","url":"https://www.skmukhiya.com.np/"}],"thumbnail":{"__typename":"ImageSharp","ImageSharp_small":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a7a66/suresh.png 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/416a0/suresh.png 96w","sizes":"48px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/a3542/suresh.webp 48w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/0f66d/suresh.webp 96w","type":"image/webp","sizes":"48px"}]},"width":48,"height":48},"ImageSharp_regular":{"layout":"fixed","placeholder":{"fallback":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='150'%20height='150'%20viewBox='0%200%20150%20150'%20preserveAspectRatio='none'%3e%3cpath%20d='M63%202a74%2074%200%201041%20142c8-4%208-4%205-5l-3-2c0-2%203-2%206-1%203%202%204%202%2011-4A74%2074%200%200063%202M41%2058c-19%208-25%2017-26%2035l-1%2011c-2%205%208%2010%2019%2010h6l-1-4-1-5%202-9%201%201%202%202%202%202c0%202%201%202%204%202%203-1%205%200%207%201%207%204%2016%201%2022-8l2-2-1%202-1%203h13c4-1%204-1%206-7%201-2%201-4%202-3l3%201%202%201%202%201c3%200%205%203%204%204l-1%206v5h5c6%200%2013-3%2013-6l-2-8c-1-8-5-19-8-21-2-3-15-12-19-12-1-1-3-1-4%201l-4%201c-1-1-2%200-3%202v3c3%201-3%2018-8%2022-4%203-4%201%200-3%205-6%204-8-2-3-8%208-8%208-14%202-4-4-5-5-5-3v3l-3-10c0-8-3-20-4-20l-9%203m62%2058l-6%204h-2c0-2-3-1-4%201%200%203%202%206%208%207l7%203c4%202%209%202%207-1l-3-8c-3-8-3-8-7-6m-15%2014c-1%205-1%206%204%207h8c7-2%206-2-2-6-11-5-10-5-10-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"images":{"fallback":{"src":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png","srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/46e60/suresh.png 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/d612b/suresh.png 300w","sizes":"150px"},"sources":[{"srcSet":"/static/f5daa173e29dcd3a2863e27fd1dbc2d1/ae23d/suresh.webp 150w,\n/static/f5daa173e29dcd3a2863e27fd1dbc2d1/bd37b/suresh.webp 300w","type":"image/webp","sizes":"150px"}]},"width":150,"height":150}}},"thumbnail":{"__typename":"ImageSharp","ImageSharp_vertical":{"layout":"constrained","backgroundColor":"#080808","images":{"fallback":{"src":"/static/1b0e3b65008965142a63adb983e4a904/144fe/photo-1490474418585-ba9bad8fd0ea-cover.jpg","srcSet":"/static/1b0e3b65008965142a63adb983e4a904/9d7b9/photo-1490474418585-ba9bad8fd0ea-cover.jpg 190w,\n/static/1b0e3b65008965142a63adb983e4a904/144fe/photo-1490474418585-ba9bad8fd0ea-cover.jpg 380w","sizes":"(min-width: 380px) 380px, 100vw"},"sources":[{"srcSet":"/static/1b0e3b65008965142a63adb983e4a904/228d6/photo-1490474418585-ba9bad8fd0ea-cover.webp 190w,\n/static/1b0e3b65008965142a63adb983e4a904/6b99c/photo-1490474418585-ba9bad8fd0ea-cover.webp 380w","type":"image/webp","sizes":"(min-width: 380px) 380px, 100vw"}]},"width":380,"height":290},"ImageSharp_hero":{"layout":"constrained","backgroundColor":"#080808","images":{"fallback":{"src":"/static/1b0e3b65008965142a63adb983e4a904/2265f/photo-1490474418585-ba9bad8fd0ea-cover.jpg","srcSet":"/static/1b0e3b65008965142a63adb983e4a904/df20f/photo-1490474418585-ba9bad8fd0ea-cover.jpg 200w,\n/static/1b0e3b65008965142a63adb983e4a904/2265f/photo-1490474418585-ba9bad8fd0ea-cover.jpg 400w","sizes":"(min-width: 400px) 400px, 100vw"},"sources":[{"srcSet":"/static/1b0e3b65008965142a63adb983e4a904/67e60/photo-1490474418585-ba9bad8fd0ea-cover.webp 200w,\n/static/1b0e3b65008965142a63adb983e4a904/6a2da/photo-1490474418585-ba9bad8fd0ea-cover.webp 400w","type":"image/webp","sizes":"(min-width: 400px) 400px, 100vw"}]},"width":1600,"height":652}}}]},"previous":{"id":"bcdd1461-6069-56a7-b618-6e13f6eb2306","slug":"/how-does-graphql-work/","title":"How does GraphQL work?"},"next":{"id":"22454c7f-446b-5f84-aa6f-ad1756a5e602","slug":"/all-about-information-architecture/","title":"All about Information Architecture"}},"pageContext":{"id":"9fe0732b-2cb8-5db5-9f24-c74d3b8c833b","categoryId":"586422b6-b6df-56a6-b4f7-5071c49da347","tagsIds":["4412d279-876b-554b-8f10-cead0afdcbac","9bc5126b-d154-5c4c-810a-4f8f7fce3f58","c6dbb246-ceff-538d-9601-73da6c88643e"],"hasTags":true,"previousId":"bcdd1461-6069-56a7-b618-6e13f6eb2306","nextId":"22454c7f-446b-5f84-aa6f-ad1756a5e602","paginatePostsPage":true,"basePath":"/","services":{"algolia":true,"mailchimp":false,"disqus":true,"graphComment":false,"facebookComment":false},"siteUrl":null,"mobileMenu":{"title":"Topics","items":[{"name":"Artificial Intelligence","slug":"/category/artificial-intelligence/"},{"name":"Frontend Cheetseat","slug":"/category/frontend-cheetseat/"},{"name":"My Philosophy","slug":"/category/my-philosophy/"},{"name":"Paper Review","slug":"/category/paper-review/"},{"name":"Research Methods","slug":"/category/research-methods/"},{"name":"Software Architecture","slug":"/category/software-architecture/"}]},"darkMode":true,"includeExcerpt":true,"includeTimeToRead":true,"includeTableOfContents":true,"imageQuality":75}},
    "staticQueryHashes": ["1992822086","2409295108","2918496967","2981853053","4235339838","4240507859"]}