<?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>Forem: Farhat Sharif</title>
    <description>The latest articles on Forem by Farhat Sharif (@farhatsharifh).</description>
    <link>https://forem.com/farhatsharifh</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%2F466418%2Fe7bfbcc8-1e02-4b0c-b617-d71c9171df0f.png</url>
      <title>Forem: Farhat Sharif</title>
      <link>https://forem.com/farhatsharifh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/farhatsharifh"/>
    <language>en</language>
    <item>
      <title>State Management in Software Development</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Wed, 05 Feb 2025 17:38:40 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/state-management-in-software-development-4cli</link>
      <guid>https://forem.com/farhatsharifh/state-management-in-software-development-4cli</guid>
      <description>&lt;p&gt;&lt;strong&gt;State management&lt;/strong&gt; is the process of handling and maintaining the state (data) of an application across different components, user interactions, and system updates. State management ensures consistency, efficiency, and synchronization across the app. It is crucial in complex applications where multiple parts need to access and modify shared data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of State in an Application
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Local State&lt;/strong&gt; (UI Component State)&lt;/p&gt;

&lt;p&gt;Stored within a single component and affects only that component.&lt;/p&gt;

&lt;h6&gt;
  
  
  Examples:
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;Show and hide states of an element on a toggle button.&lt;/li&gt;
&lt;li&gt;Form input:

&lt;ul&gt;
&lt;li&gt;Title and content input given by a user on a "Create Post" page.&lt;/li&gt;
&lt;li&gt;The search term a user types in the search bar.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Global State&lt;/strong&gt; (Application-Wide State)&lt;/p&gt;

&lt;p&gt;Shared across multiple components or pages.&lt;/p&gt;

&lt;h6&gt;
  
  
  Examples:
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;A logged-in user's authentication state across different components or pages.&lt;/li&gt;
&lt;li&gt;Cart items in an e-commerce app stored globally for access across components or pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Server State&lt;/strong&gt; (Remote Data)&lt;/p&gt;

&lt;p&gt;Data fetched from external sources like databases or APIs.&lt;/p&gt;

&lt;h6&gt;
  
  
  Examples:
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;User details fetched from an API on page load.&lt;/li&gt;
&lt;li&gt;A blog list retrieved from database to display on the homepage.&lt;/li&gt;
&lt;li&gt;Data stored in sessions on the server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. URL State&lt;/strong&gt; (Routing &amp;amp; Navigation)&lt;/p&gt;

&lt;p&gt;URL state is maintained in URL parameters and query strings. It reflects the current state of an application, directly in the browser's address bar. URL state can be used to influence the behavior or content of the page.&lt;/p&gt;

&lt;h6&gt;
  
  
  Examples:
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A search term in query string &lt;code&gt;example.com/products?search=laptop&lt;/code&gt;&lt;br&gt;(Displays products related to the search term "laptop")&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Product Filtering: &lt;code&gt;example.com/products?category=cameras&amp;amp;price_range=5000-15000&lt;/code&gt;&lt;br&gt;(Filters products by category and price range)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Current page number in pagination: &lt;code&gt;example.com/posts?page=2&lt;/code&gt;&lt;br&gt;(Displays the second page of posts)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Specific product ID in route parameters: &lt;code&gt;example.com/laptops/S239&lt;/code&gt;&lt;br&gt;(Displays details for the product with ID S239)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Approaches to State Management
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Manual State Management&lt;/strong&gt;&lt;br&gt;
Using variables and functions within the application to track changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State Management Libraries&lt;/strong&gt;&lt;br&gt;
Tools that provide a structured way to manage state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend State Management&lt;/strong&gt;&lt;br&gt;
Involves databases and caching mechanisms to maintain application state on the server.&lt;br&gt;
Helps persist state across sessions and users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Is State Management Important?
&lt;/h2&gt;

&lt;p&gt;Well-structured state offers: &lt;br&gt;
&lt;strong&gt;Consistency:&lt;/strong&gt; Ensures different parts of the app use the same data.&lt;br&gt;
&lt;strong&gt;Improved Performance:&lt;/strong&gt; Updates only what’s needed while avoiding unnecessary re-renders or refreshes.&lt;br&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; Makes it easier to add new features without breaking existing logic.&lt;br&gt;
&lt;strong&gt;Easier Debugging:&lt;/strong&gt; Easier to track and fix issues.&lt;br&gt;
&lt;strong&gt;Better Maintainability:&lt;/strong&gt; Makes future modifications and feature additions simpler.&lt;/p&gt;

