<?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: Akshay Chauhan</title>
    <description>The latest articles on DEV Community by Akshay Chauhan (@akshay_chauhan).</description>
    <link>https://dev.to/akshay_chauhan</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%2F2860669%2Fa53df39d-894a-4cb3-9c76-01976853981e.png</url>
      <title>DEV Community: Akshay Chauhan</title>
      <link>https://dev.to/akshay_chauhan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akshay_chauhan"/>
    <language>en</language>
    <item>
      <title>MVC Architecture</title>
      <dc:creator>Akshay Chauhan</dc:creator>
      <pubDate>Fri, 28 Feb 2025 12:38:55 +0000</pubDate>
      <link>https://dev.to/akshay_chauhan/mvc-architecture-5hf4</link>
      <guid>https://dev.to/akshay_chauhan/mvc-architecture-5hf4</guid>
      <description>&lt;p&gt;When it comes to building robust and maintainable applications, the &lt;strong&gt;Model-View-Controller (MVC)&lt;/strong&gt; architecture is one of the most widely used design patterns. It’s a blueprint that helps developers organize code in a way that separates concerns, making applications easier to manage and scale. To better understand how MVC works, let’s dive into its three core components—Model, View, and Controller—using the analogy of a restaurant. Imagine the MVC pattern as a restaurant where the &lt;strong&gt;Model&lt;/strong&gt; is the kitchen staff, the &lt;strong&gt;View&lt;/strong&gt; is the dining area, and the &lt;strong&gt;Controller&lt;/strong&gt; is the waiter. Together, they ensure a seamless dining experience—or in the case of software, a smooth user experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F46uhknusug7rla632jin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F46uhknusug7rla632jin.png" alt="Image description" width="800" height="670"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;1. The Model: The Kitchen Staff&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Model&lt;/strong&gt; is the backbone of the application. It represents the data and the business logic—the rules that govern how data is created, stored, and manipulated. Think of the Model as the kitchen staff in a restaurant. They are responsible for preparing the meals (data) based on the orders (requests) they receive. The kitchen staff doesn’t interact directly with the customers (users), but they ensure that the food is cooked to perfection and delivered on time.&lt;/p&gt;

&lt;p&gt;In technical terms, the Model handles database interactions, data validation, and any calculations or transformations required by the application. For example, if a user submits a form to create an account, the Model will validate the input, save the data to the database, and ensure everything is stored correctly. Importantly, the Model operates independently of the View and Controller. It doesn’t care how the data is displayed or how the user interacts with it—it just focuses on managing the data.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;2. The View: The Dining Area&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;View&lt;/strong&gt; is what the user sees and interacts with. It’s the presentation layer of the application, responsible for displaying data in a user-friendly format. In our restaurant analogy, the View is the dining area where customers enjoy their meals. The customers (users) don’t see the kitchen (Model) or the behind-the-scenes work—they only see the final product (the meal) presented to them.&lt;/p&gt;

&lt;p&gt;In software terms, the View takes data from the Model and renders it into a webpage, mobile app screen, or any other user interface. For instance, if a user requests a list of products, the View will display that list in a visually appealing way. The View doesn’t manipulate the data—it simply presents it. However, it can send user inputs (like button clicks or form submissions) back to the Controller for processing.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;3. The Controller: The Waiter&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Controller&lt;/strong&gt; acts as the intermediary between the Model and the View. It’s like the waiter in a restaurant who takes orders from the customers, communicates them to the kitchen, and then delivers the prepared meals back to the customers. Without the waiter, there would be no connection between the dining area and the kitchen.&lt;/p&gt;

&lt;p&gt;In an application, the Controller handles user input, processes requests, and updates the Model or View accordingly. For example, if a user submits a search query, the Controller receives the request, fetches the relevant data from the Model, and then passes that data to the View for display. The Controller ensures that the Model and View remain decoupled, meaning they don’t directly interact with each other. This separation of concerns is what makes MVC such a powerful and flexible design pattern.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why MVC Matters&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The MVC architecture is more than just a way to organize code—it’s a philosophy that promotes clean, maintainable, and scalable applications. By separating the application into three distinct components, developers can work on individual parts without affecting the others. For example, you can update the user interface (View) without touching the business logic (Model), or change the data storage system (Model) without disrupting the user experience (View).&lt;/p&gt;

