RFC: Safe partial-update behavior for PUT-only APIs
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 25/100
- Issue type
- Feature
- Clarity
- Needs clarification
- Activity status
- Active
- Tech stack
- typescript
- Domain
- api, backend-api-design, cli, testing-qa
Research direction
Start with the CLI update command and the GET, merge, then PUT flow described in the issue, then inspect endpoint schemas and available concurrency tokens. Resolve the safety policy before implementation; done means the supported policy is documented and eligible endpoints have concurrency and failure-path tests, including dry-run secret handling.
Written by the indexing model from the issue text.
Description
Context
Some APIs expose replacement-oriented PUT operations but no PATCH operation. Users may still expect a CLI update command to preserve fields they did not specify.
A generic GET, merge, then PUT flow could emulate a partial update, but it can also overwrite concurrent changes or mishandle fields whose omission, null, empty value, or server default have different meanings.
Questions to resolve
- Which endpoints have a concurrency token such as an ETag or version?
- Can replacement schemas distinguish omitted fields from explicit clearing?
- Which operations are idempotent and safe to retry?
- How should secrets, write-only fields, computed fields, and server defaults be handled?
- Should emulation be opt-in, endpoint-specific, or rejected when safety cannot be proven?
Safety requirements
- Do not perform an unguarded read-modify-write when concurrent changes can be lost.
- Preserve explicit clearing and replacement semantics.
- Fail before mutation when the current representation cannot be reconstructed safely.
- Show the effective request through dry-run without exposing secrets.
Outcome
Document the supported policy and implement it only for endpoints that satisfy the agreed safety constraints, with concurrency and failure-path tests.
- Dominant language
- TypeScript
- Stars
- 853
- Forks
- 42
- Avg merge
- 17h 57m
- Merged PRs (30d)
- 146
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from cloudflare/cf
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
cloudflare/cf#344 ·
Maintainers usually reply within 1 day
-
upstream
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
cloudflare/cf#262 ·
Maintainers usually reply within 1 day
-
`cf dev` rejects `--port` and `--host` for Vite projects, including the `cf init` templatePossibly taken @jamesopstad claimed this 5 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
cloudflare/cf#223 · 2 assignees ·
Maintainers usually reply within 1 day
-
upstream
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
cloudflare/cf#179 ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 58/100
cloudflare/cf#347 ·
Maintainers usually reply within 1 day
Similar issues
-
The inspector never shows the instances field, so scaling out is unreachablePossibly taken @Mrkewl claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
xevrion/breakscale#96 ·
Maintainers usually reply within 4 days
-
Object parameters lose their structure when resources is enabledPossibly taken @asts-top claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
rossant/awesome-math#199 ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
jaegertracing/jaeger-ui#4618 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
mifi/lossless-cut#3125 ·
Maintainers usually reply within 1 day