</description>
      <category>statemanagement</category>
      <category>learning</category>
      <category>development</category>
      <category>data</category>
    </item>
    <item>
      <title>Collaborate using Pull Requests</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Thu, 26 Sep 2024 22:56:22 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/collaborate-using-pull-requests-5c2o</link>
      <guid>https://forem.com/farhatsharifh/collaborate-using-pull-requests-5c2o</guid>
      <description>&lt;p&gt;You’ve finished working on a feature/bugfix and want to &lt;br&gt;
     ✦ Merge it into the main branch&lt;br&gt;
     ✦ Notify the team members &lt;br&gt;
     ✦ Get it reviewed by someone in the team&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pull Requests (PRs)&lt;/strong&gt; are exactly what you need. They allow you to propose changes to a repository and invite others to review, discuss, and approve them before merging.&lt;/p&gt;

&lt;p&gt;Here’s how a pull request works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Push the changes from your local branch to a remote branch.&lt;/li&gt;
&lt;li&gt;Open a PR from your branch (source) to the main branch (destination).&lt;/li&gt;
&lt;li&gt;Team member (who is responsible for maintaining the project)  reviews, suggests changes, or approves it.&lt;/li&gt;
&lt;li&gt;Once approved, the reviewer/project maintainer merges the PR into main branch.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;GitHub, Bitbucket, and other version control platforms provide user-friendly interfaces that make creating a PR easy and just a few clicks away. Simply click a button to start a new PR, select the source and destination branches, give your PR a title, add a description, and click the 'Create PR' button—it's that simple! 🎉&lt;/p&gt;

&lt;p&gt;Your reviewer can leave comments and suggestions in the PR, and you'll receive notifications. You can then review the requested changes and update your code accordingly. Once the PR meets all requirements, the reviewer will merge it into the main branch. 🙌 &lt;/p&gt;

</description>
      <category>git</category>
      <category>beginners</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>From Changes to Safe Keeping: Git Stash</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Wed, 25 Sep 2024 22:16:47 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/from-changes-to-safe-keeping-git-stash-m42</link>
      <guid>https://forem.com/farhatsharifh/from-changes-to-safe-keeping-git-stash-m42</guid>
      <description>&lt;p&gt;✦ You’re working on a feature but need to switch branches without losing your work.&lt;br&gt;
✦ You want to save your unfinished work temporarily to a separate place without committing it to your feature branch.&lt;/p&gt;

&lt;p&gt;That’s where git stash helps! It lets you store your current changes  and gives you a clean working directory, so you can switch tasks without losing any progress.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Stash changes:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git stash&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Saves your local changes to a separate place and reverts your working directory to the last commit, allowing you to switch branches or work on something else.&lt;br&gt;
&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git stash push -m "stash message"&lt;/code&gt;&lt;br&gt;
Store changes with message. Add a descriptive message so you can identify the work stored in the stash easily. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. List saved stashes:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git stash list&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Shows you a list of saved stashes which you can utilize again.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. View Stashed Changes:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git stash show stash@{n}&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; View the changes stored in a specific stash. Stash are referenced by numbers. e.g. stash@{1}&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Apply a specific stash:
&lt;/h3&gt;

&lt;p&gt;To restore stashed changes you have two options:&lt;br&gt;
&lt;strong&gt;a).&lt;/strong&gt; &lt;br&gt;
&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git stash apply stash@{n}&lt;/code&gt; &lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Apply the changes and leave a copy in the stash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;b).&lt;/strong&gt; &lt;br&gt;
&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git stash pop stash@{n}&lt;/code&gt; &lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Apply the changes and delete these changes from the stash.&lt;/p&gt;

&lt;p&gt;If you don't use stash reference, you are working with the latest stash:&lt;br&gt;
&lt;code&gt;git stash apply&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git stash pop&lt;/code&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
With &lt;code&gt;git stash&lt;/code&gt;, you can save, view, and restore changes whenever needed. Perfect for switching tasks!&lt;/p&gt;