&lt;p&gt;Here’s a quick summary of the key benefits of MVC:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Separation of Concerns:&lt;/strong&gt; Each component has a specific role, making the code easier to manage and debug.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reusability:&lt;/strong&gt; Models and Views can often be reused across different parts of the application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; MVC makes it easier to add new features or modify 
existing ones without breaking the entire system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration:&lt;/strong&gt; Developers, designers, and database administrators can work on different parts of the application simultaneously.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media2.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%2Frj37tirditinwonnroyt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Frj37tirditinwonnroyt.png" alt="Image description" width="558" height="1345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The MVC architecture is a timeless design pattern that has stood the test of time. Whether you’re building a simple website or a complex enterprise application, understanding and implementing MVC can save you countless hours of frustration. By separating your application into Models, Views, and Controllers, you create a structure that is not only easy to maintain but also adaptable to future changes.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What is CORS? : Explained</title>
      <dc:creator>Akshay Chauhan</dc:creator>
      <pubDate>Mon, 17 Feb 2025 06:10:57 +0000</pubDate>
      <link>https://dev.to/akshay_chauhan/what-is-cors-explained-8f1</link>
      <guid>https://dev.to/akshay_chauhan/what-is-cors-explained-8f1</guid>
      <description>&lt;h2&gt;
  
  
  Understanding CORS: A Complete Guide
&lt;/h2&gt;

&lt;p&gt;If you've ever built a web application that fetches data from another domain and encountered a CORS error, you're not alone! This guide will break down CORS, why it exists, how it works, and how to fix common CORS issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is CORS?
&lt;/h2&gt;

&lt;p&gt;CORS (Cross-Origin Resource Sharing) is a security feature implemented by web browsers to restrict how resources are requested from different origins (domains, protocols, or ports). It prevents malicious websites from making unauthorized requests to a different domain on behalf of the user.&lt;/p&gt;

&lt;p&gt;For example, if your frontend is hosted on &lt;a href="https://myfrontend.com" rel="noopener noreferrer"&gt;https://myfrontend.com&lt;/a&gt; and tries to fetch data from &lt;a href="https://api.mybackend.com" rel="noopener noreferrer"&gt;https://api.mybackend.com&lt;/a&gt;, the browser blocks the request unless the backend explicitly allows it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How CORS Works
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fnniurma0gf6zg3ydgvq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fnniurma0gf6zg3ydgvq0.png" alt="Image description" width="800" height="379"&gt;&lt;/a&gt;&lt;br&gt;
To better understand how CORS works, it's helpful to look at a diagram. Consider a web page hosted on Domain A that wants to request data from a server hosted on Domain B.&lt;/p&gt;

&lt;p&gt;When Domain A makes an HTTP request, the browser asks the server on Domain B if it can send the request from Domain A. This confirmation request is called a Preflight request.&lt;/p&gt;

&lt;p&gt;The server on Domain B confirms whether it accepts requests from Domain A or not through CORS Headers (e.g. Access-Control-Allow-Origin, Allow-Control-Allow-Method, etc). Once the preflight request is successful, the browser makes the request to Domain B.&lt;/p&gt;

&lt;p&gt;Let's say in another scenario the server on Domain B didn't allow any requests from Domain A. In that case, the browser blocks the request and returns an error. Hence Domain A is unable to access the said resource from the server on Domain B. That's precisely what CORS is.&lt;/p&gt;
&lt;h2&gt;
  
  
  History of CORS
&lt;/h2&gt;

&lt;p&gt;Before CORS, web security relied on the Same-Origin Policy (SOP), introduced in the 1990s to prevent unauthorized access between different domains. The Same-Origin Policy restricted JavaScript from making requests to a domain different from the one that loaded the script.&lt;/p&gt;

&lt;p&gt;The restriction protected user data, but also limited functionality, making it difficult for web applications to interact with APIs from different domains.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Was CORS Introduced?
&lt;/h2&gt;

&lt;p&gt;As web applications became more dynamic and started integrating with third-party services (like APIs, cloud storage, and payment gateways), the Same-Origin Policy became too restrictive.&lt;/p&gt;

&lt;p&gt;To allow safe cross-origin requests while maintaining security, browsers introduced CORS (Cross-Origin Resource Sharing) in the late 2000s.&lt;/p&gt;

&lt;p&gt;CORS provides a way for servers to explicitly allow or deny requests from other domains using HTTP headers.&lt;/p&gt;
&lt;h2&gt;
  
  
  Major Security Incidents Before CORS
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Cross-Site Request Forgery (CSRF) Attacks
&lt;/h3&gt;

&lt;p&gt;Before CORS, attackers exploited CSRF vulnerabilities to trick users into performing unwanted actions on other websites where they were logged in.&lt;/p&gt;

&lt;p&gt;🔴 Example: A Banking CSRF Attack&lt;/p&gt;

