<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nicu Micle</title>
    <description>The latest articles on DEV Community by Nicu Micle (@nicumicle).</description>
    <link>https://dev.to/nicumicle</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F783895%2Ff3965d68-625c-4f8e-83c6-12b0fc229042.jpeg</url>
      <title>DEV Community: Nicu Micle</title>
      <link>https://dev.to/nicumicle</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nicumicle"/>
    <language>en</language>
    <item>
      <title>Meet parallelHTTP — A Simple Tool to Stress-Test Your APIs</title>
      <dc:creator>Nicu Micle</dc:creator>
      <pubDate>Sat, 13 Dec 2025 06:43:18 +0000</pubDate>
      <link>https://dev.to/nicumicle/meet-parallelhttp-a-simple-tool-to-stress-test-your-apis-45ph</link>
      <guid>https://dev.to/nicumicle/meet-parallelhttp-a-simple-tool-to-stress-test-your-apis-45ph</guid>
      <description>&lt;p&gt;In a world where backend systems and APIs are the backbone of many web services, testing their performance and robustness under load is essential. That's where &lt;a href="https://github.com/nicumicle/parallelhttp" rel="noopener noreferrer"&gt;parallelhttp&lt;/a&gt; comes in — a lightweight, open-source tool designed to make it easy to send many HTTP requests in parallel, see how your server behaves, measure latency and success rate, and export results for further analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is ParallelHTTP
&lt;/h2&gt;

&lt;p&gt;ParallelHTTP is a minimalistic but functional tool that lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Send multiple HTTP requests in parallel. &lt;/li&gt;
&lt;li&gt;Configure method (GET, POST, etc.), endpoint URL, request body, and timeouts.&lt;/li&gt;
&lt;li&gt;Track response times and status codes. &lt;/li&gt;
&lt;li&gt;Get an aggregated summary: success/error counts, average latency, latency percentiles. &lt;/li&gt;
&lt;li&gt;Export responses to CSV for later inspection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It ships with multiple "interfaces", depending on how you want to use it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web UI&lt;/strong&gt;: for interactive testing via browser. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI mode&lt;/strong&gt;: quick testing from terminal — ideal for automation, scripts, or CI. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker image&lt;/strong&gt;: to containerize usage, making integration with other tooling easier. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;REST API endpoint&lt;/strong&gt;: If you prefer to programmatically trigger loads or integrate with other systems, parallelhttp offers that too.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Parallel HTTP Requests — And How parallelHTTP Fits In
&lt;/h2&gt;

&lt;p&gt;Making many HTTP requests in parallel is a common approach when you want to &lt;strong&gt;stress test&lt;/strong&gt;, &lt;strong&gt;benchmark&lt;/strong&gt;, or &lt;strong&gt;load-test&lt;/strong&gt; APIs or web services. Rather than issuing requests serially (one after the other), parallel requests let you simulate concurrent clients, which is often closer to real-world usage, especially under load or when many clients access your service simultaneously.&lt;/p&gt;

&lt;p&gt;There are many ways to implement parallelism: e.g. using threading, asynchronous programming, or language-specific libraries. For instance, in Python you might use threads or async libraries to parallelize HTTP calls.&lt;/p&gt;

&lt;p&gt;But the appeal of parallelhttp is that it bundles everything together — UI, CLI, REST API — so you don't need to write custom scripts or glue code. For developers or QA engineers who just want to spin up a quick load test, parallelhttp provides an "out-of-the-box" solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to install parallelHTTP
&lt;/h2&gt;

&lt;p&gt;You can use ParallelHTTP via &lt;strong&gt;binary&lt;/strong&gt;, &lt;strong&gt;Docker&lt;/strong&gt;, &lt;strong&gt;Web UI&lt;/strong&gt;, or &lt;strong&gt;CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Install Using Binaries (CLI mode)
&lt;/h3&gt;

