<?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: Gabriel Pinheiro</title>
    <description>The latest articles on DEV Community by Gabriel Pinheiro (@gabrielpinheiro).</description>
    <link>https://dev.to/gabrielpinheiro</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%2F254192%2F03172e41-13e1-4533-834b-e526bdb2f0b9.png</url>
      <title>DEV Community: Gabriel Pinheiro</title>
      <link>https://dev.to/gabrielpinheiro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gabrielpinheiro"/>
    <language>en</language>
    <item>
      <title>Create dummy APIs for faster prototyping 👨‍💻⚡</title>
      <dc:creator>Gabriel Pinheiro</dc:creator>
      <pubDate>Mon, 18 Oct 2021 14:14:27 +0000</pubDate>
      <link>https://dev.to/gabrielpinheiro/create-dummy-apis-for-faster-prototyping-5ka</link>
      <guid>https://dev.to/gabrielpinheiro/create-dummy-apis-for-faster-prototyping-5ka</guid>
      <description>&lt;p&gt;&lt;small&gt;🖼️ Image by &lt;a href="https://pixabay.com/users/geralt-9301" rel="noopener noreferrer"&gt;Gerd Altmann&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;It's quite common to need a dummy API (mocks, stubs) while building a prototype, testing a hypothesis or simply creating the front end of an application in which the API isn't done yet.&lt;/p&gt;

&lt;p&gt;The ideal is spending as little time as possible in the mocks so you can test hypothesis quickly, prototype without worrying about the back end and deliver the application with confidence that it'll work with the real API.&lt;/p&gt;

&lt;p&gt;By the end of this article, you'll have created &lt;strong&gt;a mocked API accessible from anywhere without writing a single line of code&lt;/strong&gt;. We'll use &lt;a href="https://mocko.dev/" rel="noopener noreferrer"&gt;Mocko&lt;/a&gt; as its forever-free plan has the features we need and limits that don't get in the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create an API on Mocko
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://mocko.dev/" rel="noopener noreferrer"&gt;https://mocko.dev/&lt;/a&gt; and log in using your GitHub account:&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv1fbd2sy6xi4vl9blcj4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv1fbd2sy6xi4vl9blcj4.png" alt="Authorize Mocko to read your email"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you'll choose a good name and URL for our mocked API, I'll go with &lt;code&gt;Insane Goat&lt;/code&gt;:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 2: Create your first Mock
&lt;/h2&gt;

&lt;p&gt;Now that you have a dummy API created, it's time to create your first mock like so:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fogs0xur9xjncs8csqgy5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fogs0xur9xjncs8csqgy5.png" alt="Click the "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose a name for your mock and fill the request and response information. To begin, mock a &lt;code&gt;200&lt;/code&gt; response with &lt;code&gt;Hello from Mocko!&lt;/code&gt; on &lt;code&gt;GET /hello&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9xyy6tk5g31tf7r3bdn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9xyy6tk5g31tf7r3bdn.png" alt="Fill mock data and click "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that you created you first mock, you can try it by clicking the "open" icon in the list or using the URL in the top bar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj4ixqiv6are7bjvi5isr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj4ixqiv6are7bjvi5isr.png" alt="Copy project URL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my case, I can see mine in the URL:&lt;br&gt;
&lt;a href="https://insane-goat.free.mockoapp.net/hello" rel="noopener noreferrer"&gt;https://insane-goat.free.mockoapp.net/hello&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Create a dynamic mock
&lt;/h2&gt;

&lt;p&gt;You can use &lt;a href="https://github.com/gabriel-pinheiro/bigodon/blob/main/LANGUAGE.md" rel="noopener noreferrer"&gt;Bigodon&lt;/a&gt; in your mocks to create templates that are evaluated with request data as context. What you write between &lt;code&gt;{{&lt;/code&gt; and &lt;code&gt;}}&lt;/code&gt; allows you to access fields from the context like &lt;code&gt;request.params&lt;/code&gt;, &lt;code&gt;request.body&lt;/code&gt;, &lt;code&gt;request.headers&lt;/code&gt;, &lt;code&gt;request.query&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let's create an endpoint that greets the user by name using the parameter provided in the URL. Mock the response &lt;code&gt;Hello, {{ request.params.name }}!&lt;/code&gt; in the endpoint &lt;code&gt;/hello/{name}&lt;/code&gt; like so:&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zavvteslnns5mrdekq7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zavvteslnns5mrdekq7.png" alt="Fill mock data and click "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, any parameter you pass in the URL gets used by the template:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1udosjdifl23f3u1dn1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1udosjdifl23f3u1dn1l.png" alt="Template uses URL param"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To zhuzh it up even more, you can use &lt;a href="https://github.com/gabriel-pinheiro/bigodon/blob/main/HELPERS.md" rel="noopener noreferrer"&gt;Bigodon helpers&lt;/a&gt; to transform data, iterate over arrays, run conditions and a lot more. Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight handlebars"&gt;&lt;code&gt;Hello, &lt;span class="k"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;capitalize&lt;/span&gt; &lt;span class="nv"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="k"&gt;}}&lt;/span&gt;!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Create an advanced template
&lt;/h2&gt;