&lt;p&gt;1️⃣ A user logs into their banking website (bank.com).&lt;br&gt;
2️⃣ The user visits a malicious website (evil.com) in another tab.&lt;br&gt;
3️⃣ The malicious website automatically sends a request to bank.com to transfer money, using the user's active session.&lt;br&gt;
4️⃣ The banking website executes the request because it thinks the request is from the user (since the browser includes session cookies automatically).&lt;br&gt;
5️⃣ Money is transferred without the user's knowledge!&lt;/p&gt;

&lt;p&gt;🚨 Impact: Millions of dollars have been stolen using CSRF attacks on banking websites before proper security measures like CORS and CSRF tokens were widely implemented.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Data Theft via JSON Hijacking
&lt;/h3&gt;

&lt;p&gt;Many websites used JSON data formats to transfer sensitive information. Before CORS, attackers could use malicious JavaScript to steal private JSON data.&lt;/p&gt;

&lt;p&gt;🔴 Example: A JSON Hijacking Attack on a Shopping Website&lt;/p&gt;

&lt;p&gt;1️⃣ The victim logs into shopping.com.&lt;br&gt;
2️⃣ The attacker tricks the victim into visiting evil.com.&lt;br&gt;
3️⃣ evil.com runs a malicious script that fetches order history from shopping.com.&lt;br&gt;
4️⃣ Since browsers automatically attach authentication cookies, the request is successful.&lt;br&gt;
5️⃣ The hacker now has access to the victim's shopping history and personal details.&lt;/p&gt;

&lt;p&gt;🚨 Impact: Before CORS, many websites leaked sensitive user data because they did not restrict who could request their JSON APIs.&lt;/p&gt;
&lt;h2&gt;
  
  
  How CORS Works (With a Simple Analogy)
&lt;/h2&gt;

&lt;p&gt;Think of a CORS request like trying to enter a restricted area:&lt;/p&gt;

&lt;p&gt;1️⃣ You (frontend) want to visit a restricted building (backend API).&lt;br&gt;
2️⃣ Security (browser) stops you and asks if you have permission.&lt;br&gt;
3️⃣ The building manager (server) checks their records and says:&lt;/p&gt;

&lt;p&gt;✅ "You're allowed!" → You enter.&lt;br&gt;
❌ "You're NOT allowed!" → You're blocked.&lt;/p&gt;

&lt;p&gt;This "permission" is handled using CORS headers in HTTP responses.&lt;/p&gt;

&lt;p&gt;When a browser makes a cross-origin request, the server must include special headers in its response to allow the request.&lt;/p&gt;
&lt;h2&gt;
  
  
  Key CORS Headers and What They Do
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Header&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Access-Control-Allow-Origin&lt;/td&gt;
&lt;td&gt;Defines which domains can access the resource&lt;/td&gt;
&lt;td&gt;Access-Control-Allow-Origin: * (Allows all)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access-Control-Allow-Methods&lt;/td&gt;
&lt;td&gt;Specifies allowed HTTP methods&lt;/td&gt;
&lt;td&gt;Access-Control-Allow-Methods: GET, POST, PUT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access-Control-Allow-Headers&lt;/td&gt;
&lt;td&gt;Lists allowed custom headers&lt;/td&gt;
&lt;td&gt;Access-Control-Allow-Headers: Content-Type, Authorization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access-Control-Max-Age&lt;/td&gt;
&lt;td&gt;Caches preflight response (reduces requests)&lt;/td&gt;
&lt;td&gt;Access-Control-Max-Age: 86400 (24 hours)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Understanding Preflight Requests
&lt;/h2&gt;

&lt;p&gt;Some CORS requests require an extra step called a preflight request.&lt;/p&gt;
&lt;h3&gt;
  
  
  When is a Preflight Request Sent?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;If the request uses HTTP methods other than GET or POST (like PUT, DELETE).&lt;/li&gt;
&lt;li&gt;If custom headers (e.g., Authorization) are included.&lt;/li&gt;
&lt;li&gt;If sending non-simple content types (e.g., application/json).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  How Preflight Works (Step by Step)
&lt;/h3&gt;

&lt;p&gt;1️⃣ The browser first sends an OPTIONS request to check if CORS is allowed.&lt;br&gt;
2️⃣ The server responds with CORS headers (if allowed).&lt;br&gt;
3️⃣ If permitted, the browser sends the actual request.&lt;/p&gt;

&lt;p&gt;Example Preflight Request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OPTIONS /data HTTP/1.1
Origin: https://frontend.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example Server Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://frontend.com
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Content-Type
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Fix CORS Errors
&lt;/h2&gt;

&lt;p&gt;✅ Solution: Add CORS Headers to the Server&lt;/p&gt;