</description>
      <category>git</category>
      <category>beginners</category>
      <category>opensource</category>
      <category>github</category>
    </item>
    <item>
      <title>From Remote to Local: Git Clone</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Tue, 24 Sep 2024 20:34:16 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/from-remote-to-local-git-clone-9no</link>
      <guid>https://forem.com/farhatsharifh/from-remote-to-local-git-clone-9no</guid>
      <description>&lt;p&gt;✦ You've just joined a project and need a local copy of the entire codebase to start contributing. The project is hosted remotely, such as on GitHub, and you want to bring it onto your machine.&lt;br&gt;
✦ You’re starting fresh on a new computer and need to grab the project code again which is hosted on Github.&lt;/p&gt;

&lt;p&gt;That’s where the git clone command comes into play! It allows you to copy an entire remote repository onto your local machine, so you can start working on it.&lt;br&gt;
Here’s how to clone a repository:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git clone &amp;lt;remote_repository_url&amp;gt;&lt;/code&gt;&lt;br&gt;
e.g. It will look like: &lt;code&gt;git clone https://github.com/user/example-repository&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Creates a local copy of the remote repository on your machine.&lt;/p&gt;

&lt;p&gt;Once cloned, you have a complete copy of the project with all its branches, commits, and files. Now you can start working in your own local environment, and push your changes later.&lt;/p&gt;

</description>
      <category>github</category>
      <category>beginners</category>
      <category>learning</category>
      <category>git</category>
    </item>
    <item>
      <title>Keep Your Code in Sync: Git Pull</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Sun, 22 Sep 2024 06:35:12 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/keep-your-code-in-sync-3abl</link>
      <guid>https://forem.com/farhatsharifh/keep-your-code-in-sync-3abl</guid>
      <description>&lt;p&gt;✦ You’re working in collaboration and you need to make sure your local copy is up-to-date with what’s happening in the remote repository. e.g. Someone in the team has made updates to the main branch that you need to integrate before continuing your work. That’s where the &lt;code&gt;git pull&lt;/code&gt; command steps in! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git pull origin main&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; This command fetches the latest updates from the remote repository's main branch and merges them into your local branch. &lt;br&gt;
&lt;code&gt;git pull&lt;/code&gt; combines two actions: fetching remote changes and merging them into your branch.&lt;br&gt;
&lt;code&gt;origin&lt;/code&gt; is the default name for the remote repository.&lt;br&gt;
&lt;code&gt;main&lt;/code&gt; refers to the branch you're pulling from.&lt;br&gt;
Usually using the command as &lt;code&gt;git pull&lt;/code&gt; is enough.&lt;/p&gt;

&lt;p&gt;It’s a quick way to ensure you're working with the most current code, especially when collaborating with a team. Pulling latest code regularly prevents conflicts later on.&lt;/p&gt;

</description>
      <category>git</category>
      <category>beginners</category>
      <category>coding</category>
      <category>github</category>
    </item>
    <item>
      <title>Git Branching</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Mon, 09 Sep 2024 15:05:22 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/git-branching-2mi8</link>
      <guid>https://forem.com/farhatsharifh/git-branching-2mi8</guid>
      <description>&lt;p&gt;✦ You've completed a feature in your project and starting on a new one. You don't want to mess up your fully functional and stable code. You need to build on the previous work, but you want to keep it separate and work carefree on the new feature.&lt;br&gt;
✦ You're working in a team and every team member is working on a separate feature. Everyone needs to work independently.&lt;br&gt;
✦ You're working on something that will take time to complete, in the meanwhile you have to do a bug fix.&lt;/p&gt;

&lt;p&gt;That’s where Git branches come in handy! Branches allow you to experiment, develop new features or make changes in isolation without affecting your main codebase. &lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;master/main branch&lt;/strong&gt; always contains the fully functional code. We create a new branch to work independently from the main branch.  When the work is complete, we merge this branch into the main branch. &lt;/p&gt;

&lt;p&gt;Let’s see how simple working with Git branches can be.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a New Branch:
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git checkout -b feature-branch-name&lt;/code&gt;&lt;br&gt;
Create and switch to a new branch. &lt;br&gt;
Flag &lt;strong&gt;-b&lt;/strong&gt; tells we're creating a new branch. The &lt;strong&gt;checkout&lt;/strong&gt; command tells to switch to another branch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Switch Branches:
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git checkout branch-name&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Merge Branches:
&lt;/h3&gt;