&lt;p&gt;Download the latest release from:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/nicumicle/parallelhttp/releases" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub Releases&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./parallelhttp &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  -duration duration
        Max duration for all calls. Example: 0-&amp;gt;no limit, 1ms, 1s, 10m
  -endpoint string
        Request endpoint to be called.
  -format string
        Response format. One of: text, yaml, json. Default json. (default "json")
  -method string
        Request Method. Default GET. (default "GET")
  -parallel int
        Number of parallel calls. Default 1. (default 1)
  -timeout duration
        Request timeout. Default 10s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usage example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./parallelhttp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:8080/test &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--parallel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--method&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;GET &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2s &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10s &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;json 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;will output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"requests"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"response"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"status_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-12-02T04:39:26.450811405+01:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;176680135&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"duration_h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"176.680135ms"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"error_message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"response"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"status_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-12-02T04:39:26.450838753+01:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;177105875&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"duration_h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"177.105875ms"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"error_message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"response"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"status_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-12-02T04:39:26.450989804+01:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;176999320&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"duration_h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"176.99932ms"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"error_message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"response"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"status_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-12-02T04:39:26.450761076+01:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;177158817&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"duration_h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"177.158817ms"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"error_message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"response"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"status_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-12-02T04:39:26.450879196+01:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;179940733&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"duration_h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"179.940733ms"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"error_message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stats"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start_time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-12-02T04:39:26.450727731+01:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"end_time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-12-02T04:39:26.630824982+01:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"180.097251ms"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"latency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"p50"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"177.105875ms"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"p90"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"179.940733ms"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"p99"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"179.940733ms"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Web UI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="nt"&gt;-it&lt;/span&gt; nicumicle/parallelhttp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open in browser:&lt;br&gt;
👉 &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1qv1ufqgeyadw7a89ggt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1qv1ufqgeyadw7a89ggt.png" alt="Web UI" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you select an endpoint and click "Run", you will get the results:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8o5whsq2y80zdxjdtkpm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8o5whsq2y80zdxjdtkpm.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Cases — When parallelHTTP Shines
&lt;/h2&gt;

&lt;p&gt;Here are a few scenarios where using parallelhttp can be especially useful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API performance testing&lt;/strong&gt;: want to know how your endpoint behaves when hit 100, 1000 or 10000 times concurrently — parallelhttp can simulate load and report response times, errors, and timeouts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Benchmarking new server versions&lt;/strong&gt;: deploy a new version and compare latency or error rate with the previous one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stress testing/load testing before production&lt;/strong&gt;: especially useful if you're about to launch a feature or expect a spike in traffic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Regression testing for stability under load&lt;/strong&gt;: integrate into CI/CD to automatically run parallel tests after changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Exporting detailed metrics for analysis&lt;/strong&gt;: thanks to CSV export and aggregated stats, you can plug results into spreadsheets or graphs to track trends.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://github.com/nicumicle/parallelhttp" rel="noopener noreferrer"&gt;parallelHTTP&lt;/a&gt; serves a very real need: a straightforward tool for sending parallel HTTP requests that measures latency, status codes, and exports results. For developers, QA engineers, or anyone needing quick API stress-tests, it’s a neat addition to the toolbox.&lt;/p&gt;

&lt;p&gt;If you’re curious, check the &lt;a href="https://github.com/nicumicle/parallelhttp" rel="noopener noreferrer"&gt;repository&lt;/a&gt; and play with your APIs.&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>api</category>
      <category>stresstest</category>
    </item>
    <item>
      <title>JWT in WordPress - Connect Mobile Apps with WordPress</title>
      <dc:creator>Nicu Micle</dc:creator>
      <pubDate>Sat, 08 Jan 2022 07:45:14 +0000</pubDate>
      <link>https://dev.to/nicumicle/jwt-in-wordpress-connect-mobile-apps-with-wordpress-4ecn</link>
      <guid>https://dev.to/nicumicle/jwt-in-wordpress-connect-mobile-apps-with-wordpress-4ecn</guid>
      <description>&lt;h2&gt;
  
  
  What is Simple JWT Login?