&lt;p&gt;As shown above, you can use &lt;a href="https://github.com/gabriel-pinheiro/bigodon/blob/main/LANGUAGE.md#conditional-blocks" rel="noopener noreferrer"&gt;conditionals&lt;/a&gt;, &lt;a href="https://github.com/gabriel-pinheiro/bigodon/blob/main/LANGUAGE.md#loop-blocks" rel="noopener noreferrer"&gt;loops&lt;/a&gt;, &lt;a href="https://github.com/gabriel-pinheiro/bigodon/blob/main/LANGUAGE.md#helpers" rel="noopener noreferrer"&gt;helpers&lt;/a&gt;, &lt;a href="https://mocko.dev/docs/templating/helpers/" rel="noopener noreferrer"&gt;custom helpers&lt;/a&gt; and a lot more. Let's create a mock template on &lt;code&gt;GET /users/{name}&lt;/code&gt; that returns dummy user data for users whose name start with &lt;code&gt;g&lt;/code&gt; and 404 otherwise:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight handlebars"&gt;&lt;code&gt;&lt;span class="k"&gt;{{#&lt;/span&gt;&lt;span class="nn"&gt;startsWith&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;downcase&lt;/span&gt; &lt;span class="nv"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s2"&gt;"g"&lt;/span&gt;&lt;span class="k"&gt;}}&lt;/span&gt;
  {
    "id": "&lt;span class="k"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;uuid&lt;/span&gt;&lt;span class="k"&gt;}}&lt;/span&gt;",
    "name": "&lt;span class="k"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;capitalize&lt;/span&gt; &lt;span class="nv"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="k"&gt;}}&lt;/span&gt;"
  }
&lt;span class="k"&gt;{{else}}&lt;/span&gt;
  &lt;span class="k"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;setStatus&lt;/span&gt; &lt;span class="nv"&gt;404&lt;/span&gt;&lt;span class="k"&gt;}}&lt;/span&gt;
  {
    "error": "User not found"
  }
&lt;span class="k"&gt;{{/&lt;/span&gt;&lt;span class="nn"&gt;startsWith&lt;/span&gt;&lt;span class="k"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's the result:&lt;br&gt;
&lt;a href="https://insane-goat.free.mockoapp.net/users/george" rel="noopener noreferrer"&gt;https://insane-goat.free.mockoapp.net/users/george&lt;/a&gt;&lt;br&gt;
&lt;a href="https://insane-goat.free.mockoapp.net/users/alice" rel="noopener noreferrer"&gt;https://insane-goat.free.mockoapp.net/users/alice&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Proxying your API
&lt;/h2&gt;

&lt;p&gt;If you already have an API to use and you wish to mock only some endpoints, you can use the proxy feature to proxy your API and mock only specific endpoints:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3ig6hdcigam5489eutd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3ig6hdcigam5489eutd.png" alt="Proxy settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Mocks don't have to be limited and must be easy to create, after all, that's the point of using mocks: Quickly develop even when your dependencies aren't ready.&lt;/p&gt;

&lt;p&gt;This is only possible due to Free Open Source Software, if you like the result make sure to leave &lt;a href="https://github.com/mocko-app/mocko/stargazers" rel="noopener noreferrer"&gt;Mocko&lt;/a&gt; and &lt;a href="https://github.com/gabriel-pinheiro/bigodon/stargazers" rel="noopener noreferrer"&gt;Bigodon&lt;/a&gt; a star on GitHub.&lt;/p&gt;

&lt;p&gt;I'll be happy to hear your thoughts in the comments. Also, make sure to leave a heart if this article helped you 😃&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>productivity</category>
      <category>mock</category>
    </item>
  </channel>
</rss>
