Accept text/html;q=0, */*;q=1 excludes HTML while JSON retains quality 1. A wider wildcard does not override the specific exclusion.

Accept headers let the server negotiate a reply

Negotiation selects among representations the server can actually produce. Request preferences are inputs to that decision, not evidence that the response will satisfy them. A client still needs to inspect the selected representation. Vary records the request dimensions relevant to reuse; it does not identify the chosen format, language, or compression method. ...

November 23, 2027 · 4 min · XB Field Notes
The article’s new message contains id and note. An old binary relay can retain the unknown note; converting the old message object through JSON emits known fields and drops note. The final parser can succeed after that loss.

Protobuf compatibility changes at a JSON boundary

A schema change can be safe for binary messages and unsafe for a JSON gateway handling the same service. Protobuf’s binary format identifies fields by number; ProtoJSON normally exposes their names. Review compatibility as a matrix of producers, consumers, and transformations. A successful compile or one pair of compatible endpoints does not prove that every relay preserves the information they exchange. ...

November 19, 2027 · 5 min · XB Field Notes
Three attempts carrying the same key converge on one stored order; action identity remains stable across attempts.

Idempotency keys are client promises

An idempotency key names an intended action, not a transmission attempt. When a service supports it, the client sends the same key when retrying that action after an uncertain result. Generating a new key for every retry tells the server something different: this is another action, which may legitimately produce another business effect. ...

January 20, 2027 · 6 min · XB Field Notes
A table for GET /status compares selected HTML with schematic strong ETag H and JSON with schematic strong ETag J under If-None-Match J: HTML returns 200, while JSON returns 304. Different bytes have different strong tags.

Accept plus Vary let one URL answer in several formats

One resource can have an HTML view for people and a JSON representation for programs. Sharing a URL is useful only when the origin and its intermediaries preserve that distinction. The endpoint must select an available format, serialize it honestly, describe its cache variation, and validate the selected representation rather than some other version of the same resource. ...

January 19, 2027 · 5 min · XB Field Notes
The Go fixture’s write counter stays at zero for GET and HEAD, rises to two for repeated PUT new, and remains two when a 65-byte PUT is rejected by the 64-byte limit.

HTTP methods describe the intent

A URL identifies a target resource; the request method describes the operation the client asks the origin to apply. Together they form a contract read by the server, caches, proxies, crawlers, and retrying clients. A method is not a decoration on a path. It is a promise about the intended effect, and infrastructure can only make safe decisions when that promise is honest. ...

October 24, 2026 · 7 min · XB Field Notes
Tenant, operation, and action key form the fixture’s scoped identity. Business effect and receipt commit together in one database; matching requests with retained records replay the saved result.

Idempotency keys scope one logical action

An idempotency key identifies one logical action only within a service’s defined scope and retention window. Reusing the same text is not a universal exactly-once guarantee. The service must associate that identity with the right principal and operation, coordinate competing attempts, and retain enough authoritative information to recognize the action later. ...

October 12, 2026 · 7 min · XB Field Notes
Repeating PUT first on /item preserves one stored value while statuses change from 201 to 204. Repeating POST same on /events creates two entries with distinct Locations.

HTTP methods express a contract you must implement

An HTTP method describes the action requested on a target resource. Clients and intermediaries use those semantics when deciding whether to fetch, cache, or retry. Choosing a familiar verb is only the beginning: the application must implement the behavior that the verb promises. Calling a destructive operation GET does not make it safe. A useful API documents its resource model, representation, authorization, and error conditions alongside the method. ...

October 8, 2026 · 5 min · XB Field Notes
A conditional PUT changes blue to green and loses its reply. Replaying its old If-Match yields 412 in the fixture, while the stored value remains green.

HTTP idempotency makes retries safe

HTTP idempotency concerns the intended effect of repeating an identical request, not whether every response looks the same. This distinction matters when a connection closes after the server applies a change but before the client receives the answer. Repetition can be appropriate, but only within the operation’s actual semantics and the client’s retry policy. ...

August 26, 2026 · 6 min · XB Field Notes