&lt;/h2&gt;

&lt;p&gt;Simple JWT Login is a &lt;strong&gt;FREE&lt;/strong&gt; WordPress plugin that allows you to use a JWT on WordPress REST endpoints.&lt;/p&gt;

&lt;p&gt;The main purpose of this plugin is to allow Mobile apps, or other websites to access the content from a WordPress website via REST endpoints in a secure way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some Awesome Features.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AUTO LOGIN&lt;/strong&gt;: You are able to auto-login into a WordPress website with a JWT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;REGISTER USERS&lt;/strong&gt;: API endpoint that allows you to register new users in WordPress.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DELETE USERS&lt;/strong&gt;: Delete Users with JWT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AUTHENTICATE USERS&lt;/strong&gt;: API endpoint to Generate a JWT, refresh JWT and invalidate JWT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LIMIT ACCESS BY IP ADDRESS&lt;/strong&gt;: Limit access to Simple-JWT-Login only for specific IP addresses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CREATE USERS WITH DIFFERENT ROLES&lt;/strong&gt;: You are able to create multiple users with different roles on the same endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;INTEGRATES WELL WITH OTHER PLUGINS&lt;/strong&gt;: This plugin works well in combination with other plugins that extends the WordPRess REST API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ALLOW JWT USAGE ON OTHER ENDPOINTS&lt;/strong&gt;: Add a JWT to requests for other api endpoints and you will act as an authenticated user.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PROTECT ENDPOINTS&lt;/strong&gt;: Protect endpoints for being accessed without a JWT. This way, you can limit the access to your endpoints only to authenticated users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CORS SUPPORT&lt;/strong&gt;: CORS support for your API endpoints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RESET PASSWORD&lt;/strong&gt;: You can request password change via API call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CHANGE PASSWORD&lt;/strong&gt;: You can change users password with an API call.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How the plugin looks like?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugin Dashboard&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06torgo4c2ca8sufkrbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06torgo4c2ca8sufkrbq.png" alt="Dashboard" width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;General Settings&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1sbz9m2dqqsdef9nt31.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1sbz9m2dqqsdef9nt31.png" alt="General Settings" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to install the plugin?
&lt;/h2&gt;

&lt;p&gt;Here’s how you install and activate the Simple-JWT-login plugin:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the Plugins menu in WordPress and click Add New&lt;/li&gt;
&lt;li&gt;Search for 'Simple JWT Login' and select Install Now&lt;/li&gt;
&lt;li&gt;Activate the plugin when prompted&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the plugin from &lt;a href="https://wordpress.org/plugins/simple-jwt-login" rel="noopener noreferrer"&gt;https://wordpress.org/plugins/simple-jwt-login&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Upload the zip file in WordPress&lt;/li&gt;
&lt;li&gt;Activate the plugin&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  SDK
&lt;/h2&gt;

&lt;p&gt;Currently I've implemented only the PHP SDK, that can be found here: &lt;a href="https://github.com/nicumicle/simple-jwt-login-client-php" rel="noopener noreferrer"&gt;https://github.com/nicumicle/simple-jwt-login-client-php&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm planning in the near feature to release a JS SDK.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;p&gt;You can find more details about the plugin on &lt;a href="https://simplejwtlogin.com" rel="noopener noreferrer"&gt;https://simplejwtlogin.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribution
&lt;/h2&gt;

&lt;p&gt;Any feedback is welcomed. Feel free to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create a topic on &lt;a href="https://wordpress.org/support/plugin/simple-jwt-login/" rel="noopener noreferrer"&gt;https://wordpress.org/support/plugin/simple-jwt-login/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;or create an issue on &lt;a href="https://github.com/nicumicle/simple-jwt-login" rel="noopener noreferrer"&gt;https://github.com/nicumicle/simple-jwt-login&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>wordpress</category>
      <category>php</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
