{"id":1844,"date":"2024-11-30T09:00:00","date_gmt":"2024-11-30T03:30:00","guid":{"rendered":"https:\/\/geekpython.in\/?p=1844"},"modified":"2024-11-29T22:45:22","modified_gmt":"2024-11-29T17:15:22","slug":"echoapi-for-api-testing-and-debugging","status":"publish","type":"post","link":"https:\/\/geekpython.in\/echoapi-for-api-testing-and-debugging","title":{"rendered":"EchoAPI for API Testing and Debugging"},"content":{"rendered":"\n<p>You might have heard of Thunder Client, a REST API client extension for Visual Studio Code that allows developers to test APIs. Thanks to its lightweight nature, it quickly became the first choice for developers worldwide.<\/p>\n\n\n\n<p>Thunder Client was once completely free, but that\u2019s no longer the case. It has now transitioned to a paid model, pushing many key features behind a paywall. With the free plan offering limited functionality, users have few options left.<\/p>\n\n\n\n<p>Thunder Client used to be a one-stop destination for developers to perform basic API testing and debugging. However, with the shift to a paid model, developers are increasingly turning to alternatives like Postman. Among these, <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=EchoAPI.echoapi-for-vscode\" target=\"_blank\" rel=\"noopener\"><strong>EchoAPI for Visual Studio Code<\/strong><\/a> stands out as a strong and worthy alternative.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1919\" height=\"1030\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-32.png\" alt=\"EchoAPI user interface\" class=\"wp-image-1873\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-32.png 1919w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-32-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-32-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-32-768x412.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-32-1536x824.png 1536w\" sizes=\"auto, (max-width: 1919px) 100vw, 1919px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Why EchoAPI is a Better Alternative?<\/h2>\n\n\n\n<p>While EchoAPI and Thunder Client share some common features, EchoAPI excels in the following areas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Completely Free<\/strong>: EchoAPI is entirely free to use, with a commitment to remain so.<\/li>\n\n\n\n<li><strong>Ultra-Lightweight<\/strong>: Its minimalistic design ensures that it doesn\u2019t burden your system.<\/li>\n\n\n\n<li><strong>No Login Required<\/strong>: Start testing immediately without the need for sign-ups or logins.<\/li>\n\n\n\n<li><strong>Scratchpad Feature<\/strong>: Dive straight into testing APIs without any setup.<\/li>\n\n\n\n<li><strong>Postman Script Compatibility<\/strong>: Migrating from Postman? No problem! EchoAPI supports Postman script syntax, so you don\u2019t need to learn anything new.<\/li>\n\n\n\n<li><strong>Collaboration Ready<\/strong>: Enjoy team workflows for shared testing without extra costs.<\/li>\n\n\n\n<li><strong>Unlimited Requests<\/strong>: There\u2019s no limit to the number of requests you can send.<\/li>\n\n\n\n<li><strong>Unlimited Collection Runs<\/strong>: Run your collections as many times as needed, without restrictions.<\/li>\n\n\n\n<li><strong>Local Storage<\/strong>: Store your data securely and access it from anywhere.<\/li>\n<\/ul>\n\n\n\n<p>Let\u2019s explore these features in detail.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Install EchoAPI<\/h2>\n\n\n\n<p>Getting started with EchoAPI is easy. Simply install it from the Visual Studio Code extensions marketplace:<\/p>\n\n\n\n<p>Search for <strong>\u201cEchoAPI\u201d<\/strong>. Click on the first result and hit <strong>Install<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-31.png\" alt=\"Search and install EchoAPI\" class=\"wp-image-1872\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-31.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-31-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-31-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-31-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-31-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>Once installed, the EchoAPI logo will appear in the sidebar, giving you access to the extension\u2019s user interface (UI).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-30.png\" alt=\"EchoAPI logo in the sidebar\" class=\"wp-image-1871\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-30.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-30-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-30-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-30-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-30-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>Now we can start testing our APIs. Let\u2019s take a tour of the UI and explore EchoAPI functionalities.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Get Started with EchoAPI<\/h2>\n\n\n\n<p>EchoAPI provides demo APIs to help you explore its features. Let\u2019s use these demo APIs for testing and debugging before moving on to testing our own.<\/p>\n\n\n\n<p>For example, the first API in the <strong>\u201cSamples\u201d<\/strong> collection creates a new user with fields like <code>id<\/code>, <code>username<\/code>, <code>firstName<\/code>, <code>lastName<\/code>, <code>email<\/code>, <code>password<\/code>, <code>phone<\/code>, and <code>userStatus<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-29.png\" alt=\"Demo API\" class=\"wp-image-1870\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-29.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-29-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-29-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-29-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-29-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>Let\u2019s tweak this data and send a request to the server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-28.png\" alt=\"Tweak demo API\" class=\"wp-image-1869\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-28.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-28-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-28-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-28-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-28-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>After sending the request, we can see a successful response (HTTP status code <strong>200<\/strong>).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-27.png\" alt=\"Demo API response\" class=\"wp-image-1868\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-27.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-27-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-27-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-27-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-27-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>Here, we can also test Server-sent Events (SSE) requests, which are used to send real-time updates to clients. These are often used in web applications for real-time notifications, live data feeds, or status updates.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-26.png\" alt=\"SSE request test\" class=\"wp-image-1867\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-26.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-26-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-26-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-26-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-26-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Running Collections Without Limit<\/h2>\n\n\n\n<p>One of EchoAPI\u2019s standout features is its unlimited collection runs. Here\u2019s how you can run a collection:<\/p>\n\n\n\n<p>Navigate to the <strong>Tests<\/strong> tab and select the collection or folder containing your requests.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-25.png\" alt=\"Run collection\" class=\"wp-image-1866\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-25.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-25-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-25-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-25-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-25-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>In this case, we selected the <strong>\u201cSamples\u201d<\/strong> collection and then clicked on the <strong>Run All<\/strong> button. It brings up this interface where we can set configurations to the test.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-24.png\" alt=\"Select collection folder\" class=\"wp-image-1865\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-24.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-24-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-24-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-24-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-24-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>You can configure the following options:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Iterations<\/strong>: Specify how many times the test should execute.<\/li>\n\n\n\n<li><strong>Intervals<\/strong>: Set time intervals between each request.<\/li>\n\n\n\n<li><strong>Data<\/strong>: Upload a <code>.csv<\/code> file containing test data.<\/li>\n\n\n\n<li><strong>Environment<\/strong>: Choose the testing environment with pre-configured environment variables.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-23.png\" alt=\"Configure collection test\" class=\"wp-image-1864\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-23.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-23-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-23-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-23-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-23-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>In this case, the iterations are set to <code>3<\/code>, and the interval between the execution of each request is set to <code>1000<\/code> ms (<code>1<\/code> second).<\/p>\n\n\n\n<p>Once configured, click <strong>Run<\/strong> to execute the collection. This will start executing requests with the specified configurations.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-22.png\" alt=\"Collection stats\" class=\"wp-image-1863\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-22.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-22-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-22-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-22-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-22-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>A report is generated showing the stats of the performed test and if we click on any request, we\u2019ll see an individual report of the request.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-21.png\" alt=\"Individual request report\" class=\"wp-image-1862\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-21.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-21-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-21-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-21-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-21-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Setting up Environment Variable<\/h2>\n\n\n\n<p>We can set up environment variables like API keys, URLs, authentication tokens, etc. Depending on the sensitivity of the data, these variables can be used in the header or body of the request.<\/p>\n\n\n\n<p>Let\u2019s see how we can set up an environment in EchoAPI.<\/p>\n\n\n\n<p>Access the environment setup interface via the <strong>three dots menu<\/strong> in the top left corner or directly from the request interface.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-20.png\" alt=\"Access enviroment tab\" class=\"wp-image-1861\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-20.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-20-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-20-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-20-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-20-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>Click on the <strong>\u201cNew Environment\u201d<\/strong> button to set up a new environment.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-19.png\" alt=\"Create new environment\" class=\"wp-image-1860\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-19.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-19-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-19-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-19-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-19-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>We can set a name for the environment, the base URL of the server, and environment variables.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-18.png\" alt=\"Set up environment\" class=\"wp-image-1859\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-18.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-18-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-18-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-18-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-18-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Testing APIs<\/h2>\n\n\n\n<p>Here\u2019s a practical example using a Python FastAPI application with three routes. We\u2019ll test these routes using EchoAPI.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:python decode:true \" >from fastapi import FastAPI, HTTPException, Depends\nfrom pydantic import BaseModel\nfrom typing import List\nfrom fastapi.security import OAuth2PasswordBearer\nimport jwt\nimport datetime\n\napp = FastAPI()\noauth2_scheme = OAuth2PasswordBearer(tokenUrl=\"token\")\n\nkey = 'secretkey'\n\nbooks = []\ncurrent_id = 1\n\nclass Book(BaseModel):\n    title: str\n    author: str\n    price: float\n\nclass BookOut(Book):\n    id: int\n\ndef authenticate_user(token: str = Depends(oauth2_scheme)):\n    try:\n        payload = jwt.decode(token, key, algorithms=[\"HS256\"])\n        return payload\n    except jwt.ExpiredSignatureError:\n        raise HTTPException(status_code=401, detail=\"Token has expired\")\n    except jwt.InvalidTokenError:\n        raise HTTPException(status_code=401, detail=\"Invalid token\")\n\n@app.post(\"\/token\")\ndef get_token():\n    expiration = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=1)\n    token = jwt.encode({\"exp\": expiration}, key, algorithm=\"HS256\")\n    return {\"access_token\": token, \"token_type\": \"bearer\"}\n\n@app.post(\"\/books\", response_model=BookOut)\ndef create_book(book: Book, user: dict = Depends(authenticate_user)):\n    global current_id\n    new_book = book.model_dump()\n    new_book[\"id\"] = current_id\n    books.append(new_book)\n    current_id += 1\n    return new_book\n\n@app.get(\"\/books\", response_model=List[BookOut])\ndef list_books(user: dict = Depends(authenticate_user)):\n    return books<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Setting up EchoAPI for Testing<\/h3>\n\n\n\n<p>First, we can create a folder, let\u2019s say <strong>Books<\/strong>, to make our requests more organized.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-17.png\" alt=\"Create a collection\" class=\"wp-image-1858\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-17.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-17-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-17-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-17-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-17-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>Next, we need to create individual requests within the <strong>\u201cBooks\u201d<\/strong> folder.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-16.png\" alt=\"Create requests within collection\" class=\"wp-image-1857\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-16.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-16-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-16-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-16-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-16-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>We created three requests as shown in the image below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-15.png\" alt=\"Requests\" class=\"wp-image-1856\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-15.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-15-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-15-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-15-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-15-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>According to the code, we need to generate an authentication token, so we need to send a <code>POST<\/code> request to <code>http:\/\/127.0.0.1:8000\/token<\/code> to obtain an auth token and then we can use this token in other requests to authenticate a user.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-14.png\" alt=\"Generate auth token\" class=\"wp-image-1855\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-14.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-14-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-14-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-14-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-14-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Authentication<\/h3>\n\n\n\n<p>If we try to hit this URL (<code>http:\/\/127.0.0.1:8000\/books<\/code>) to create a book without passing the auth token, we\u2019ll get an error in the response.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-13.png\" alt=\"Not authenticated\" class=\"wp-image-1854\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-13.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-13-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-13-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-13-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-13-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>We need to pass the previously generated auth token in the <strong>\u201cAuth\u201d<\/strong> section.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-12.png\" alt=\"Set authentication token\" class=\"wp-image-1853\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-12.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-12-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-12-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-12-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-12-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>EchoAPI supports various authentication methods such as API Key, Basic Auth, and JWT Bearer. You can choose the type of authentication required in your project.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Debugging APIs<\/h3>\n\n\n\n<p>We can debug the APIs from the <strong>\u201cPost-response\u201d<\/strong> section. In this section, we can write custom scripts (<strong>Postman script<\/strong>) and set assertions to debug APIs, extract variables for dynamic testing, and simulate delays in API execution.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-11.png\" alt=\"Debug APIs\" class=\"wp-image-1852\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-11.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-11-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-11-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-11-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-11-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>Let\u2019s perform a simple debugging. We are setting an assertion for the response code equal to <code>200<\/code> and deliberately making a mistake in the request.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-10.png\" alt=\"Set assertions\" class=\"wp-image-1851\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-10.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-10-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-10-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-10-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-10-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>We can see <code>detail<\/code> in the response indicating that the <code>price<\/code> field is missing and it returned the response code <code>422<\/code>, which is not equal to <code>200<\/code>, so the assertion failed.<\/p>\n\n\n\n<p>This is not limited to response code only, we can set assertions for different target objects.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-9.png\" alt=\"Target object for assertion\" class=\"wp-image-1850\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-9.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-9-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-9-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-9-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-9-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">More Features<\/h2>\n\n\n\n<p><strong>Server sent event Requests<\/strong>:<\/p>\n\n\n\n<p>Server-sent events (SSE) enable a server to push real-time updates to the client over a single HTTP connection. They are widely used for real-time notifications, live data feeds, status updates, or chat applications.<\/p>\n\n\n\n<p>With <strong>Thunder Client<\/strong>, creating and testing SSE requests is locked behind a paywall. This makes it less appealing for developers who rely on free tools for basic functionality.<\/p>\n\n\n\n<p><strong>EchoAPI<\/strong>, however, provides full support for SSE requests <strong>free of charge<\/strong>. Here\u2019s how EchoAPI simplifies SSE testing:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Ease of Setup<\/strong>: You can create and test SSE requests directly within EchoAPI\u2019s user interface, without any advanced configuration.<\/li>\n\n\n\n<li><strong>Real-Time Stream Support<\/strong>: It allows you to see real-time data streams as they are sent from the server.<\/li>\n\n\n\n<li><strong>No Cost<\/strong>: Unlike Thunder Client, there are no charges or restrictions for using this feature.<\/li>\n<\/ol>\n\n\n\n<p>For example, you can set up an SSE endpoint in your API, like <code>\/notifications<\/code>, and use EchoAPI to connect to it. EchoAPI will display live updates sent by the server in a clean and intuitive interface.<\/p>\n\n\n\n<p><strong>Imports data from cURL:<\/strong><\/p>\n\n\n\n<p>cURL is a command-line tool used to send HTTP requests. Developers often use cURL commands to test APIs quickly in a terminal. However, when transitioning to a GUI-based tool like EchoAPI, manually re-entering the details of API requests can be tedious and error-prone.<\/p>\n\n\n\n<p>Here\u2019s how it works:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Copy cURL Command<\/strong>: Simply copy the cURL command from your terminal or documentation.<\/li>\n\n\n\n<li><strong>Paste in EchoAPI<\/strong>: Select the <strong>Import cURL<\/strong> option in EchoAPI, and paste the cURL command.<\/li>\n\n\n\n<li><strong>Automatic Conversion<\/strong>: EchoAPI automatically parses the command and converts it into a structured API request within its interface.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-8.png\" alt=\"Import data from cURL\" class=\"wp-image-1849\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-8.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-8-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-8-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-8-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-8-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p><strong>Import data from Postman:<\/strong><\/p>\n\n\n\n<p>Postman is one of the most popular API testing tools, often used for creating and managing collections of API requests. If you\u2019re moving from Postman to EchoAPI, re-creating collections from scratch can be a daunting task.<\/p>\n\n\n\n<p>Here\u2019s how it works:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Export from Postman<\/strong>: In Postman, go to the collection you want to migrate, click on the options menu (three dots), and choose <strong>Export<\/strong>. Postman will generate a JSON file containing all the details of the collection.<\/li>\n\n\n\n<li><strong>Import to EchoAPI<\/strong>: Select the <strong>Import from Postman<\/strong> option in EchoAPI, and upload the Postman JSON file.<\/li>\n\n\n\n<li><strong>Seamless Integration<\/strong>: EchoAPI will parse the file and recreate the collection, including all requests, headers, parameters, and body configurations.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-7.png\" alt=\"Import data from Postman\" class=\"wp-image-1848\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-7.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-7-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-7-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-7-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-7-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Team Collaboration and Data Sync<\/h2>\n\n\n\n<p>To collaborate with the team and sync data in EchoAPI, we need to sign up. After signing up for EchoAPI, we can push data to EchoAPI storage easily.<\/p>\n\n\n\n<p>Click on the cloud icon and then select the workspace folder where the data will be stored and then select the collection to push to EchoAPI.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1032\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-6.png\" alt=\"Push data to EchoAPI storage\" class=\"wp-image-1847\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-6.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-6-300x161.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-6-1024x550.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-6-768x413.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-6-1536x826.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>Now we can easily access the data from the <a href=\"https:\/\/www.echoapi.com\/download\" target=\"_blank\" rel=\"noopener\">EchoAPI desktop app<\/a> or <a href=\"https:\/\/app.echoapi.com\/\" target=\"_blank\" rel=\"noopener\">Webapp<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"924\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-5.png\" alt=\"Access data from EchoAPI webapp\" class=\"wp-image-1846\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-5.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-5-300x144.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-5-1024x493.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-5-768x370.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-5-1536x739.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>We can invite our team members through URL in the EchoAPI web app or desktop app. Click on the <strong>\u201cInvite\u201d<\/strong> button in the top right corner, and then click on the <strong>\u201cCopy Link\u201d<\/strong> button to copy the invitation link.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"916\" src=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-4.png\" alt=\"Collaborate with team\" class=\"wp-image-1845\" srcset=\"https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-4.png 1920w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-4-300x143.png 300w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-4-1024x489.png 1024w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-4-768x366.png 768w, https:\/\/geekpython.in\/wp-content\/uploads\/2024\/11\/image-4-1536x733.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>While Thunder Client once ruled as a lightweight API testing extension for Visual Studio Code, its shift to a paid model has left many developers searching for viable alternatives. EchoAPI emerges as a strong contender, offering a feature-rich, completely free, and ultra-lightweight solution tailored for seamless API testing and debugging.<\/p>\n\n\n\n<p>With its no-login requirement, Postman script compatibility, limitless testing capabilities, and team collaboration features, EchoAPI sets itself apart as a powerful tool for both individual developers and teams. Its intuitive interface, support for server-sent events, and extensive customization options make it a go-to choice for API testing directly within VS Code.<\/p>\n\n\n\n<p>If you&#8217;re looking for an efficient, no-cost alternative to Thunder Client that doesn\u2019t compromise on functionality, EchoAPI is worth exploring.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>That\u2019s all for now.<\/strong><\/p>\n\n\n\n<p><strong>Keep Coding\u270c\u270c.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>You might have heard of Thunder Client, a REST API client extension for Visual Studio Code that allows developers to test APIs. Thanks to its lightweight nature, it quickly became the first choice for developers worldwide. Thunder Client was once completely free, but that\u2019s no longer the case. It has now transitioned to a paid [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1875,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[],"footnotes":""},"categories":[71],"tags":[],"class_list":["post-1844","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-misc","entry","has-media"],"_links":{"self":[{"href":"https:\/\/geekpython.in\/wp-json\/wp\/v2\/posts\/1844","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekpython.in\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekpython.in\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekpython.in\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekpython.in\/wp-json\/wp\/v2\/comments?post=1844"}],"version-history":[{"count":2,"href":"https:\/\/geekpython.in\/wp-json\/wp\/v2\/posts\/1844\/revisions"}],"predecessor-version":[{"id":1876,"href":"https:\/\/geekpython.in\/wp-json\/wp\/v2\/posts\/1844\/revisions\/1876"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/geekpython.in\/wp-json\/wp\/v2\/media\/1875"}],"wp:attachment":[{"href":"https:\/\/geekpython.in\/wp-json\/wp\/v2\/media?parent=1844"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekpython.in\/wp-json\/wp\/v2\/categories?post=1844"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekpython.in\/wp-json\/wp\/v2\/tags?post=1844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}