惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
B
Blog RSS Feed
I
InfoQ
N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
Microsoft Azure Blog
Microsoft Azure Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
H
Help Net Security
L
LangChain Blog
M
MIT News - Artificial intelligence
Y
Y Combinator Blog
aimingoo的专栏
aimingoo的专栏

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Stop juggling base URLs and tokens — API environments in ...
Mean · 2026-05-14 · via DEV Community

Every developer knows the pain. You have a working request against your local server, and then you need to test the same thing against staging — so you manually swap the base URL. Then prod. Then you realize you forgot to update the auth token. Then a teammate grabs your collection and nothing works because all the values are hard-coded to your machine.

There is a better way.

Environments and {{variables}} in APIKumo

APIKumo has a first-class environment system. Instead of hard-coding values into your requests, you wrap them in double curly braces:

{{baseUrl}}/users/{{userId}}
Authorization: Bearer {{accessToken}}

Enter fullscreen mode Exit fullscreen mode

At send-time, APIKumo resolves every {{variable}} from whichever environment is currently active. Switching from dev to staging to prod is a single dropdown click — your requests don't change at all.

Setting up your first environment

Inside any collection, open Environments and create one per context: local, staging, production. Each environment holds key-value pairs:

Key local staging production
baseUrl http://localhost:3000 https://api-staging.example.com https://api.example.com
accessToken dev-token-abc stg-token-xyz (leave blank — set at runtime)
timeout 5000 10000 10000

Values are scoped per environment, so the same variable name resolves differently depending on context. Team members can have their own local overrides without touching the shared collection.

Using variables everywhere

Variables resolve in every field of a request:

  • URL{{baseUrl}}/v2/orders/{{orderId}}
  • HeadersX-Tenant-Id: {{tenantId}}
  • Body{"user": "{{userId}}", "plan": "{{plan}}"}
  • Query params?apiKey={{apiKey}}&region={{region}}
  • Auth — any auth scheme that takes a token string

You can even nest them in JSON bodies inside the Monaco editor, which gives you full syntax highlighting and auto-complete while variable placeholders stay readable.

Capturing values automatically with post-processors

Here is where it gets powerful. Rather than manually copying a token from one response and pasting it into an environment, you can let APIKumo do it for you with a post-processor.

On your /auth/login request, add a post-processor:

// Extract the token from the response body and save it to the active environment
env.set("accessToken", response.body.token);

Enter fullscreen mode Exit fullscreen mode

Now every time you run that login request, the token is automatically written to the current environment. The next request in the flow picks it up via {{accessToken}} — no clipboard gymnastics needed.

You can capture via:

  • JSONPath$.data.access_token
  • Regex — match any pattern in the raw response
  • Headerresponse.headers["X-Session-Id"]
  • Custom JS — full scripting for anything non-standard

Pre-processors that generate values on the fly

Some values can't be stored statically — HMAC signatures, UNIX timestamps, nonces, request IDs. Pre-processors run before the request is sent and can write computed values into the environment:

// Generate a UNIX timestamp nonce
const nonce = Math.floor(Date.now() / 1000).toString();
env.set("requestNonce", nonce);

// Compute an HMAC-SHA256 signature
const payload = `${env.get("method")}\n${env.get("path")}\n${nonce}`;
const sig = hmac("sha256", env.get("secret"), payload);
env.set("signature", sig);

Enter fullscreen mode Exit fullscreen mode

Your request headers then reference {{requestNonce}} and {{signature}} — the pre-processor fires first, so by the time the request goes out, every value is fresh and correct.

The workflow in practice

Here is a realistic flow for a payment API:

  1. Activate staging environment — one click.
  2. Run POST /auth/token — post-processor captures accessToken.
  3. Run POST /payments/create — body uses {{amount}}, {{currency}}, {{customerId}}; header uses {{accessToken}}.
  4. Post-processor captures paymentId from the response.
  5. Run GET /payments/{{paymentId}}/status — uses the captured ID automatically.

The entire chain is repeatable, shareable, and environment-agnostic. Switch to production, run the same sequence, and nothing in the requests changes — only the values differ.

Sharing environments safely

When you share a collection with your team, environment structure travels with it (the keys), but sensitive values can be kept local. Anyone who clones the collection sees the variable names and knows what to fill in; they supply their own credentials without ever exposing yours in the shared file.

For non-sensitive defaults (base URLs, feature flags, timeout values), you can commit the full environment so new teammates are productive from the first run.

Wrapping up

The {{variable}} pattern sounds simple, but it is the foundation that makes everything else in APIKumo composable. Pre-processors write values in, post-processors capture values out, and environments keep it all context-aware. The result is an API workflow that travels cleanly from laptop to laptop and from environment to environment — with zero manual find-and-replace.

If you have not tried environments in APIKumo yet, sign in free and set one up in about two minutes.

— 🌐 apikumo.com • 📖 apikumo.com/blog • 📩 support@apikumo.com