&lt;p&gt;Once we’ve finished working on a branch, we merge it into our master/main branch with &lt;strong&gt;git merge&lt;/strong&gt; command.&lt;br&gt;
&lt;code&gt;git checkout master&lt;/code&gt; &lt;br&gt;
Switch to the master branch&lt;br&gt;
&lt;code&gt;git merge feature-branch-name&lt;/code&gt; &lt;br&gt;
Merge changes from feature branch into master branch&lt;br&gt;
Merging branches is also done by &lt;strong&gt;Pull Requests&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Delete a Branch:
&lt;/h3&gt;

&lt;p&gt;After merging in the main branch, you can delete a branch.&lt;br&gt;
&lt;code&gt;git branch -d feature-branch-name&lt;/code&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Common Categories of Git Branches&lt;/strong&gt;&lt;br&gt;
Git branches can be categorized based on their purpose, though the process to create them is always the same using the git checkout command. &lt;br&gt;
&lt;strong&gt;Feature Branches:&lt;/strong&gt; Used to develop new features. &lt;br&gt;
&lt;strong&gt;Bugfix Branches:&lt;/strong&gt; Used to fix specific bugs or issues.&lt;br&gt;
&lt;strong&gt;Release Branches:&lt;/strong&gt; Used to prepare for a major release.&lt;br&gt;
&lt;strong&gt;Hotfix Branches:&lt;/strong&gt; Used for urgent fixes to critical bugs in production.&lt;br&gt;
We can prefix these categories in branch name (as per git branch naming conventions) to easily identify them. e.g. feature/add-login-page, bugfix/dashboard-display-error&lt;/p&gt;

&lt;p&gt;Working with branches can improve the development process, keep the workflow smooth and maintain clean history in version control.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>git</category>
      <category>github</category>
      <category>coding</category>
    </item>
    <item>
      <title>Path vs. Query Parameters: Choosing the Right Approach for API Requests</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Sun, 08 Sep 2024 13:23:35 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/path-vs-query-parameters-choosing-the-right-approach-for-api-requests-2lah</link>
      <guid>https://forem.com/farhatsharifh/path-vs-query-parameters-choosing-the-right-approach-for-api-requests-2lah</guid>
      <description>&lt;p&gt;When building web applications, sending data from frontend to the server is a fundamental task. There are two common methods for passing parameters, i.e. &lt;strong&gt;path parameters&lt;/strong&gt; and &lt;strong&gt;query parameters&lt;/strong&gt;. &lt;br&gt;
Each method has distinct use and choosing the right one can improve the clarity and functionality of our API. Let's explore the difference and see when to use each approach.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Path Parameters
&lt;/h3&gt;

&lt;p&gt;Path parameters are included directly in the URL path, separated by forward slash. For example, to fetch specific category of products, the frontend sends request:&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;BACKEND_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.example.com/products/&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;category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;electronics&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;http&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="nx"&gt;BACKEND_URL&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;category&lt;/code&gt; is the path parameter here. Backend route defined to capture this path parameter:&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="nx"&gt;router&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="s2"&gt;/:category&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ProductsController&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAllProducts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;req.params.category&lt;/code&gt; in the controller method to retrieve the category parameter:&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;productCategory&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="nx"&gt;category&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When to Use:&lt;/strong&gt;&lt;br&gt;
Path parameters are ideal when the parameter represents a resource identifier, like category name or a product ID. &lt;br&gt;
For example, &lt;code&gt;https://example.com/products/electronics&lt;/code&gt; clearly identifies a category of products. This method creates clean and readable URLs.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Query Parameters
&lt;/h3&gt;

&lt;p&gt;Query parameters are added to the URL after a question mark, separated by ampersand (if more than one). Query parameters can be passed as part of the query string:&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;BACKEND_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.example.com/products/electronics&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="c1"&gt;// Using category as part of the backend url here, so that we can focus only on query parameters in this example&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queryParams&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`?orderBy=price&amp;amp;direction=desc`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;http&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="nx"&gt;BACKEND_URL&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;queryParams&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The backend route need no parameter since we are using query parameters:&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="nx"&gt;router&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="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ProductsController&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAllProducts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the controller retrieve the parameter(s) from the query string:&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;orderBy&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="nx"&gt;orderBy&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;direction&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="nx"&gt;direction&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When to Use:&lt;/strong&gt;&lt;br&gt;
Query parameters are suitable for searching, pagination or passing optional data. For example, &lt;br&gt;
&lt;code&gt;https://example.com/products/electronics?orderBy=price&amp;amp;direction=desc&lt;/code&gt; appends additional options to sort the results. This method is more flexible, allowing multiple parameters without altering the URL structure but the url can get longer and difficult to read.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Choosing the Right Method
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Path Parameters:&lt;/strong&gt; Use when the parameter is essential to identify the resource.&lt;br&gt;
&lt;strong&gt;Query Parameters:&lt;/strong&gt; Use when the parameter is optional or for filtering, sorting, or pagination.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Note: I have written code examples in simple JavaScript to make it easier to understand. &lt;/p&gt;

