<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Post on avni.sh</title>
    <link>http://www.avni.sh/tags/post/</link>
    <description>Recent content in Post on avni.sh</description>
    <image>
      <title>avni.sh</title>
      <url>http://www.avni.sh/cover.webp</url>
      <link>http://www.avni.sh/cover.webp</link>
    </image>
    <generator>Hugo -- 0.146.0</generator>
    <language>en</language>
    <lastBuildDate>Fri, 15 Sep 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://www.avni.sh/tags/post/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>REST API Requests in Go</title>
      <link>http://www.avni.sh/posts/computer-science/technologies/go/rest-api-requests-in-go/</link>
      <pubDate>Fri, 15 Sep 2023 00:00:00 +0000</pubDate>
      <guid>http://www.avni.sh/posts/computer-science/technologies/go/rest-api-requests-in-go/</guid>
      <description>Performing HTTP requests on REST APIs with Go</description>
      <content:encoded><![CDATA[<h1 id="what-is-rest">What is REST?</h1>
<p>REST (REpresentational State Transfer) is an architectural style for designing and developing APIs that could be used for client and server interactions.</p>
<p>REST defines 6 architectural constraints for APIs:</p>
<ul>
<li>Uniform interface: API requests for a resource should look the same irrespective of its origin client. The Uniform Resource Identifier (URI) allocated to resources should be unique.</li>
<li>Client-server: Changes on the client side should not affect the server and vice-versa.</li>
<li>Stateless: The API request should contain all the resources required to process it. The server should not store any details related to client requests.</li>
<li>Cacheable: API Responses could be cached on the client or server side.</li>
<li>Layered system: Neither the client nor the server should have information regarding the number of intermediate layers during communication.</li>
<li>Code on demand (optional): When required, code snippets sent through API responses should be executable on demand.</li>
</ul>
<p>APIs that comply with REST architecture constraints are called <strong>RESTful APIs</strong>.</p>
<h1 id="rest-requests">REST Requests</h1>
<p>A REST request comprises of:</p>
<ul>
<li>HTTP Verb: Specifies the type of operation to be performed on resource/s like creation, fetch, updation, and deletion.</li>
<li>Header: Contains the information about the request like its datatype (<code>text/html</code>, <code>text/plain</code>, <code>application/json</code>, etc.), credentials, proxy server address, etc.</li>
<li>Path: Path to the resource (URI)</li>
<li>Body: Input data for the operation.</li>
</ul>
<h1 id="http-verbs">HTTP Verbs</h1>
<p><code>GET</code>, <code>POST</code>, <code>PUT</code>, and <code>DELETE</code> are common HTTP verbs available in RESTful APIs.</p>
<p><strong>Note</strong>: To follow this tutorial you need to head over to <a href="https://crudcrud.com/" target="_blank">crudcrud.com</a> to get a new API endpoint.</p>
<p>The <code>net/http</code> Go package provides all the necessary utilities for implementing REST clients and servers.</p>
<h2 id="post"><code>POST</code></h2>
<p>A <code>POST</code> request is performed to create resources.</p>
<p>If we have to perform a <code>POST</code> request on the API endpoint provided by crudcrud.com we have to pass the resource (to be created) as a <a href="/posts/go/file-handling-in-go/#encoding-json" target="_blank">JSON payload</a> in the request&rsquo;s body.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span><span class="lnt">61
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;net/http&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;encoding/json&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;bytes&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;io/ioutil&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Replace with the API ID provided by crudcrud.com</span>
</span></span><span class="line"><span class="cl">	<span class="nx">apiID</span> <span class="o">:=</span> <span class="s">&#34;XXXXXX&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// HTTP endpoint with path of resource (vehicles)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">createResourceURL</span> <span class="o">:=</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Sprintf</span><span class="p">(</span><span class="s">&#34;https://crudcrud.com/api/%s/vehicles&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">									<span class="nx">apiID</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// JSON payload containing resource information</span>
</span></span><span class="line"><span class="cl">	<span class="nx">requestBody</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">json</span><span class="p">.</span><span class="nf">Marshal</span><span class="p">(</span><span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">string</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="s">&#34;color&#34;</span><span class="p">:</span> <span class="s">&#34;White&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">		<span class="s">&#34;license&#34;</span><span class="p">:</span> <span class="s">&#34;ABC123&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">		<span class="s">&#34;numWheels&#34;</span><span class="p">:</span> <span class="s">&#34;4&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">		<span class="s">&#34;type&#34;</span><span class="p">:</span> <span class="s">&#34;Car&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">	<span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Converting request body into bytes buffer</span>
</span></span><span class="line"><span class="cl">	<span class="nx">requestBodyBytes</span> <span class="o">:=</span> <span class="nx">bytes</span><span class="p">.</span><span class="nf">NewBuffer</span><span class="p">(</span><span class="nx">requestBody</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Creating a POST request on createResourceURL</span>
</span></span><span class="line"><span class="cl">	<span class="nx">request</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">http</span><span class="p">.</span><span class="nf">NewRequest</span><span class="p">(</span><span class="s">&#34;POST&#34;</span><span class="p">,</span> <span class="nx">createResourceURL</span><span class="p">,</span> <span class="nx">requestBodyBytes</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nb">panic</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Adding application/json as payload type </span>
</span></span><span class="line"><span class="cl">	<span class="nx">request</span><span class="p">.</span><span class="nx">Header</span><span class="p">.</span><span class="nf">Add</span><span class="p">(</span><span class="s">&#34;Content-Type&#34;</span><span class="p">,</span> <span class="s">&#34;application/json&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">client</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">http</span><span class="p">.</span><span class="nx">Client</span><span class="p">{}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Performing POST request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">response</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">client</span><span class="p">.</span><span class="nf">Do</span><span class="p">(</span><span class="nx">request</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nb">panic</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nx">response</span><span class="p">.</span><span class="nx">Body</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Reading the response to the request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">responseBody</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">ReadAll</span><span class="p">(</span><span class="nx">response</span><span class="p">.</span><span class="nx">Body</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Error received in response:&#34;</span><span class="p">,</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">responseBodyString</span> <span class="o">:=</span> <span class="nb">string</span><span class="p">(</span><span class="nx">responseBody</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">responseBodyString</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// {&#34;color&#34;:&#34;White&#34;,&#34;license&#34;:&#34;ABC123&#34;,&#34;numWheels&#34;:&#34;4&#34;,&#34;type&#34;:&#34;Car&#34;,</span>
</span></span><span class="line"><span class="cl"><span class="c1">// &#34;_id&#34;:&#34;6501480bb987ad03e8769e4}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>To check the resource on the server side you can click on the &ldquo;Check Endpoint Information&rdquo; button on the crudcrud.com page. A new REST resource named <code>vehicles</code> would have been created.</p>
<h2 id="get"><code>GET</code></h2>
<p>To fetch all <code>vehicles</code> resources created by the <code>POST</code> request we will perform a <code>GET</code> request on the same API endpoint.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span><span class="lnt">61
</span><span class="lnt">62
</span><span class="lnt">63
</span><span class="lnt">64
</span><span class="lnt">65
</span><span class="lnt">66
</span><span class="lnt">67
</span><span class="lnt">68
</span><span class="lnt">69
</span><span class="lnt">70
</span><span class="lnt">71
</span><span class="lnt">72
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;net/http&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;io/ioutil&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;encoding/json&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">Vehicle</span> <span class="kd">struct</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">Id</span>          <span class="kt">string</span> <span class="s">`json:&#34;_id&#34;`</span>
</span></span><span class="line"><span class="cl">	<span class="nx">Color</span>       <span class="kt">string</span>
</span></span><span class="line"><span class="cl">	<span class="nx">License</span>     <span class="kt">string</span>
</span></span><span class="line"><span class="cl">	<span class="nx">NumWheels</span>   <span class="kt">string</span>
</span></span><span class="line"><span class="cl">	<span class="nx">VehicleType</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Replace this with the API ID provided by crudcrud.com</span>
</span></span><span class="line"><span class="cl">	<span class="nx">apiID</span> <span class="o">:=</span> <span class="s">&#34;XXXXXX&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// HTTP endpoint with the path of the resource (vehicles)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fetchResourceURL</span> <span class="o">:=</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Sprintf</span><span class="p">(</span><span class="s">&#34;https://crudcrud.com/api/%s/vehicles&#34;</span><span class="p">,</span> 
</span></span><span class="line"><span class="cl">									<span class="nx">apiID</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Performing GET request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">response</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">http</span><span class="p">.</span><span class="nf">Get</span><span class="p">(</span><span class="nx">fetchResourceURL</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nb">panic</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nx">response</span><span class="p">.</span><span class="nx">Body</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Reading the response to the request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">responseBody</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">ReadAll</span><span class="p">(</span><span class="nx">response</span><span class="p">.</span><span class="nx">Body</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Error received in response:&#34;</span><span class="p">,</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Marshalling the response of API into a list of type Vehicle</span>
</span></span><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">vehicles</span> <span class="p">[]</span><span class="nx">Vehicle</span>
</span></span><span class="line"><span class="cl">	<span class="nx">json</span><span class="p">.</span><span class="nf">Unmarshal</span><span class="p">(</span><span class="nx">responseBody</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">vehicles</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	
</span></span><span class="line"><span class="cl">	<span class="k">for</span> <span class="nx">_</span><span class="p">,</span> <span class="nx">veh</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">vehicles</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Vehicle Resource ID:&#34;</span><span class="p">,</span> <span class="nx">veh</span><span class="p">.</span><span class="nx">Id</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Color:&#34;</span><span class="p">,</span> <span class="nx">veh</span><span class="p">.</span><span class="nx">Color</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;License:&#34;</span><span class="p">,</span> <span class="nx">veh</span><span class="p">.</span><span class="nx">License</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;NumWheels:&#34;</span><span class="p">,</span> <span class="nx">veh</span><span class="p">.</span><span class="nx">NumWheels</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Type:&#34;</span><span class="p">,</span> <span class="nx">veh</span><span class="p">.</span><span class="nx">VehicleType</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Vehicle Resource ID: 65014c0ab987ad03e8769e5c</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Color: Black</span>
</span></span><span class="line"><span class="cl"><span class="c1">// License: XYZ435</span>
</span></span><span class="line"><span class="cl"><span class="c1">// NumWheels: 4</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Type: Car</span>
</span></span><span class="line"><span class="cl"><span class="c1">//</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Vehicle Resource ID: 65014c1cb987ad03e8769e5d</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Color: White</span>
</span></span><span class="line"><span class="cl"><span class="c1">// License: ABC123</span>
</span></span><span class="line"><span class="cl"><span class="c1">// NumWheels: 4</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Type: Car</span>
</span></span><span class="line"><span class="cl"><span class="c1">//</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Vehicle Resource ID: 65014c59b987ad03e8769e5e</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Color: Red</span>
</span></span><span class="line"><span class="cl"><span class="c1">// License: IJK546</span>
</span></span><span class="line"><span class="cl"><span class="c1">// NumWheels: 2</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Type: Motorcycle</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>We can also fetch specific resources by specifying their <code>_id</code> in URI.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;net/http&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;io/ioutil&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;encoding/json&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">Vehicle</span> <span class="kd">struct</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">Id</span>          <span class="kt">string</span> <span class="s">`json:&#34;_id&#34;`</span>
</span></span><span class="line"><span class="cl">	<span class="nx">Color</span>       <span class="kt">string</span>
</span></span><span class="line"><span class="cl">	<span class="nx">License</span>     <span class="kt">string</span>
</span></span><span class="line"><span class="cl">	<span class="nx">NumWheels</span>   <span class="kt">string</span>
</span></span><span class="line"><span class="cl">	<span class="nx">VehicleType</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Replace this API ID with the one provided by crudcrud.com</span>
</span></span><span class="line"><span class="cl">	<span class="nx">apiID</span> <span class="o">:=</span> <span class="s">&#34;XXXXXX&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Replace this with the ID of the resource you want to fetch</span>
</span></span><span class="line"><span class="cl">	<span class="nx">vehicleResourceID</span> <span class="o">:=</span> <span class="s">&#34;65014c59b987ad03e8769e5e&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// HTTP endpoint with the path of the resource (vehicles)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fetchResourceURL</span> <span class="o">:=</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Sprintf</span><span class="p">(</span><span class="s">&#34;https://crudcrud.com/api/%s/vehicles/%s&#34;</span><span class="p">,</span>	
</span></span><span class="line"><span class="cl">							<span class="nx">apiID</span><span class="p">,</span> <span class="nx">vehicleResourceID</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Performing GET request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">response</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">http</span><span class="p">.</span><span class="nf">Get</span><span class="p">(</span><span class="nx">fetchResourceURL</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nb">panic</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nx">response</span><span class="p">.</span><span class="nx">Body</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Reading the response to the request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">responseBody</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">ReadAll</span><span class="p">(</span><span class="nx">response</span><span class="p">.</span><span class="nx">Body</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Error received in response:&#34;</span><span class="p">,</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Unmarshalling the response of API into a list of type Vehicle</span>
</span></span><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">veh</span> <span class="nx">Vehicle</span>
</span></span><span class="line"><span class="cl">	<span class="nx">json</span><span class="p">.</span><span class="nf">Unmarshal</span><span class="p">(</span><span class="nx">responseBody</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">veh</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Vehicle Resource ID:&#34;</span><span class="p">,</span> <span class="nx">veh</span><span class="p">.</span><span class="nx">Id</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Color:&#34;</span><span class="p">,</span> <span class="nx">veh</span><span class="p">.</span><span class="nx">Color</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;License:&#34;</span><span class="p">,</span> <span class="nx">veh</span><span class="p">.</span><span class="nx">License</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;NumWheels:&#34;</span><span class="p">,</span> <span class="nx">veh</span><span class="p">.</span><span class="nx">NumWheels</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Type:&#34;</span><span class="p">,</span> <span class="nx">veh</span><span class="p">.</span><span class="nx">VehicleType</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Vehicle Resource ID: 65014c59b987ad03e8769e5e</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Color: Red</span>
</span></span><span class="line"><span class="cl"><span class="c1">// License: IJK546</span>
</span></span><span class="line"><span class="cl"><span class="c1">// NumWheels: 2</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Type: Motorcycle</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="put"><code>PUT</code></h2>
<p>To update a resource we perform a <code>PUT</code> request.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span><span class="lnt">61
</span><span class="lnt">62
</span><span class="lnt">63
</span><span class="lnt">64
</span><span class="lnt">65
</span><span class="lnt">66
</span><span class="lnt">67
</span><span class="lnt">68
</span><span class="lnt">69
</span><span class="lnt">70
</span><span class="lnt">71
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;net/http&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;encoding/json&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;bytes&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;io/ioutil&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Replace this API ID with the one provided by crudcrud.com</span>
</span></span><span class="line"><span class="cl">	<span class="nx">apiID</span> <span class="o">:=</span> <span class="s">&#34;XXXXXX&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">vehicleResourceID</span> <span class="o">:=</span> <span class="s">&#34;65014c0ab987ad03e8769e5c&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// HTTP endpoint with path (vehicle) of the resource</span>
</span></span><span class="line"><span class="cl">	<span class="nx">updateResourceURL</span> <span class="o">:=</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Sprintf</span><span class="p">(</span><span class="s">&#34;https://crudcrud.com/api/%s/vehicles/%s&#34;</span><span class="p">,</span>	
</span></span><span class="line"><span class="cl">							<span class="nx">apiID</span><span class="p">,</span> <span class="nx">vehicleResourceID</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// JSON payload as bytes</span>
</span></span><span class="line"><span class="cl">	<span class="nx">requestBody</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">json</span><span class="p">.</span><span class="nf">Marshal</span><span class="p">(</span><span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">string</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="s">&#34;color&#34;</span><span class="p">:</span> <span class="s">&#34;Black&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">		<span class="s">&#34;license&#34;</span><span class="p">:</span> <span class="s">&#34;XYZ435&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">		<span class="s">&#34;numWheels&#34;</span><span class="p">:</span> <span class="s">&#34;2&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">		<span class="s">&#34;vehicleType&#34;</span><span class="p">:</span> <span class="s">&#34;Motorcycle&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">	<span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Converting request body into bytes buffer</span>
</span></span><span class="line"><span class="cl">	<span class="nx">requestBodyBytes</span> <span class="o">:=</span> <span class="nx">bytes</span><span class="p">.</span><span class="nf">NewBuffer</span><span class="p">(</span><span class="nx">requestBody</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Creating a PUT request on updateResourceURL</span>
</span></span><span class="line"><span class="cl">	<span class="nx">request</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">http</span><span class="p">.</span><span class="nf">NewRequest</span><span class="p">(</span><span class="s">&#34;PUT&#34;</span><span class="p">,</span> <span class="nx">updateResourceURL</span><span class="p">,</span> <span class="nx">requestBodyBytes</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nb">panic</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Adding application/json as payload type </span>
</span></span><span class="line"><span class="cl">	<span class="nx">request</span><span class="p">.</span><span class="nx">Header</span><span class="p">.</span><span class="nf">Add</span><span class="p">(</span><span class="s">&#34;Content-Type&#34;</span><span class="p">,</span> <span class="s">&#34;application/json&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">client</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">http</span><span class="p">.</span><span class="nx">Client</span><span class="p">{}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Performing PUT request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">response</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">client</span><span class="p">.</span><span class="nf">Do</span><span class="p">(</span><span class="nx">request</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nb">panic</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nx">response</span><span class="p">.</span><span class="nx">Body</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Verifying changes by fetching the details of the resource</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Performing GET request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">responseGet</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">http</span><span class="p">.</span><span class="nf">Get</span><span class="p">(</span><span class="nx">updateResourceURL</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nb">panic</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nx">responseGet</span><span class="p">.</span><span class="nx">Body</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Reading the response to the request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">responseBody</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">ReadAll</span><span class="p">(</span><span class="nx">responseGet</span><span class="p">.</span><span class="nx">Body</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Error received in response:&#34;</span><span class="p">,</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Updated Resource:&#34;</span><span class="p">,</span><span class="nb">string</span><span class="p">(</span><span class="nx">responseBody</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Updated Resource: {&#34;_id&#34;:&#34;65014c0ab987ad03e8769e5c&#34;,&#34;color&#34;:&#34;Black&#34;,</span>
</span></span><span class="line"><span class="cl"><span class="c1">// &#34;license&#34;:&#34;XYZ435&#34;,&#34;numWheels&#34;:&#34;2&#34;,&#34;vehicleType&#34;:&#34;Motorcycle&#34;}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="delete"><code>DELETE</code></h2>
<p>The <code>DELETE</code> verb is used for resource deletion requests.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;net/http&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="s">&#34;io/ioutil&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Replace this API ID with the one provided by crudcrud.com</span>
</span></span><span class="line"><span class="cl">	<span class="nx">apiID</span> <span class="o">:=</span> <span class="s">&#34;XXXXXX&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">vehicleResourceID</span> <span class="o">:=</span> <span class="s">&#34;65014c0ab987ad03e8769e5c&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// HTTP endpoint with path (vehicle) of the resource</span>
</span></span><span class="line"><span class="cl">	<span class="nx">deleteResourceURL</span> <span class="o">:=</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Sprintf</span><span class="p">(</span><span class="s">&#34;https://crudcrud.com/api/%s/vehicles/%s&#34;</span><span class="p">,</span> 
</span></span><span class="line"><span class="cl">							<span class="nx">apiID</span><span class="p">,</span> <span class="nx">vehicleResourceID</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Creating a DELETE request on deleteResourceURL</span>
</span></span><span class="line"><span class="cl">	<span class="nx">request</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">http</span><span class="p">.</span><span class="nf">NewRequest</span><span class="p">(</span><span class="s">&#34;DELETE&#34;</span><span class="p">,</span> <span class="nx">deleteResourceURL</span><span class="p">,</span> <span class="kc">nil</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nb">panic</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Adding application/json as payload type </span>
</span></span><span class="line"><span class="cl">	<span class="nx">request</span><span class="p">.</span><span class="nx">Header</span><span class="p">.</span><span class="nf">Add</span><span class="p">(</span><span class="s">&#34;Content-Type&#34;</span><span class="p">,</span> <span class="s">&#34;application/json&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">client</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">http</span><span class="p">.</span><span class="nx">Client</span><span class="p">{}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Performing DELETE request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">response</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">client</span><span class="p">.</span><span class="nf">Do</span><span class="p">(</span><span class="nx">request</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nb">panic</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nx">response</span><span class="p">.</span><span class="nx">Body</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Performing GET request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">responseGet</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">http</span><span class="p">.</span><span class="nf">Get</span><span class="p">(</span><span class="nx">deleteResourceURL</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nb">panic</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nx">responseGet</span><span class="p">.</span><span class="nx">Body</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Reading the response to the request</span>
</span></span><span class="line"><span class="cl">	<span class="nx">responseBody</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">ReadAll</span><span class="p">(</span><span class="nx">responseGet</span><span class="p">.</span><span class="nx">Body</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Error received in response:&#34;</span><span class="p">,</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Deleted Resource:&#34;</span><span class="p">,</span><span class="nb">string</span><span class="p">(</span><span class="nx">responseBody</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Deleted Resource: {&#34;type&#34;:&#34;https://tools.ietf.org/html/rfc7231#section-6.5.4&#34;,</span>
</span></span><span class="line"><span class="cl"><span class="c1">// &#34;title&#34;:&#34;Not Found&#34;,&#34;status&#34;:404,&#34;traceId&#34;:&#34;0HMTFDGO4V3QF:00000001&#34;}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<p>Thank you for taking the time to read this blog post! Have questions, feedback or want to discuss this topic? Feel free to reach out at <a href="mailto:blog@avni.sh"><a href="mailto:blog@avni.sh">blog@avni.sh</a></a>.</p>
<p>If you found this content valuable and would like to stay updated with my latest posts, consider subscribing to my <a href="https://www.avni.sh/index.xml" target="_blank">RSS Feed</a>.</p>
<h1 id="resources">Resources</h1>
<p><a href="https://restfulapi.net/" target="_blank">REST API Tutorial</a><br>
<a href="https://www.codecademy.com/article/what-is-rest" target="_blank">What is REST?</a><br>
<a href="https://restfulapi.net/rest-architectural-constraints/" target="_blank">REST Architectural Constraints</a><br>
<a href="https://pkg.go.dev/net/http" target="_blank"><code>net/http</code> Go Package</a><br>
<a href="https://pkg.go.dev/net/http#pkg-constants" target="_blank">HTTP Verbs in <code>net/http</code> package</a></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
