skip to content

How does a request nested inside folders in a Postman collection reach `auth` or `event` declared on an ancestor?

level: middleimportance: should knowfreq 45%

answer

  1. Nesting is what creates an ancestor
  2. Nothing is indexed; something walks
  3. The walk goes upward from the entry
  4. Position decides, not name or identifier
  5. findInParents is the ancestor walk

basics

~10 s

Because entries nest, a folder is an ancestor of everything inside it. The SDK locates an ancestor-declared auth or event by walking up the parent chain from the entry with findInParents.

solid answer

~50 s

A folder is not a label; it is a node in the tree, and being inside it makes that folder an ancestor. The collection document lets `auth` and `event` be declared on the collection, on a folder or on a request entry. When something needs the declaration that applies to a given entry, nothing is looked up in a registry — the SDK walks the parent chain **upward** from the entry, which is what `findInParents` does. So what a request inherits is a function of **where it sits**: move it into a different folder and it acquires a different ancestor set, and therefore a different candidate set of declarations, without a byte of the request itself changing. Which ancestor's credential declaration ultimately wins, and the order cascaded scripts run in, are separate subjects layered on this one lookup.

code

json · 17 lines
json
{
  "item": [
    {
      "name": "Billing",
      "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{token}}" } ] },
      "event": [ { "listen": "prerequest", "script": { "exec": [ "" ], "type": "text/javascript" } } ],
      "item": [
        {
          "name": "Invoices",
          "item": [
            { "name": "List", "request": { "method": "GET", "url": "https://example.test/invoices" } }
          ]
        }
      ]
    }
  ]
}

go deeper

for a junior

Be ready to say that putting a request inside a folder makes that folder an ancestor, and that declarations on the folder are therefore reachable from the request.

for a middle

Explain the mechanism: nothing is indexed, so resolution is an upward walk over parents from the entry to the collection root, which is what findInParents performs.

for a senior

Show you debug by position: when a request behaves oddly, list its ancestors from the entry to the root and check each one before suspecting the request itself.

for a principal

Own the design consequence: folder depth is an inheritance surface, so a deep tree makes any request's effective behaviour expensive to explain and to review.

## Nesting makes a folder an ancestor In a **Postman collection**, a folder is an entry that carries its own `item` array. Everything inside that array sits *below* the folder in a tree, so the folder is an **ancestor** of each of them — including entries nested several folders further down. That is why folders matter beyond tidiness. The collection document allows `auth` (the credential scheme that applies) and `event` (the scripts attached to a hook) to be declared in three places: on the collection itself, on a folder, and on a request entry. The folder is the middle site, and it exists as a declaration site only because nesting gives it descendants. ## The lookup is a walk, not a table Nothing indexes these declarations. When the SDK needs the `auth` or `event` that applies to a given entry, it starts **at that entry and walks upward through its parents**, examining each ancestor in turn. That upward walk is `findInParents`, and both the credential resolution and the script cascade are built on top of it. Several consequences follow directly from the walk: - **What an entry inherits is a function of its position**, not of its name, not of its identifier, and not of anything written inside the entry itself. - **Moving an entry changes its ancestor set.** Dragging a request from one folder into another need not touch a single byte of that request, yet it changes which declarations can reach it. - **The collection root is the final ancestor.** Because `Collection` is itself the outermost group, a declaration at the top level lies in every entry's parent chain. - **Depth multiplies the places to look.** A request four levels down has four ancestors that could be carrying the `auth` or `event` that explains its behaviour. - **An empty-looking folder is not inert.** A folder with no `request` of its own can still carry the `auth` or `event` its descendants pick up. ## Where a declaration can sit | Declaration site | Which entries can reach it | Typical use | |---|---|---| | Collection root | every entry in the file | what the whole file shares | | Folder | everything nested inside it, at any depth | a section with its own scheme or setup | | Request entry | that one entry | a case that differs from its neighbours | ## What this settles, and what it does not What the tree settles is **reachability**: whether an ancestor's `auth` or `event` is visible to a descendant at all, and that is decided purely by nesting. Two related questions are separate subjects and are not answered by the tree shape: 1. **Which ancestor's credential declaration wins**, and how a declaration that defers or refuses is treated on the way up — that is the credential-inheritance subject. 2. **In what order the scripts collected from several levels actually run** — that is the script-cascade subject. Keeping those apart is worth doing in an interview, because conflating them produces confident answers about resolution rules when the question was only about where a folder sits. ## Reading a nested collection 1. Find the request entry you are explaining. 2. Read **upward**: its folder, that folder's folder, and so on to the collection root. 3. At each level, note whether `auth` or `event` is declared there. 4. Only then reason about which of those apply — the candidate set is fixed by the path, before any resolution rule is considered. ## Common mistakes - Describing folders as a purely visual grouping with no effect on a request's behaviour. - Assuming declarations are copied down into each entry when the file is loaded or imported. - Expecting inheritance to be keyed to an identifier or a name rather than to nesting. - Reading only the immediate parent and stopping, rather than walking to the root. - Believing a request must be moved *and* edited before what it inherits can change.

  • A request is dragged from one folder into another and nothing inside it is edited. Can its behaviour change?
    Yes. Its ancestor set changed, so the `auth` and `event` reachable by the upward walk changed with it. Nothing in the request records what it inherits, which is why a move that looks like tidying can alter how the request is signed or what runs before it.
  • Can a folder that holds no request of its own still affect the requests beneath it?
    Yes. A folder is an entry in its own right and may carry `auth`, `event` and `variable` whether or not anything sits directly under it. Its descendants find those declarations by walking up through it, so an apparently empty grouping level is never inert.

It is a scope chain rather than a lookup table: a name is resolved by walking outward through enclosing scopes, so where the code sits decides what it can see.

saying these in an interview costs you the question

  • Describes folders as purely visual with no effect
  • Says declarations are copied into each entry on import
  • Thinks inheritance is keyed to an identifier or name
  • Reads only the immediate parent, never the root
  • Claims a request must be edited before inheritance changes