</description>
      <category>coding</category>
      <category>webdev</category>
      <category>api</category>
      <category>programming</category>
    </item>
    <item>
      <title>Essential Git Commands</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Fri, 06 Sep 2024 22:16:11 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/essential-git-commands-3h66</link>
      <guid>https://forem.com/farhatsharifh/essential-git-commands-3h66</guid>
      <description>&lt;p&gt;Once you have set up your git repository (as described in the &lt;a href="https://dev.to/farhatsharifh/a-beginners-guide-for-git-4p5"&gt;previous post&lt;/a&gt;), here come the next steps. When you start using git, these are the steps you will find yourself doing frequently. Whenever you make changes to your project, these commands will help you manage the changes efficiently. &lt;/p&gt;

&lt;h3&gt;
  
  
  1. Check Your Files' Status:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git status&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; This command shows the current status of your repository. It lets you know which files have been modified, which are new, which are staged for commit and which aren’t.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Stage Your Changes for Commit
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git add &amp;lt;file_name&amp;gt;&lt;/code&gt; or &lt;code&gt;git add .&lt;/code&gt; &lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; After editing or adding files, use the command to add the changes to the staging area. You can stage individual files by name or all changes at once by using &lt;code&gt;git add .&lt;/code&gt; command. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Commit Your Changes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git commit -m "commit message"&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Once the changes are staged, use git commit command to store them and include a descriptive message that explains the changes you made. Commit is like a snapshot of your repository's current state used to maintain history and track changes.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Push Your Changes to the Remote Repository
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git push&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; After committing your changes, push them to your remote repository. &lt;br&gt;
(You need to set the upstream branch once, which we have done in &lt;a href="https://dev.to/farhatsharifh/a-beginners-guide-for-git-4p5"&gt;previous post&lt;/a&gt;. After that using &lt;code&gt;git push&lt;/code&gt; will be enough.)&lt;/p&gt;

&lt;p&gt;These simple commands will help streamline your workflow with git.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>github</category>
      <category>git</category>
    </item>
    <item>
      <title>A Beginner's Guide to Git</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Thu, 05 Sep 2024 21:36:21 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/a-beginners-guide-for-git-4p5</link>
      <guid>https://forem.com/farhatsharifh/a-beginners-guide-for-git-4p5</guid>
      <description>&lt;p&gt;After seeing a beginner struggling with the use of Git, I planned to write this post to explain some basic git commands in a simple way. Here's a step-by-step guide on how to use Git. I have added a brief description with each command.&lt;/p&gt;



&lt;h3&gt;
  
  
  1. Initialize a Local Git Repository
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git init&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Initializes a new Git repository in the current directory.&lt;br&gt;
From command line, switch into any directory which you want to turn into git repository; using &lt;code&gt;cd &amp;lt;directory_path&amp;gt;&lt;/code&gt; and execute &lt;code&gt;git init&lt;/code&gt; command there. &lt;br&gt;
(It can be an existing project directory containing your code files or an empty directory where you plan to add your files.)&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Create a Remote Repository
&lt;/h3&gt;

