From 12e43f0efec0d5d3dbd226d36ef3506ce31962bd Mon Sep 17 00:00:00 2001 From: Miss-Siddhi-Pagire Date: Fri, 8 Aug 2025 15:32:56 +0530 Subject: [PATCH 1/2] Rest api methods Notes --- .../rest-api-http-methods.md | 228 ++++++++ package-lock.json | 537 ------------------ 2 files changed, 228 insertions(+), 537 deletions(-) create mode 100644 docs/expressjs/rest-api-http-methods/rest-api-http-methods.md diff --git a/docs/expressjs/rest-api-http-methods/rest-api-http-methods.md b/docs/expressjs/rest-api-http-methods/rest-api-http-methods.md new file mode 100644 index 00000000..783e62d5 --- /dev/null +++ b/docs/expressjs/rest-api-http-methods/rest-api-http-methods.md @@ -0,0 +1,228 @@ +## 🌐 What is REST API? + +_REST_ stands for _Representational State Transfer_. +It is an architectural style for designing networked applications. REST treats everything as a _resource_ and uses _standard HTTP methods_ to access and manipulate them. + +--- + +## πŸ” Key Features of REST + +- _Stateless_: Every HTTP request contains all necessary information. +- _Client-Server Architecture_: Frontend and backend are separate. +- _Cacheable_: Responses can be cached to improve performance. +- _Uniform Interface_: Consistent way to interact with resources. +- _Layered System_: APIs can be composed in layers. + +--- + +# 🧱 REST Architecture Principles + +1. Client-Server – Frontend and backend operate independently. + +2. Stateless – Server does not store client context. + +3. Cacheable – Improve performance with response caching. + +4. Uniform Interface – Simplified and consistent access to resources. + +5. Layered System – Intermediary layers handle load balancing, caching, etc. + +--- + +## πŸ“Œ HTTP Methods Overview + +| Method | Description | Endpoint Example | +| ------ | ------------------------- | ------------------- | +| GET | Retrieve resource | GET /api/users | +| POST | Create new resource | POST /api/users | +| PUT | Update entire resource | PUT /api/users/1 | +| PATCH | Update part of a resource | PATCH /api/users/1 | +| DELETE | Delete a resource | DELETE /api/users/1 | + +--- + +## πŸ§ͺ Initial Data Setup + +```js +const express = require("express"); +const app = express(); +const PORT = 3000; + +app.use(express.json()); + +let users = [ + { id: 1, name: "Alice", email: "alice@example.com" }, + { id: 2, name: "Bob", email: "bob@example.com" }, +]; +``` + +--- + +## 1. 🟒 GET – Retrieve All Users + +The `GET` method is used to fetch data from the server. + +```js +app.get("/users", (req, res) => { + res.json({ + success: true, + message: "All users fetched successfully", + data: users, + }); +}); +``` + +βœ… **Use Case**: Get the full list of users. + +--- + +## 2. 🟑 POST – Create New User + +The `POST` method sends data to the server to create a new resource. + +```js +app.post("/users", (req, res) => { + const { name, email } = req.body; + + if (!name || !email) { + return res.json({ + success: false, + message: "Name and email are required", + data: null, + }); + } + + const newUser = { + id: Math.floor(Math.random() * 1000000), + name, + email, + }; + + users.push(newUser); + + res.json({ + success: true, + message: "User created successfully", + data: newUser, + }); +}); +``` + +βœ… **Use Case**: Add a new user. + +--- + +## 3. πŸ”΅ PUT – Replace User by ID + +The `PUT` method replaces the entire user data by ID. + +```js +app.put("/users/:id", (req, res) => { + const { id } = req.params; + const { name, email } = req.body; + + const index = users.findIndex((u) => u.id == id); + + if (index === -1) { + return res.json({ + success: false, + message: "User not found", + data: null, + }); + } + + const updatedUser = { + id: parseInt(id), + name, + email, + }; + + users[index] = updatedUser; + + res.json({ + success: true, + message: "User updated successfully", + data: updatedUser, + }); +}); +``` + +βœ… **Use Case**: Replace full user object. + +--- + +## 4. 🟣 PATCH – Update Part of User by ID + +The `PATCH` method updates only selected fields of a user. + +```js +app.patch("/users/:id", (req, res) => { + const { id } = req.params; + const { name, email } = req.body; + + const user = users.find((u) => u.id == id); + + if (!user) { + return res.json({ + success: false, + message: `User with id ${id} not found`, + data: null, + }); + } + + if (name) user.name = name; + if (email) user.email = email; + + res.json({ + success: true, + message: `User with id ${id} updated successfully`, + data: user, + }); +}); +``` + +βœ… **Use Case**: Update only `email` or `name`. + +--- + +## 5. πŸ”΄ DELETE – Remove User by ID + +The `DELETE` method removes a user from the server by ID. + +```js +app.delete("/users/:id", (req, res) => { + const { id } = req.params; + + const index = users.findIndex((u) => u.id == id); + + if (index === -1) { + return res.json({ + success: false, + message: `User with id ${id} not found`, + data: null, + }); + } + + users.splice(index, 1); + + res.json({ + success: true, + message: `User with id ${id} deleted successfully`, + data: users, + }); +}); +``` + +βœ… **Use Case**: Delete a user by ID. + +--- + +## πŸ§ͺ Start the Server + +At the end of your file: + +```js +app.listen(PORT, () => { + console.log(`Server is running on http://localhost:${PORT}`); +}); +``` diff --git a/package-lock.json b/package-lock.json index a8679b29..a2155072 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2898,147 +2898,6 @@ "node": ">=16.14" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", - "license": "MIT", - "peer": true, - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", - "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@eslint/core": "^0.15.1", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -3054,72 +2913,6 @@ "@hapi/hoek": "^9.0.0" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -4281,16 +4074,6 @@ "acorn": "^8.14.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "license": "MIT", - "peer": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/acorn-walk": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", @@ -6172,13 +5955,6 @@ "node": ">=4.0.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "license": "MIT", - "peer": true - }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -6727,67 +6503,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", - "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.32.0", - "@eslint/plugin-kit": "^0.3.4", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, "node_modules/eslint-plugin-markdownlint": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/eslint-plugin-markdownlint/-/eslint-plugin-markdownlint-0.4.1.tgz", @@ -6803,67 +6518,6 @@ "eslint": ">=7.5.0" } }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "peer": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -6877,19 +6531,6 @@ "node": ">=4" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -7126,13 +6767,6 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "license": "MIT" }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "license": "MIT", - "peer": true - }, "node_modules/fast-uri": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", @@ -7212,19 +6846,6 @@ "node": ">=0.4.0" } }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/file-loader": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", @@ -7359,27 +6980,6 @@ "flat": "cli.js" } }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "license": "MIT", - "peer": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "license": "ISC", - "peer": true - }, "node_modules/flux": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", @@ -7764,19 +7364,6 @@ "which": "bin/which" } }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -9014,13 +8601,6 @@ "node": ">=6" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT", - "peer": true - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -9033,13 +8613,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "license": "MIT", - "peer": true - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -9064,16 +8637,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "peer": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -9123,20 +8686,6 @@ "node": ">=6" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -9229,13 +8778,6 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "license": "MIT" }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT", - "peer": true - }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -9706,13 +9248,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "license": "MIT", - "peer": true - }, "node_modules/negotiator": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", @@ -9969,24 +9504,6 @@ "opener": "bin/opener-bin.js" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "license": "MIT", - "peer": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -11089,16 +10606,6 @@ "postcss": "^8.2.15" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", @@ -12376,13 +11883,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "license": "MIT", - "peer": true - }, "node_modules/section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", @@ -13495,19 +12995,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -13563,20 +13050,6 @@ "is-typedarray": "^1.0.0" } }, - "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/ua-parser-js": { "version": "1.0.40", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", @@ -14828,16 +14301,6 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "license": "MIT" }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", From 586819bd36b885421bd020bea1ed0c2d92311015 Mon Sep 17 00:00:00 2001 From: Miss-Siddhi-Pagire Date: Tue, 12 Aug 2025 10:12:50 +0530 Subject: [PATCH 2/2] Changes in rest-api-http-methods ,give proper format to it --- .../rest-api-http-methods.md | 109 ++++++++++-------- .../rest-api-architecture.jpg | Bin 0 -> 148794 bytes static/{ => react}/tip-and-tools/01/01.5.png | Bin static/{ => react}/tip-and-tools/01/01.png | Bin static/{ => react}/tip-and-tools/01/02.png | Bin static/{ => react}/tip-and-tools/01/03.png | Bin static/{ => react}/tip-and-tools/01/04.png | Bin static/{ => react}/tip-and-tools/01/05.png | Bin static/{ => react}/tip-and-tools/01/06.png | Bin static/{ => react}/tip-and-tools/01/07.png | Bin static/{ => react}/tip-and-tools/01/08.png | Bin .../tip-and-tools/01/screenshot-1.png | Bin .../tip-and-tools/01/screenshot-2.png | Bin .../tip-and-tools/01/screenshot-3.png | Bin .../tip-and-tools/01/screenshot-4.png | Bin .../tip-and-tools/01/screenshot-5.png | Bin .../tip-and-tools/01/screenshot-6.png | Bin .../tip-and-tools/01/screenshot-7.png | Bin .../tip-and-tools/02/screenshot-1.png | Bin .../tip-and-tools/02/screenshot-2.png | Bin .../tip-and-tools/02/screenshot-3.png | Bin .../tip-and-tools/02/screenshot-4.png | Bin .../tip-and-tools/02/screenshot-5.png | Bin .../tip-and-tools/02/screenshot-6.png | Bin .../tip-and-tools/02/screenshot-7.png | Bin .../tip-and-tools/02/screenshot-8.png | Bin .../tip-and-tools/03/screenshot-1.png | Bin .../tip-and-tools/03/screenshot-2.png | Bin .../tip-and-tools/03/screenshot-3.png | Bin .../tip-and-tools/03/screenshot-4.png | Bin .../tip-and-tools/03/screenshot-5.png | Bin .../tip-and-tools/03/screenshot-6.png | Bin .../tip-and-tools/03/screenshot-7.png | Bin .../tip-and-tools/04/screenshot-1.png | Bin .../tip-and-tools/04/screenshot-2.png | Bin .../tip-and-tools/04/screenshot-3.png | Bin .../tip-and-tools/05/screenshot-1.png | Bin .../tip-and-tools/05/screenshot-2.png | Bin .../tip-and-tools/05/screenshot-3.png | Bin .../tip-and-tools/05/screenshot-4.png | Bin .../tip-and-tools/05/screenshot-5.png | Bin .../tip-and-tools/05/screenshot-6.png | Bin .../tip-and-tools/05/screenshot-7.png | Bin .../tip-and-tools/06/screenshot-0.png | Bin .../tip-and-tools/06/screenshot-1.png | Bin .../tip-and-tools/06/screenshot-2.png | Bin .../tip-and-tools/06/screenshot-3.png | Bin .../tip-and-tools/06/screenshot-4.png | Bin .../tip-and-tools/06/screenshot-5.png | Bin .../tip-and-tools/06/screenshot-6.png | Bin .../tip-and-tools/06/screenshot-7.png | Bin .../tip-and-tools/08/screenshot1.png | Bin .../tip-and-tools/09/color-picker.png | Bin .../{ => react}/tip-and-tools/09/color1.png | Bin .../{ => react}/tip-and-tools/09/color2.png | Bin static/{ => react}/tip-and-tools/10/step1.jpg | Bin static/{ => react}/tip-and-tools/10/step2.jpg | Bin static/{ => react}/tip-and-tools/10/step3.jpg | Bin static/{ => react}/tip-and-tools/10/step4.jpg | Bin static/{ => react}/tip-and-tools/10/step5.jpg | Bin static/{ => react}/tip-and-tools/10/step6.jpg | Bin static/{ => react}/tip-and-tools/10/step7.jpg | Bin static/{ => react}/tip-and-tools/11/s1.png | Bin static/{ => react}/tip-and-tools/11/s2.png | Bin static/{ => react}/tip-and-tools/11/s3.png | Bin static/{ => react}/tip-and-tools/11/s4.png | Bin static/{ => react}/tip-and-tools/11/s5.png | Bin static/{ => react}/tip-and-tools/11/s6.png | Bin static/{ => react}/tip-and-tools/11/s7.png | Bin .../{ => react}/tip-and-tools/12/output-1.png | Bin .../{ => react}/tip-and-tools/12/output-2.png | Bin .../{ => react}/tip-and-tools/12/output-3.png | Bin .../{ => react}/tip-and-tools/12/output-5.png | Bin .../{ => react}/tip-and-tools/12/output-6.png | Bin .../{ => react}/tip-and-tools/12/output-7.png | Bin .../tip-and-tools/13/s1 - Copy.png | Bin static/{ => react}/tip-and-tools/13/s1.png | Bin static/{ => react}/tip-and-tools/13/s10.png | Bin static/{ => react}/tip-and-tools/13/s11.png | Bin static/{ => react}/tip-and-tools/13/s12.png | Bin static/{ => react}/tip-and-tools/13/s13.png | Bin static/{ => react}/tip-and-tools/13/s14.png | Bin static/{ => react}/tip-and-tools/13/s15.png | Bin static/{ => react}/tip-and-tools/13/s2.png | Bin static/{ => react}/tip-and-tools/13/s3.png | Bin static/{ => react}/tip-and-tools/13/s4.png | Bin static/{ => react}/tip-and-tools/13/s5.png | Bin static/{ => react}/tip-and-tools/13/s6.png | Bin static/{ => react}/tip-and-tools/13/s7.png | Bin static/{ => react}/tip-and-tools/13/s8.png | Bin static/{ => react}/tip-and-tools/13/s9.png | Bin static/{ => react}/tip-and-tools/14/1.png | Bin static/{ => react}/tip-and-tools/14/2.jpg | Bin static/{ => react}/tip-and-tools/14/3.jpg | Bin static/{ => react}/tip-and-tools/14/4.jpg | Bin static/{ => react}/tip-and-tools/14/5.png | Bin static/{ => react}/tip-and-tools/14/6img.png | Bin static/{ => react}/tip-and-tools/14/7.png | Bin static/{ => react}/tip-and-tools/14/8.png | Bin static/{ => react}/tip-and-tools/14/9.png | Bin static/{ => react}/tip-and-tools/15/1.png | Bin static/{ => react}/tip-and-tools/15/2.png | Bin .../{ => react}/tip-and-tools/16/readme.png | Bin 103 files changed, 64 insertions(+), 45 deletions(-) create mode 100644 static/expressjs/rest-api-http-methods/rest-api-architecture.jpg rename static/{ => react}/tip-and-tools/01/01.5.png (100%) rename static/{ => react}/tip-and-tools/01/01.png (100%) rename static/{ => react}/tip-and-tools/01/02.png (100%) rename static/{ => react}/tip-and-tools/01/03.png (100%) rename static/{ => react}/tip-and-tools/01/04.png (100%) rename static/{ => react}/tip-and-tools/01/05.png (100%) rename static/{ => react}/tip-and-tools/01/06.png (100%) rename static/{ => react}/tip-and-tools/01/07.png (100%) rename static/{ => react}/tip-and-tools/01/08.png (100%) rename static/{ => react}/tip-and-tools/01/screenshot-1.png (100%) rename static/{ => react}/tip-and-tools/01/screenshot-2.png (100%) rename static/{ => react}/tip-and-tools/01/screenshot-3.png (100%) rename static/{ => react}/tip-and-tools/01/screenshot-4.png (100%) rename static/{ => react}/tip-and-tools/01/screenshot-5.png (100%) rename static/{ => react}/tip-and-tools/01/screenshot-6.png (100%) rename static/{ => react}/tip-and-tools/01/screenshot-7.png (100%) rename static/{ => react}/tip-and-tools/02/screenshot-1.png (100%) rename static/{ => react}/tip-and-tools/02/screenshot-2.png (100%) rename static/{ => react}/tip-and-tools/02/screenshot-3.png (100%) rename static/{ => react}/tip-and-tools/02/screenshot-4.png (100%) rename static/{ => react}/tip-and-tools/02/screenshot-5.png (100%) rename static/{ => react}/tip-and-tools/02/screenshot-6.png (100%) rename static/{ => react}/tip-and-tools/02/screenshot-7.png (100%) rename static/{ => react}/tip-and-tools/02/screenshot-8.png (100%) rename static/{ => react}/tip-and-tools/03/screenshot-1.png (100%) rename static/{ => react}/tip-and-tools/03/screenshot-2.png (100%) rename static/{ => react}/tip-and-tools/03/screenshot-3.png (100%) rename static/{ => react}/tip-and-tools/03/screenshot-4.png (100%) rename static/{ => react}/tip-and-tools/03/screenshot-5.png (100%) rename static/{ => react}/tip-and-tools/03/screenshot-6.png (100%) rename static/{ => react}/tip-and-tools/03/screenshot-7.png (100%) rename static/{ => react}/tip-and-tools/04/screenshot-1.png (100%) rename static/{ => react}/tip-and-tools/04/screenshot-2.png (100%) rename static/{ => react}/tip-and-tools/04/screenshot-3.png (100%) rename static/{ => react}/tip-and-tools/05/screenshot-1.png (100%) rename static/{ => react}/tip-and-tools/05/screenshot-2.png (100%) rename static/{ => react}/tip-and-tools/05/screenshot-3.png (100%) rename static/{ => react}/tip-and-tools/05/screenshot-4.png (100%) rename static/{ => react}/tip-and-tools/05/screenshot-5.png (100%) rename static/{ => react}/tip-and-tools/05/screenshot-6.png (100%) rename static/{ => react}/tip-and-tools/05/screenshot-7.png (100%) rename static/{ => react}/tip-and-tools/06/screenshot-0.png (100%) rename static/{ => react}/tip-and-tools/06/screenshot-1.png (100%) rename static/{ => react}/tip-and-tools/06/screenshot-2.png (100%) rename static/{ => react}/tip-and-tools/06/screenshot-3.png (100%) rename static/{ => react}/tip-and-tools/06/screenshot-4.png (100%) rename static/{ => react}/tip-and-tools/06/screenshot-5.png (100%) rename static/{ => react}/tip-and-tools/06/screenshot-6.png (100%) rename static/{ => react}/tip-and-tools/06/screenshot-7.png (100%) rename static/{ => react}/tip-and-tools/08/screenshot1.png (100%) rename static/{ => react}/tip-and-tools/09/color-picker.png (100%) rename static/{ => react}/tip-and-tools/09/color1.png (100%) rename static/{ => react}/tip-and-tools/09/color2.png (100%) rename static/{ => react}/tip-and-tools/10/step1.jpg (100%) rename static/{ => react}/tip-and-tools/10/step2.jpg (100%) rename static/{ => react}/tip-and-tools/10/step3.jpg (100%) rename static/{ => react}/tip-and-tools/10/step4.jpg (100%) rename static/{ => react}/tip-and-tools/10/step5.jpg (100%) rename static/{ => react}/tip-and-tools/10/step6.jpg (100%) rename static/{ => react}/tip-and-tools/10/step7.jpg (100%) rename static/{ => react}/tip-and-tools/11/s1.png (100%) rename static/{ => react}/tip-and-tools/11/s2.png (100%) rename static/{ => react}/tip-and-tools/11/s3.png (100%) rename static/{ => react}/tip-and-tools/11/s4.png (100%) rename static/{ => react}/tip-and-tools/11/s5.png (100%) rename static/{ => react}/tip-and-tools/11/s6.png (100%) rename static/{ => react}/tip-and-tools/11/s7.png (100%) rename static/{ => react}/tip-and-tools/12/output-1.png (100%) rename static/{ => react}/tip-and-tools/12/output-2.png (100%) rename static/{ => react}/tip-and-tools/12/output-3.png (100%) rename static/{ => react}/tip-and-tools/12/output-5.png (100%) rename static/{ => react}/tip-and-tools/12/output-6.png (100%) rename static/{ => react}/tip-and-tools/12/output-7.png (100%) rename static/{ => react}/tip-and-tools/13/s1 - Copy.png (100%) rename static/{ => react}/tip-and-tools/13/s1.png (100%) rename static/{ => react}/tip-and-tools/13/s10.png (100%) rename static/{ => react}/tip-and-tools/13/s11.png (100%) rename static/{ => react}/tip-and-tools/13/s12.png (100%) rename static/{ => react}/tip-and-tools/13/s13.png (100%) rename static/{ => react}/tip-and-tools/13/s14.png (100%) rename static/{ => react}/tip-and-tools/13/s15.png (100%) rename static/{ => react}/tip-and-tools/13/s2.png (100%) rename static/{ => react}/tip-and-tools/13/s3.png (100%) rename static/{ => react}/tip-and-tools/13/s4.png (100%) rename static/{ => react}/tip-and-tools/13/s5.png (100%) rename static/{ => react}/tip-and-tools/13/s6.png (100%) rename static/{ => react}/tip-and-tools/13/s7.png (100%) rename static/{ => react}/tip-and-tools/13/s8.png (100%) rename static/{ => react}/tip-and-tools/13/s9.png (100%) rename static/{ => react}/tip-and-tools/14/1.png (100%) rename static/{ => react}/tip-and-tools/14/2.jpg (100%) rename static/{ => react}/tip-and-tools/14/3.jpg (100%) rename static/{ => react}/tip-and-tools/14/4.jpg (100%) rename static/{ => react}/tip-and-tools/14/5.png (100%) rename static/{ => react}/tip-and-tools/14/6img.png (100%) rename static/{ => react}/tip-and-tools/14/7.png (100%) rename static/{ => react}/tip-and-tools/14/8.png (100%) rename static/{ => react}/tip-and-tools/14/9.png (100%) rename static/{ => react}/tip-and-tools/15/1.png (100%) rename static/{ => react}/tip-and-tools/15/2.png (100%) rename static/{ => react}/tip-and-tools/16/readme.png (100%) diff --git a/docs/expressjs/rest-api-http-methods/rest-api-http-methods.md b/docs/expressjs/rest-api-http-methods/rest-api-http-methods.md index 783e62d5..7a85be33 100644 --- a/docs/expressjs/rest-api-http-methods/rest-api-http-methods.md +++ b/docs/expressjs/rest-api-http-methods/rest-api-http-methods.md @@ -1,47 +1,65 @@ -## 🌐 What is REST API? +# 1️⃣ What is a REST API? -_REST_ stands for _Representational State Transfer_. -It is an architectural style for designing networked applications. REST treats everything as a _resource_ and uses _standard HTTP methods_ to access and manipulate them. +**REST** stands for **Representational State Transfer**. +It’s an **architectural style** for designing networked applications. + +In REST: + +- Everything is treated as a **resource** (e.g., a user, a product, a blog post). +- Each resource is accessed via a **unique URL**. +- Standard **HTTP methods** are used to retrieve or modify data. --- -## πŸ” Key Features of REST +# 2️⃣ REST API Workflow (Diagram) + +![REST API Diagram](/static/expressjs/rest-api-http-methods/rest-api-architecture.jpg) +_Figure: A simple REST API communication between Client, Server, and Database._ -- _Stateless_: Every HTTP request contains all necessary information. -- _Client-Server Architecture_: Frontend and backend are separate. -- _Cacheable_: Responses can be cached to improve performance. -- _Uniform Interface_: Consistent way to interact with resources. -- _Layered System_: APIs can be composed in layers. +**How it works:** + +1. The **Client** (browser, mobile app, etc.) sends an HTTP request to the **API server**. +2. The **Server** processes the request and, if needed, communicates with a **Database**. +3. The **Server** sends back a **JSON response** to the client. --- -# 🧱 REST Architecture Principles +## 3️⃣ Key Features of REST -1. Client-Server – Frontend and backend operate independently. +1. **Stateless** – Each request is independent; the server does not store client data between requests. -2. Stateless – Server does not store client context. +2. **Client-Server Architecture** – Frontend (client) and backend (server) work independently. -3. Cacheable – Improve performance with response caching. +3. **Cacheable** – Responses can be stored (cached) for faster access. -4. Uniform Interface – Simplified and consistent access to resources. +4. **Uniform Interface** – Consistent way to interact with resources. -5. Layered System – Intermediary layers handle load balancing, caching, etc. +5. **Layered System** – Multiple layers (like load balancers, cache servers) can exist between client and server. --- -## πŸ“Œ HTTP Methods Overview +## 4️⃣ HTTP Methods in REST API -| Method | Description | Endpoint Example | -| ------ | ------------------------- | ------------------- | -| GET | Retrieve resource | GET /api/users | -| POST | Create new resource | POST /api/users | -| PUT | Update entire resource | PUT /api/users/1 | -| PATCH | Update part of a resource | PATCH /api/users/1 | -| DELETE | Delete a resource | DELETE /api/users/1 | +| Method | Purpose | Example Endpoint | +| ---------- | ---------------------------- | ---------------- | +| **GET** | Retrieve data | `/users` | +| **POST** | Create a new resource | `/users` | +| **PUT** | Replace an existing resource | `/users/:id` | +| **PATCH** | Update part of a resource | `/users/:id` | +| **DELETE** | Remove a resource | `/users/:id` | --- -## πŸ§ͺ Initial Data Setup +## 5️⃣ Setup: Creating a REST API in Node.js + +### Step 1: Install Node.js and Express + +```bash +npm init -y +npm install express +``` + +### Step 2: Basic Server Setup ```js const express = require("express"); @@ -50,6 +68,7 @@ const PORT = 3000; app.use(express.json()); +//sample array data let users = [ { id: 1, name: "Alice", email: "alice@example.com" }, { id: 2, name: "Bob", email: "bob@example.com" }, @@ -58,9 +77,9 @@ let users = [ --- -## 1. 🟒 GET – Retrieve All Users +## 6️⃣ API Endpoints -The `GET` method is used to fetch data from the server. +### 1. 🟒 GET – Retrieve All Users ```js app.get("/users", (req, res) => { @@ -72,13 +91,11 @@ app.get("/users", (req, res) => { }); ``` -βœ… **Use Case**: Get the full list of users. +βœ… **Use Case**: View all users. --- -## 2. 🟑 POST – Create New User - -The `POST` method sends data to the server to create a new resource. +### 2. 🟑 POST – Create New User ```js app.post("/users", (req, res) => { @@ -108,13 +125,11 @@ app.post("/users", (req, res) => { }); ``` -βœ… **Use Case**: Add a new user. +βœ… **Use Case**: Register a new user. --- -## 3. πŸ”΅ PUT – Replace User by ID - -The `PUT` method replaces the entire user data by ID. +### 3. πŸ”΅ PUT – Replace User by ID ```js app.put("/users/:id", (req, res) => { @@ -147,13 +162,11 @@ app.put("/users/:id", (req, res) => { }); ``` -βœ… **Use Case**: Replace full user object. +βœ… **Use Case**: Replace all details of a user. --- -## 4. 🟣 PATCH – Update Part of User by ID - -The `PATCH` method updates only selected fields of a user. +### 4. 🟣 PATCH – Update Part of a User ```js app.patch("/users/:id", (req, res) => { @@ -181,13 +194,11 @@ app.patch("/users/:id", (req, res) => { }); ``` -βœ… **Use Case**: Update only `email` or `name`. +βœ… **Use Case**: Update only a user’s email or name. --- -## 5. πŸ”΄ DELETE – Remove User by ID - -The `DELETE` method removes a user from the server by ID. +### 5. πŸ”΄ DELETE – Remove a User by ID ```js app.delete("/users/:id", (req, res) => { @@ -217,12 +228,20 @@ app.delete("/users/:id", (req, res) => { --- -## πŸ§ͺ Start the Server - -At the end of your file: +## 7️⃣ Starting the Server ```js app.listen(PORT, () => { console.log(`Server is running on http://localhost:${PORT}`); }); ``` + +--- + +## πŸ“Œ How the API Works + +1. **Client** sends a request (GET, POST, PUT, PATCH, DELETE). +2. **Server** processes it and interacts with the **database** (or array in this example). +3. **Server** sends a JSON response back to the client. + +--- diff --git a/static/expressjs/rest-api-http-methods/rest-api-architecture.jpg b/static/expressjs/rest-api-http-methods/rest-api-architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c97c33f96d5ac45ebc3f9113a90421b4c39477ee GIT binary patch literal 148794 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 J13Z6y`VRy36`TM7 literal 0 HcmV?d00001 diff --git a/static/tip-and-tools/01/01.5.png b/static/react/tip-and-tools/01/01.5.png similarity index 100% rename from static/tip-and-tools/01/01.5.png rename to static/react/tip-and-tools/01/01.5.png diff --git a/static/tip-and-tools/01/01.png b/static/react/tip-and-tools/01/01.png similarity index 100% rename from static/tip-and-tools/01/01.png rename to static/react/tip-and-tools/01/01.png diff --git a/static/tip-and-tools/01/02.png b/static/react/tip-and-tools/01/02.png similarity index 100% rename from static/tip-and-tools/01/02.png rename to static/react/tip-and-tools/01/02.png diff --git a/static/tip-and-tools/01/03.png b/static/react/tip-and-tools/01/03.png similarity index 100% rename from static/tip-and-tools/01/03.png rename to static/react/tip-and-tools/01/03.png diff --git a/static/tip-and-tools/01/04.png b/static/react/tip-and-tools/01/04.png similarity index 100% rename from static/tip-and-tools/01/04.png rename to static/react/tip-and-tools/01/04.png diff --git a/static/tip-and-tools/01/05.png b/static/react/tip-and-tools/01/05.png similarity index 100% rename from static/tip-and-tools/01/05.png rename to static/react/tip-and-tools/01/05.png diff --git a/static/tip-and-tools/01/06.png b/static/react/tip-and-tools/01/06.png similarity index 100% rename from static/tip-and-tools/01/06.png rename to static/react/tip-and-tools/01/06.png diff --git a/static/tip-and-tools/01/07.png b/static/react/tip-and-tools/01/07.png similarity index 100% rename from static/tip-and-tools/01/07.png rename to static/react/tip-and-tools/01/07.png diff --git a/static/tip-and-tools/01/08.png b/static/react/tip-and-tools/01/08.png similarity index 100% rename from static/tip-and-tools/01/08.png rename to static/react/tip-and-tools/01/08.png diff --git a/static/tip-and-tools/01/screenshot-1.png b/static/react/tip-and-tools/01/screenshot-1.png similarity index 100% rename from static/tip-and-tools/01/screenshot-1.png rename to static/react/tip-and-tools/01/screenshot-1.png diff --git a/static/tip-and-tools/01/screenshot-2.png b/static/react/tip-and-tools/01/screenshot-2.png similarity index 100% rename from static/tip-and-tools/01/screenshot-2.png rename to static/react/tip-and-tools/01/screenshot-2.png diff --git a/static/tip-and-tools/01/screenshot-3.png b/static/react/tip-and-tools/01/screenshot-3.png similarity index 100% rename from static/tip-and-tools/01/screenshot-3.png rename to static/react/tip-and-tools/01/screenshot-3.png diff --git a/static/tip-and-tools/01/screenshot-4.png b/static/react/tip-and-tools/01/screenshot-4.png similarity index 100% rename from static/tip-and-tools/01/screenshot-4.png rename to static/react/tip-and-tools/01/screenshot-4.png diff --git a/static/tip-and-tools/01/screenshot-5.png b/static/react/tip-and-tools/01/screenshot-5.png similarity index 100% rename from static/tip-and-tools/01/screenshot-5.png rename to static/react/tip-and-tools/01/screenshot-5.png diff --git a/static/tip-and-tools/01/screenshot-6.png b/static/react/tip-and-tools/01/screenshot-6.png similarity index 100% rename from static/tip-and-tools/01/screenshot-6.png rename to static/react/tip-and-tools/01/screenshot-6.png diff --git a/static/tip-and-tools/01/screenshot-7.png b/static/react/tip-and-tools/01/screenshot-7.png similarity index 100% rename from static/tip-and-tools/01/screenshot-7.png rename to static/react/tip-and-tools/01/screenshot-7.png diff --git a/static/tip-and-tools/02/screenshot-1.png b/static/react/tip-and-tools/02/screenshot-1.png similarity index 100% rename from static/tip-and-tools/02/screenshot-1.png rename to static/react/tip-and-tools/02/screenshot-1.png diff --git a/static/tip-and-tools/02/screenshot-2.png b/static/react/tip-and-tools/02/screenshot-2.png similarity index 100% rename from static/tip-and-tools/02/screenshot-2.png rename to static/react/tip-and-tools/02/screenshot-2.png diff --git a/static/tip-and-tools/02/screenshot-3.png b/static/react/tip-and-tools/02/screenshot-3.png similarity index 100% rename from static/tip-and-tools/02/screenshot-3.png rename to static/react/tip-and-tools/02/screenshot-3.png diff --git a/static/tip-and-tools/02/screenshot-4.png b/static/react/tip-and-tools/02/screenshot-4.png similarity index 100% rename from static/tip-and-tools/02/screenshot-4.png rename to static/react/tip-and-tools/02/screenshot-4.png diff --git a/static/tip-and-tools/02/screenshot-5.png b/static/react/tip-and-tools/02/screenshot-5.png similarity index 100% rename from static/tip-and-tools/02/screenshot-5.png rename to static/react/tip-and-tools/02/screenshot-5.png diff --git a/static/tip-and-tools/02/screenshot-6.png b/static/react/tip-and-tools/02/screenshot-6.png similarity index 100% rename from static/tip-and-tools/02/screenshot-6.png rename to static/react/tip-and-tools/02/screenshot-6.png diff --git a/static/tip-and-tools/02/screenshot-7.png b/static/react/tip-and-tools/02/screenshot-7.png similarity index 100% rename from static/tip-and-tools/02/screenshot-7.png rename to static/react/tip-and-tools/02/screenshot-7.png diff --git a/static/tip-and-tools/02/screenshot-8.png b/static/react/tip-and-tools/02/screenshot-8.png similarity index 100% rename from static/tip-and-tools/02/screenshot-8.png rename to static/react/tip-and-tools/02/screenshot-8.png diff --git a/static/tip-and-tools/03/screenshot-1.png b/static/react/tip-and-tools/03/screenshot-1.png similarity index 100% rename from static/tip-and-tools/03/screenshot-1.png rename to static/react/tip-and-tools/03/screenshot-1.png diff --git a/static/tip-and-tools/03/screenshot-2.png b/static/react/tip-and-tools/03/screenshot-2.png similarity index 100% rename from static/tip-and-tools/03/screenshot-2.png rename to static/react/tip-and-tools/03/screenshot-2.png diff --git a/static/tip-and-tools/03/screenshot-3.png b/static/react/tip-and-tools/03/screenshot-3.png similarity index 100% rename from static/tip-and-tools/03/screenshot-3.png rename to static/react/tip-and-tools/03/screenshot-3.png diff --git a/static/tip-and-tools/03/screenshot-4.png b/static/react/tip-and-tools/03/screenshot-4.png similarity index 100% rename from static/tip-and-tools/03/screenshot-4.png rename to static/react/tip-and-tools/03/screenshot-4.png diff --git a/static/tip-and-tools/03/screenshot-5.png b/static/react/tip-and-tools/03/screenshot-5.png similarity index 100% rename from static/tip-and-tools/03/screenshot-5.png rename to static/react/tip-and-tools/03/screenshot-5.png diff --git a/static/tip-and-tools/03/screenshot-6.png b/static/react/tip-and-tools/03/screenshot-6.png similarity index 100% rename from static/tip-and-tools/03/screenshot-6.png rename to static/react/tip-and-tools/03/screenshot-6.png diff --git a/static/tip-and-tools/03/screenshot-7.png b/static/react/tip-and-tools/03/screenshot-7.png similarity index 100% rename from static/tip-and-tools/03/screenshot-7.png rename to static/react/tip-and-tools/03/screenshot-7.png diff --git a/static/tip-and-tools/04/screenshot-1.png b/static/react/tip-and-tools/04/screenshot-1.png similarity index 100% rename from static/tip-and-tools/04/screenshot-1.png rename to static/react/tip-and-tools/04/screenshot-1.png diff --git a/static/tip-and-tools/04/screenshot-2.png b/static/react/tip-and-tools/04/screenshot-2.png similarity index 100% rename from static/tip-and-tools/04/screenshot-2.png rename to static/react/tip-and-tools/04/screenshot-2.png diff --git a/static/tip-and-tools/04/screenshot-3.png b/static/react/tip-and-tools/04/screenshot-3.png similarity index 100% rename from static/tip-and-tools/04/screenshot-3.png rename to static/react/tip-and-tools/04/screenshot-3.png diff --git a/static/tip-and-tools/05/screenshot-1.png b/static/react/tip-and-tools/05/screenshot-1.png similarity index 100% rename from static/tip-and-tools/05/screenshot-1.png rename to static/react/tip-and-tools/05/screenshot-1.png diff --git a/static/tip-and-tools/05/screenshot-2.png b/static/react/tip-and-tools/05/screenshot-2.png similarity index 100% rename from static/tip-and-tools/05/screenshot-2.png rename to static/react/tip-and-tools/05/screenshot-2.png diff --git a/static/tip-and-tools/05/screenshot-3.png b/static/react/tip-and-tools/05/screenshot-3.png similarity index 100% rename from static/tip-and-tools/05/screenshot-3.png rename to static/react/tip-and-tools/05/screenshot-3.png diff --git a/static/tip-and-tools/05/screenshot-4.png b/static/react/tip-and-tools/05/screenshot-4.png similarity index 100% rename from static/tip-and-tools/05/screenshot-4.png rename to static/react/tip-and-tools/05/screenshot-4.png diff --git a/static/tip-and-tools/05/screenshot-5.png b/static/react/tip-and-tools/05/screenshot-5.png similarity index 100% rename from static/tip-and-tools/05/screenshot-5.png rename to static/react/tip-and-tools/05/screenshot-5.png diff --git a/static/tip-and-tools/05/screenshot-6.png b/static/react/tip-and-tools/05/screenshot-6.png similarity index 100% rename from static/tip-and-tools/05/screenshot-6.png rename to static/react/tip-and-tools/05/screenshot-6.png diff --git a/static/tip-and-tools/05/screenshot-7.png b/static/react/tip-and-tools/05/screenshot-7.png similarity index 100% rename from static/tip-and-tools/05/screenshot-7.png rename to static/react/tip-and-tools/05/screenshot-7.png diff --git a/static/tip-and-tools/06/screenshot-0.png b/static/react/tip-and-tools/06/screenshot-0.png similarity index 100% rename from static/tip-and-tools/06/screenshot-0.png rename to static/react/tip-and-tools/06/screenshot-0.png diff --git a/static/tip-and-tools/06/screenshot-1.png b/static/react/tip-and-tools/06/screenshot-1.png similarity index 100% rename from static/tip-and-tools/06/screenshot-1.png rename to static/react/tip-and-tools/06/screenshot-1.png diff --git a/static/tip-and-tools/06/screenshot-2.png b/static/react/tip-and-tools/06/screenshot-2.png similarity index 100% rename from static/tip-and-tools/06/screenshot-2.png rename to static/react/tip-and-tools/06/screenshot-2.png diff --git a/static/tip-and-tools/06/screenshot-3.png b/static/react/tip-and-tools/06/screenshot-3.png similarity index 100% rename from static/tip-and-tools/06/screenshot-3.png rename to static/react/tip-and-tools/06/screenshot-3.png diff --git a/static/tip-and-tools/06/screenshot-4.png b/static/react/tip-and-tools/06/screenshot-4.png similarity index 100% rename from static/tip-and-tools/06/screenshot-4.png rename to static/react/tip-and-tools/06/screenshot-4.png diff --git a/static/tip-and-tools/06/screenshot-5.png b/static/react/tip-and-tools/06/screenshot-5.png similarity index 100% rename from static/tip-and-tools/06/screenshot-5.png rename to static/react/tip-and-tools/06/screenshot-5.png diff --git a/static/tip-and-tools/06/screenshot-6.png b/static/react/tip-and-tools/06/screenshot-6.png similarity index 100% rename from static/tip-and-tools/06/screenshot-6.png rename to static/react/tip-and-tools/06/screenshot-6.png diff --git a/static/tip-and-tools/06/screenshot-7.png b/static/react/tip-and-tools/06/screenshot-7.png similarity index 100% rename from static/tip-and-tools/06/screenshot-7.png rename to static/react/tip-and-tools/06/screenshot-7.png diff --git a/static/tip-and-tools/08/screenshot1.png b/static/react/tip-and-tools/08/screenshot1.png similarity index 100% rename from static/tip-and-tools/08/screenshot1.png rename to static/react/tip-and-tools/08/screenshot1.png diff --git a/static/tip-and-tools/09/color-picker.png b/static/react/tip-and-tools/09/color-picker.png similarity index 100% rename from static/tip-and-tools/09/color-picker.png rename to static/react/tip-and-tools/09/color-picker.png diff --git a/static/tip-and-tools/09/color1.png b/static/react/tip-and-tools/09/color1.png similarity index 100% rename from static/tip-and-tools/09/color1.png rename to static/react/tip-and-tools/09/color1.png diff --git a/static/tip-and-tools/09/color2.png b/static/react/tip-and-tools/09/color2.png similarity index 100% rename from static/tip-and-tools/09/color2.png rename to static/react/tip-and-tools/09/color2.png diff --git a/static/tip-and-tools/10/step1.jpg b/static/react/tip-and-tools/10/step1.jpg similarity index 100% rename from static/tip-and-tools/10/step1.jpg rename to static/react/tip-and-tools/10/step1.jpg diff --git a/static/tip-and-tools/10/step2.jpg b/static/react/tip-and-tools/10/step2.jpg similarity index 100% rename from static/tip-and-tools/10/step2.jpg rename to static/react/tip-and-tools/10/step2.jpg diff --git a/static/tip-and-tools/10/step3.jpg b/static/react/tip-and-tools/10/step3.jpg similarity index 100% rename from static/tip-and-tools/10/step3.jpg rename to static/react/tip-and-tools/10/step3.jpg diff --git a/static/tip-and-tools/10/step4.jpg b/static/react/tip-and-tools/10/step4.jpg similarity index 100% rename from static/tip-and-tools/10/step4.jpg rename to static/react/tip-and-tools/10/step4.jpg diff --git a/static/tip-and-tools/10/step5.jpg b/static/react/tip-and-tools/10/step5.jpg similarity index 100% rename from static/tip-and-tools/10/step5.jpg rename to static/react/tip-and-tools/10/step5.jpg diff --git a/static/tip-and-tools/10/step6.jpg b/static/react/tip-and-tools/10/step6.jpg similarity index 100% rename from static/tip-and-tools/10/step6.jpg rename to static/react/tip-and-tools/10/step6.jpg diff --git a/static/tip-and-tools/10/step7.jpg b/static/react/tip-and-tools/10/step7.jpg similarity index 100% rename from static/tip-and-tools/10/step7.jpg rename to static/react/tip-and-tools/10/step7.jpg diff --git a/static/tip-and-tools/11/s1.png b/static/react/tip-and-tools/11/s1.png similarity index 100% rename from static/tip-and-tools/11/s1.png rename to static/react/tip-and-tools/11/s1.png diff --git a/static/tip-and-tools/11/s2.png b/static/react/tip-and-tools/11/s2.png similarity index 100% rename from static/tip-and-tools/11/s2.png rename to static/react/tip-and-tools/11/s2.png diff --git a/static/tip-and-tools/11/s3.png b/static/react/tip-and-tools/11/s3.png similarity index 100% rename from static/tip-and-tools/11/s3.png rename to static/react/tip-and-tools/11/s3.png diff --git a/static/tip-and-tools/11/s4.png b/static/react/tip-and-tools/11/s4.png similarity index 100% rename from static/tip-and-tools/11/s4.png rename to static/react/tip-and-tools/11/s4.png diff --git a/static/tip-and-tools/11/s5.png b/static/react/tip-and-tools/11/s5.png similarity index 100% rename from static/tip-and-tools/11/s5.png rename to static/react/tip-and-tools/11/s5.png diff --git a/static/tip-and-tools/11/s6.png b/static/react/tip-and-tools/11/s6.png similarity index 100% rename from static/tip-and-tools/11/s6.png rename to static/react/tip-and-tools/11/s6.png diff --git a/static/tip-and-tools/11/s7.png b/static/react/tip-and-tools/11/s7.png similarity index 100% rename from static/tip-and-tools/11/s7.png rename to static/react/tip-and-tools/11/s7.png diff --git a/static/tip-and-tools/12/output-1.png b/static/react/tip-and-tools/12/output-1.png similarity index 100% rename from static/tip-and-tools/12/output-1.png rename to static/react/tip-and-tools/12/output-1.png diff --git a/static/tip-and-tools/12/output-2.png b/static/react/tip-and-tools/12/output-2.png similarity index 100% rename from static/tip-and-tools/12/output-2.png rename to static/react/tip-and-tools/12/output-2.png diff --git a/static/tip-and-tools/12/output-3.png b/static/react/tip-and-tools/12/output-3.png similarity index 100% rename from static/tip-and-tools/12/output-3.png rename to static/react/tip-and-tools/12/output-3.png diff --git a/static/tip-and-tools/12/output-5.png b/static/react/tip-and-tools/12/output-5.png similarity index 100% rename from static/tip-and-tools/12/output-5.png rename to static/react/tip-and-tools/12/output-5.png diff --git a/static/tip-and-tools/12/output-6.png b/static/react/tip-and-tools/12/output-6.png similarity index 100% rename from static/tip-and-tools/12/output-6.png rename to static/react/tip-and-tools/12/output-6.png diff --git a/static/tip-and-tools/12/output-7.png b/static/react/tip-and-tools/12/output-7.png similarity index 100% rename from static/tip-and-tools/12/output-7.png rename to static/react/tip-and-tools/12/output-7.png diff --git a/static/tip-and-tools/13/s1 - Copy.png b/static/react/tip-and-tools/13/s1 - Copy.png similarity index 100% rename from static/tip-and-tools/13/s1 - Copy.png rename to static/react/tip-and-tools/13/s1 - Copy.png diff --git a/static/tip-and-tools/13/s1.png b/static/react/tip-and-tools/13/s1.png similarity index 100% rename from static/tip-and-tools/13/s1.png rename to static/react/tip-and-tools/13/s1.png diff --git a/static/tip-and-tools/13/s10.png b/static/react/tip-and-tools/13/s10.png similarity index 100% rename from static/tip-and-tools/13/s10.png rename to static/react/tip-and-tools/13/s10.png diff --git a/static/tip-and-tools/13/s11.png b/static/react/tip-and-tools/13/s11.png similarity index 100% rename from static/tip-and-tools/13/s11.png rename to static/react/tip-and-tools/13/s11.png diff --git a/static/tip-and-tools/13/s12.png b/static/react/tip-and-tools/13/s12.png similarity index 100% rename from static/tip-and-tools/13/s12.png rename to static/react/tip-and-tools/13/s12.png diff --git a/static/tip-and-tools/13/s13.png b/static/react/tip-and-tools/13/s13.png similarity index 100% rename from static/tip-and-tools/13/s13.png rename to static/react/tip-and-tools/13/s13.png diff --git a/static/tip-and-tools/13/s14.png b/static/react/tip-and-tools/13/s14.png similarity index 100% rename from static/tip-and-tools/13/s14.png rename to static/react/tip-and-tools/13/s14.png diff --git a/static/tip-and-tools/13/s15.png b/static/react/tip-and-tools/13/s15.png similarity index 100% rename from static/tip-and-tools/13/s15.png rename to static/react/tip-and-tools/13/s15.png diff --git a/static/tip-and-tools/13/s2.png b/static/react/tip-and-tools/13/s2.png similarity index 100% rename from static/tip-and-tools/13/s2.png rename to static/react/tip-and-tools/13/s2.png diff --git a/static/tip-and-tools/13/s3.png b/static/react/tip-and-tools/13/s3.png similarity index 100% rename from static/tip-and-tools/13/s3.png rename to static/react/tip-and-tools/13/s3.png diff --git a/static/tip-and-tools/13/s4.png b/static/react/tip-and-tools/13/s4.png similarity index 100% rename from static/tip-and-tools/13/s4.png rename to static/react/tip-and-tools/13/s4.png diff --git a/static/tip-and-tools/13/s5.png b/static/react/tip-and-tools/13/s5.png similarity index 100% rename from static/tip-and-tools/13/s5.png rename to static/react/tip-and-tools/13/s5.png diff --git a/static/tip-and-tools/13/s6.png b/static/react/tip-and-tools/13/s6.png similarity index 100% rename from static/tip-and-tools/13/s6.png rename to static/react/tip-and-tools/13/s6.png diff --git a/static/tip-and-tools/13/s7.png b/static/react/tip-and-tools/13/s7.png similarity index 100% rename from static/tip-and-tools/13/s7.png rename to static/react/tip-and-tools/13/s7.png diff --git a/static/tip-and-tools/13/s8.png b/static/react/tip-and-tools/13/s8.png similarity index 100% rename from static/tip-and-tools/13/s8.png rename to static/react/tip-and-tools/13/s8.png diff --git a/static/tip-and-tools/13/s9.png b/static/react/tip-and-tools/13/s9.png similarity index 100% rename from static/tip-and-tools/13/s9.png rename to static/react/tip-and-tools/13/s9.png diff --git a/static/tip-and-tools/14/1.png b/static/react/tip-and-tools/14/1.png similarity index 100% rename from static/tip-and-tools/14/1.png rename to static/react/tip-and-tools/14/1.png diff --git a/static/tip-and-tools/14/2.jpg b/static/react/tip-and-tools/14/2.jpg similarity index 100% rename from static/tip-and-tools/14/2.jpg rename to static/react/tip-and-tools/14/2.jpg diff --git a/static/tip-and-tools/14/3.jpg b/static/react/tip-and-tools/14/3.jpg similarity index 100% rename from static/tip-and-tools/14/3.jpg rename to static/react/tip-and-tools/14/3.jpg diff --git a/static/tip-and-tools/14/4.jpg b/static/react/tip-and-tools/14/4.jpg similarity index 100% rename from static/tip-and-tools/14/4.jpg rename to static/react/tip-and-tools/14/4.jpg diff --git a/static/tip-and-tools/14/5.png b/static/react/tip-and-tools/14/5.png similarity index 100% rename from static/tip-and-tools/14/5.png rename to static/react/tip-and-tools/14/5.png diff --git a/static/tip-and-tools/14/6img.png b/static/react/tip-and-tools/14/6img.png similarity index 100% rename from static/tip-and-tools/14/6img.png rename to static/react/tip-and-tools/14/6img.png diff --git a/static/tip-and-tools/14/7.png b/static/react/tip-and-tools/14/7.png similarity index 100% rename from static/tip-and-tools/14/7.png rename to static/react/tip-and-tools/14/7.png diff --git a/static/tip-and-tools/14/8.png b/static/react/tip-and-tools/14/8.png similarity index 100% rename from static/tip-and-tools/14/8.png rename to static/react/tip-and-tools/14/8.png diff --git a/static/tip-and-tools/14/9.png b/static/react/tip-and-tools/14/9.png similarity index 100% rename from static/tip-and-tools/14/9.png rename to static/react/tip-and-tools/14/9.png diff --git a/static/tip-and-tools/15/1.png b/static/react/tip-and-tools/15/1.png similarity index 100% rename from static/tip-and-tools/15/1.png rename to static/react/tip-and-tools/15/1.png diff --git a/static/tip-and-tools/15/2.png b/static/react/tip-and-tools/15/2.png similarity index 100% rename from static/tip-and-tools/15/2.png rename to static/react/tip-and-tools/15/2.png diff --git a/static/tip-and-tools/16/readme.png b/static/react/tip-and-tools/16/readme.png similarity index 100% rename from static/tip-and-tools/16/readme.png rename to static/react/tip-and-tools/16/readme.png