<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ionut Achim</title>
    <description>The latest articles on DEV Community by Ionut Achim (@monojack).</description>
    <link>https://dev.to/monojack</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F124708%2F5bb0c201-9937-4cb5-8009-54813418bfd1.jpeg</url>
      <title>DEV Community: Ionut Achim</title>
      <link>https://dev.to/monojack</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/monojack"/>
    <language>en</language>
    <item>
      <title>Normalize GraphQL response data</title>
      <dc:creator>Ionut Achim</dc:creator>
      <pubDate>Sat, 29 Dec 2018 21:00:46 +0000</pubDate>
      <link>https://dev.to/monojack/normalize-graphql-response-data-39l4</link>
      <guid>https://dev.to/monojack/normalize-graphql-response-data-39l4</guid>
      <description>&lt;p&gt;We all love &lt;strong&gt;GraphQL&lt;/strong&gt; and we want to use it. There are tons of libraries and clients out there that help us do that with ease, but there is still one problem... How do you persist that data?&lt;/p&gt;

&lt;p&gt;Yes, everything is all great when the response mirrors the exact structure we asked for, but we don't want to cache it that way, do we? We probably want a normalized version of that data which we can persist to our store and read/modify it efficiently. Flux or Redux stores work best with normalized data and there are also GraphQL clients you can use to execute queries on the local cache/state (&lt;a href="https://github.com/monojack/blips" rel="noopener noreferrer"&gt;blips&lt;/a&gt; or &lt;a href="https://github.com/apollographql/apollo-link-state" rel="noopener noreferrer"&gt;apollo-link-state&lt;/a&gt;), in which case, we definitely need to persist normalized data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GraphQLNormalizr&lt;/strong&gt; is simple, fast, light-weight and it provides all the tools needed to do just that, the only requirement is that you include the &lt;em&gt;id&lt;/em&gt; and &lt;em&gt;__typename&lt;/em&gt; fields for all the nodes (but it can do that for you if you're too lazy or you want to keep your sources thin).&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/monojack" rel="noopener noreferrer"&gt;
        monojack
      &lt;/a&gt; / &lt;a href="https://github.com/monojack/graphql-normalizr" rel="noopener noreferrer"&gt;
        graphql-normalizr
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Normalize GraphQL responses for persisting in the client cache/state
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;&lt;strong&gt;graphql-normalizr&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/monojack/graphql-normalizr/workflows/Publish/badge.svg"&gt;&lt;img src="https://github.com/monojack/graphql-normalizr/workflows/Publish/badge.svg" alt="publish"&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/package/graphql-normalizr" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/44addb877ec22dd1d07896d97879b23005ef697a168c6d7015a0c99c99fa4bd3/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f6772617068716c2d6e6f726d616c697a722e737667" alt="npm version"&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/package/graphql-normalizr" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a5610730d7355a71a8a5f38a120b9b6809e41f880767ff4cab08ea4f500c68ee/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f6772617068716c2d6e6f726d616c697a722e737667" alt="npm downloads"&gt;&lt;/a&gt;
&lt;a href="https://bundlephobia.com/result?p=graphql-normalizr@latest" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ea618d026aa795e6b759906e72f235de6725b3e9572ff688579acedf1abbe7b8/68747470733a2f2f62616467656e2e6e65742f62756e646c6570686f6269612f6d696e2f6772617068716c2d6e6f726d616c697a72" alt="minified size"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Normalize GraphQL responses for persisting in the client cache/state.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Not related, in any way, to &lt;a href="https://github.com/paularmstrong/normalizr" rel="noopener noreferrer"&gt;normalizr&lt;/a&gt;, just shamelessly piggybacking on its popularity. Also, "normaliz&lt;strong&gt;E&lt;/strong&gt;r" is taken...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Transforms:&lt;/p&gt;
&lt;div class="highlight highlight-source-json notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;{
  &lt;span class="pl-ent"&gt;"data"&lt;/span&gt;: {
    &lt;span class="pl-ent"&gt;"findUser"&lt;/span&gt;: [
      {
        &lt;span class="pl-ent"&gt;"__typename"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;User&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
        &lt;span class="pl-ent"&gt;"id"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;5a6efb94b0e8c36f99fba013&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
        &lt;span class="pl-ent"&gt;"email"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Lloyd.Nikolaus@yahoo.com&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
        &lt;span class="pl-ent"&gt;"posts"&lt;/span&gt;: [
          {
            &lt;span class="pl-ent"&gt;"__typename"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;BlogPost&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
            &lt;span class="pl-ent"&gt;"id"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;5a6efb94b0e8c36f99fba016&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
            &lt;span class="pl-ent"&gt;"title"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Dolorem voluptatem molestiae&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
            &lt;span class="pl-ent"&gt;"comments"&lt;/span&gt;: [
              {
                &lt;span class="pl-ent"&gt;"__typename"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Comment&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                &lt;span class="pl-ent"&gt;"id"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;5a6efb94b0e8c36f99fba019&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                &lt;span class="pl-ent"&gt;"message"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Alias quod est voluptatibus aut quis sunt aut numquam.&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
              },
              {
                &lt;span class="pl-ent"&gt;"__typename"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Comment&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                &lt;span class="pl-ent"&gt;"id"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;5a6efb94b0e8c36f99fba01b&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                &lt;span class="pl-ent"&gt;"message"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Harum quia asperiores nemo.&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
              },
              {
                &lt;span class="pl-ent"&gt;"__typename"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Comment&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                &lt;span class="pl-ent"&gt;"id"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;5a6efb94b0e8c36f99fba01c&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                &lt;span class="pl-ent"&gt;"message"&lt;/span&gt;: &lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/monojack/graphql-normalizr" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>githunt</category>
      <category>opensource</category>
      <category>javascript</category>
      <category>graphql</category>
    </item>
  </channel>
</rss>