&lt;p&gt;Go to &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; or another Git hosting service and create a new repository.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Connect Local Repository to Remote Repository
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git remote add origin &amp;lt;remote_repository_url&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Links your local repository to the remote repository on GitHub. &lt;br&gt;
(Copy the URL of the newly created repository at github and use here.) &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Add Files for Staging
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git add &amp;lt;fileName&amp;gt;&lt;/code&gt;&lt;br&gt;
e.g. git add sampleFile.php&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Stages changes in file(s) for commit. Staging is the area where you group changes you've made to files, to include in the next commit.&lt;br&gt;
If you have code changes in more than one files and want to commit all together. Use:&lt;br&gt;
&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git add .&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Stages all changes in all files for commit.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Commit Code Changes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git commit -m "Your commit message"&lt;/code&gt;&lt;br&gt;
e.g. git commit -m "Update xyz method"&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Permanently stores your staged changes in your local repository. Use a descriptive message to document what changes have been made. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Push Changes to Remote Repository
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;git push -u origin &amp;lt;branch-name&amp;gt;&lt;/code&gt;&lt;br&gt;
e.g. git push -u origin master&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; This command sets the upstream branch and uploads your local commits to the remote repository's branch.&lt;br&gt;
(More on branches in some next post.)&lt;/p&gt;

&lt;p&gt;&lt;br&gt;By following the above commands, you can successfully initialize a Git repository and upload your project from your local machine to GitHub.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>coding</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Get to Know N of MEAN Stack</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Tue, 12 Jan 2021 15:10:48 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/get-to-know-n-of-mean-stack-2ko4</link>
      <guid>https://forem.com/farhatsharifh/get-to-know-n-of-mean-stack-2ko4</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Node.js&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://nodejs.dev/learn" rel="noopener noreferrer"&gt;&lt;strong&gt;Node.js&lt;/strong&gt;&lt;/a&gt; is a runtime environment to execute &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" rel="noopener noreferrer"&gt;&lt;strong&gt;JavaScript&lt;/strong&gt;&lt;/a&gt; code outside of a browser. Node.js is used to build and run the apps developed in JavaScript or any language that transpile to JavaScript. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Overview&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Node.js allows JavaScript code to run outside of a browser context, i.e. running directly on a computer or server OS. It allows the backend APIs to communicate with the OS APIs such as file system libraries. It gives JavaScript the ability to act as a web server language. &lt;/p&gt;

&lt;p&gt;Node.js is &lt;strong&gt;event-driven&lt;/strong&gt;, i.e. flow of the program is based on user actions. So Node.js starts the server, performs the initial tasks, starts the event loop and then waits for the event to occur. &lt;/p&gt;

&lt;p&gt;Node.js uses &lt;strong&gt;single threaded&lt;/strong&gt; &lt;a href="https://nodejs.dev/learn/the-nodejs-event-loop" rel="noopener noreferrer"&gt;&lt;strong&gt;event loop&lt;/strong&gt;&lt;/a&gt; to handle all the requests. Using the &lt;strong&gt;non-blocking I/O model&lt;/strong&gt;, it comes up with the ability to handle a large number of concurrent requests without the need to manage thread concurrency.&lt;/p&gt;

&lt;p&gt;Node.js provides access to an enormous number of reusable components through its &lt;strong&gt;package manager&lt;/strong&gt; &lt;a href="https://nodejs.dev/learn/an-introduction-to-the-npm-package-manager" rel="noopener noreferrer"&gt;&lt;strong&gt;npm&lt;/strong&gt;&lt;/a&gt; and enhances the developers’ power in this way. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Benefits&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Node.js is:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suitable for &lt;strong&gt;data-intensive apps&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Known for building &lt;strong&gt;efficient&lt;/strong&gt; and &lt;strong&gt;highly scalable apps&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A good platform to serve real-time apps because of its &lt;strong&gt;great performance&lt;/strong&gt; and &lt;strong&gt;reliable service&lt;/strong&gt;. &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>node</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>meanstack</category>
    </item>
    <item>
      <title>Get to Know A of MEAN Stack</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Tue, 12 Jan 2021 15:08:24 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/get-to-know-a-of-mean-stack-3bjf</link>
      <guid>https://forem.com/farhatsharifh/get-to-know-a-of-mean-stack-3bjf</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Angular&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://angular.io/docs" rel="noopener noreferrer"&gt;&lt;strong&gt;Angular&lt;/strong&gt;&lt;/a&gt; is a component based web application framework used to build efficient front-end solutions. Angular simplifies the ways of creating single-page client-side applications using &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML" rel="noopener noreferrer"&gt;&lt;strong&gt;HTML&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://www.typescriptlang.org/docs/" rel="noopener noreferrer"&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;&lt;/a&gt; (a superset of JavaScript).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Overview&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Angular app consists of &lt;a href="https://angular.io/guide/architecture#modules" rel="noopener noreferrer"&gt;&lt;strong&gt;module(s)&lt;/strong&gt;&lt;/a&gt;. Every module represents a particular functionality and organizes related components.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://angular.io/guide/architecture#components" rel="noopener noreferrer"&gt;&lt;strong&gt;Components&lt;/strong&gt;&lt;/a&gt; are the building blocks of an Angular app. Every component defines an angular view. Components use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML templates to define the view part of the component. These templates contain Angular &lt;a href="https://angular.io/guide/template-syntax" rel="noopener noreferrer"&gt;&lt;strong&gt;template syntax&lt;/strong&gt;&lt;/a&gt; to alter the views dynamically according to the app logic, state and data. &lt;/li&gt;