&lt;p&gt;Example: Fixing CORS in a Node.js Server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cors&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://myfrontend.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Allow only specific origin&lt;/span&gt;
    &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PUT&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DELETE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Server running on port 3000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;CORS is not just a technical headache — it's a vital security measure that prevents hackers from misusing your web applications. While it may seem annoying when developing web apps, proper CORS implementation ensures user safety and data protection.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Tags: #webdev #security #javascript #programming #cors&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Mastering GET and POST in APIs: Route Params VS Query Params</title>
      <dc:creator>Akshay Chauhan</dc:creator>
      <pubDate>Fri, 14 Feb 2025 03:04:02 +0000</pubDate>
      <link>https://dev.to/akshay_chauhan/mastering-get-and-post-in-apis-route-params-vs-query-params-8m6</link>
      <guid>https://dev.to/akshay_chauhan/mastering-get-and-post-in-apis-route-params-vs-query-params-8m6</guid>
      <description>&lt;p&gt;Understanding the differences between GET and POST methods, along with the proper use of query parameters (&lt;code&gt;req.query&lt;/code&gt;) and route parameters (&lt;code&gt;req.params&lt;/code&gt;), is crucial for bET vs. POST: The Core Differences&lt;/p&gt;

&lt;h3&gt;
  
  
  GET Method
&lt;/h3&gt;

&lt;p&gt;GET requests are used to retrieve data from the server. They're like asking a question - you're not changing anything, just requesting information.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Client Request:&lt;/span&gt;
&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/users?id=123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Server:&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Access query params&lt;/span&gt;
&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`User data for ID: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data is passed through the URL as query parameters&lt;/li&gt;
&lt;li&gt;Idempotent - multiple identical requests won't change server state&lt;/li&gt;
&lt;li&gt;Perfect for data retrieval operations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  POST Method
&lt;/h3&gt;

&lt;p&gt;POST requests are used when you want to send data to create or update resources on the server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Client Request:&lt;/span&gt;
&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Server:&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Access POST body&lt;/span&gt;
&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`User &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; created, age: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Understanding Route Parameters (req.params)
&lt;/h2&gt;

&lt;p&gt;Route parameters are part of the URL path and are perfect for identifying specific resources. They're defined using colons (&lt;code&gt;:&lt;/code&gt;) in the route definition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Route definition:&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/user/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Extract ID from route&lt;/span&gt;
&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`User ID: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Client Request:&lt;/span&gt;
&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/user/123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, &lt;code&gt;123&lt;/code&gt; becomes the &lt;code&gt;id&lt;/code&gt; parameter - making it ideal for required resource identifiers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working with Query Parameters (req.query)
&lt;/h2&gt;

&lt;p&gt;Query parameters come after the &lt;code&gt;?&lt;/code&gt; in a URL and are perfect for optional data or filtering.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Route definition:&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;rate_limit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Extract query params&lt;/span&gt;
&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Rate Limit: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;rate_limit&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, Page: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Client Request:&lt;/span&gt;
&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/users?rate_limit=50&amp;amp;page=2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Combining Both Approaches
&lt;/h2&gt;

&lt;p&gt;You can use both route and query parameters together for more specific requests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Route definition:&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/user/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Route param&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;details&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Query param&lt;/span&gt;
&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`User ID: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, Details: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;details&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Client Request:&lt;/span&gt;
&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/user/123?details=full&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick Reference Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Route Parameters (&lt;code&gt;req.params&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Query Parameters (&lt;code&gt;req.query&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Purpose&lt;/td&gt;
&lt;td&gt;Identify specific resources&lt;/td&gt;
&lt;td&gt;Provide additional information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Location&lt;/td&gt;
&lt;td&gt;Defined in URL path&lt;/td&gt;
&lt;td&gt;Appended after &lt;code&gt;?&lt;/code&gt; in URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Required?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/user/:id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/users?rate_limit=50&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Use route parameters (&lt;code&gt;req.params&lt;/code&gt;) for:&lt;/li&gt;
&lt;li&gt;Mandatory resource identifiers&lt;/li&gt;
&lt;li&gt;User IDs&lt;/li&gt;
&lt;li&gt;Product IDs&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Essential path components&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use query parameters (&lt;code&gt;req.query&lt;/code&gt;) for:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optional filters&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pagination&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sorting preferences&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Additional options&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Always document your endpoints thoroughly&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Include example requests&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;List all possible parameters&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Explain parameter constraints&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Understanding when to use route parameters versus query parameters is crucial for creating intuitive and maintainable APIs. Route parameters excel at resource identification, while query parameters offer flexibility in data retrieval. Together, they create a powerful toolkit for API design.uilding effective RESTful APIs. Let's break down these concepts with practical examples!&lt;/p&gt;

</description>
      <category>backenddevelopment</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