&lt;li&gt;Classes (written in TypeScript) to define components’ logic to handle data and functionality.&lt;/li&gt;
&lt;li&gt;Component-specific styles for the UI design.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then there are &lt;a href="https://angular.io/guide/architecture#services-and-dependency-injection" rel="noopener noreferrer"&gt;&lt;strong&gt;Services&lt;/strong&gt;&lt;/a&gt;, i.e. classes used to define the functionality that is not associated with a view. Services can be injected into components with a mechanism known as &lt;a href="https://angular.io/guide/architecture-services#dependency-injection-di" rel="noopener noreferrer"&gt;&lt;strong&gt;dependency injection&lt;/strong&gt;&lt;/a&gt;. Services are shared across components. &lt;/p&gt;

&lt;p&gt;The TypeScript code is translated to JavaScript instructions by the framework’s compiler at build time. It brings all the efficiency associated with JavaScript to the Angular app. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Benefits&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Angular supports &lt;strong&gt;highly scalable systems&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Angular produces &lt;strong&gt;high-performance apps&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Angular provides the ability to design &lt;a href="https://angular.io/guide/accessibility" rel="noopener noreferrer"&gt;&lt;strong&gt;accessible apps&lt;/strong&gt;&lt;/a&gt; with &lt;a href="https://material.angular.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;Angular Material library&lt;/strong&gt;&lt;/a&gt;, for people with visual or motor impairments.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>meanstack</category>
    </item>
    <item>
      <title>Get to Know E of MEAN Stack</title>
      <dc:creator>Farhat Sharif</dc:creator>
      <pubDate>Tue, 12 Jan 2021 15:05:59 +0000</pubDate>
      <link>https://forem.com/farhatsharifh/get-to-know-e-of-mean-stack-5fc8</link>
      <guid>https://forem.com/farhatsharifh/get-to-know-e-of-mean-stack-5fc8</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Express&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://expressjs.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Express&lt;/strong&gt;&lt;/a&gt; is a minimal web application framework for Node.js applications. It gives the ability to develop fundamental web application features quickly and easily. Express is used to build server-side applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Overview&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Express provides the mechanisms to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt; Create &lt;a href="https://expressjs.com/en/starter/hello-world.html" rel="noopener noreferrer"&gt;&lt;strong&gt;web server&lt;/strong&gt;&lt;/a&gt; and server-side settings, e.g. port to use for connecting, database access, etc. &lt;/li&gt;
&lt;li&gt; Write request handlers for &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods" rel="noopener noreferrer"&gt;&lt;strong&gt;HTTP request methods&lt;/strong&gt;&lt;/a&gt;. These handlers can be required to read/write data from/to a database or many other tasks to satisfy the request and generate the response.&lt;/li&gt;
&lt;li&gt; Add &lt;a href="https://expressjs.com/en/guide/using-middleware.html" rel="noopener noreferrer"&gt;&lt;strong&gt;middleware&lt;/strong&gt;&lt;/a&gt; functions to simplify common web development tasks during the request processing, e.g. file upload and storage, password hashing, routing, error handling, etc.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Benefits&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;minimalist approach&lt;/strong&gt; makes it easy to learn and easy to build APIs with Express.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Middleware based&lt;/strong&gt;. Integrate/create as many components as you want to achieve different functionalities. Easy integration with third-party middleware.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/Introduction#is_express_opinionated" rel="noopener noreferrer"&gt;&lt;strong&gt;Unopinionated framework&lt;/strong&gt;&lt;/a&gt;. Flexible framework for the developers to choose suitable components to solve the problems or complete their tasks. Fewer restrictions on which components to use and how to use them together.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>express</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>meanstack</category>
    </item>
  </channel>
</rss>
