API.html: the `Remove Properties` example calls `/api/set`, and `Patch Update` documents `null` as storing null
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 88/100
- Tipo di issue
- Documentazione
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript
- Ambito
- api, documentation
Direzione di ricerca
Inizia in public/API.html dagli esempi Patch Update e Remove Properties, poi confronta la loro formulazione e gli URL con controllers/patchUpdate.js, controllers/patchUnset.js e routes/api-routes.js. Il lavoro è completato quando l’esempio di rimozione usa /api/unset, il comportamento di null è documentato come rimozione e gli esempi degli endpoint circostanti rimangono coerenti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Two PATCH sections of public/API.html contradict the controllers they document. Both are in the copy-paste path, and one of them documents the wrong endpoint entirely.
- The
Remove PropertiesJavascript example calls/api/set. The section documents/unset, its prose is right, and its payload is an unset payload — but thefetchURL ishttps://devstore.rerum.io/v1/api/set. Anyone copying the example sends a removal payload to the add-only endpoint. Patch Updatedocuments{"key": null}as storing null. It says the value "will be set to null instead of removing the property".controllers/patchUpdate.jsdeletes the key.
The third API.html error I found — the default of 10 records at line 506 — is already tracked in #305, so it is not repeated here.
Why this matters
The /unset example is the wrong endpoint, not a typo in prose. routes/patchUnset.js serves /api/unset (mounted at routes/api-routes.js:61), and GET /v1/api describes /unset as "PATCH - Update the body an existing object by removing an existing property." The example's own body — "existing_property": null with an "unmatched_property" noted as ignored — is exactly the unset contract described three lines above it. Sent to /api/set it is a silent no-op: controllers/patchSet.js keeps only keys that are not already present, so existing_property is filtered out, nothing survives, and the server returns the original object with a 200 and the same @id. The caller sees success and the property is still there.
Copy-paste is the documented path. These blocks are the worked examples for the endpoint, and they are extracted verbatim by downstream consumers. A tool of ours that builds a corpus from API.html ingested this example and learned /api/set as the endpoint for removing a property; that is our bug to fix on our side, but it is evidence that the block travels intact.
The null claim is inverted, and null is load-bearing for both endpoints. controllers/patchUpdate.js:58-63 branches on the value:
for (let k in objectReceived) {
if (originalObject.hasOwnProperty(k)) {
if (objectReceived[k] === null) {
delete patchedObject[k]
}
else {
patchedObject[k] = objectReceived[k]
}
}
So /patch with null removes the key. /unset requires null to remove anything at all (controllers/patchUnset.js:61-70), which Remove Properties states correctly. A reader who trusts Patch Update believes RERUM stores JSON nulls, which it never does through this route.
Affected lines
All line numbers at 8e4b673d.
| File | Line | Current | Should be |
|---|---|---|---|
public/API.html |
1413 | fetch("https://devstore.rerum.io/v1/api/set", { in the Remove Properties example |
.../v1/api/unset |
public/API.html |
1249-1250 | "If {"key":null} is submitted, the value for property "key" will be set to null instead of removing the property." |
the key is removed from the new version |
Proposed change
API.html:1413— change the URL tohttps://devstore.rerum.io/v1/api/unset. Nothing else in the block needs to move; the payload and the surrounding prose already describe/unset.API.html:1249-1250— replace with a sentence matching the controller, e.g. "If{"key":null}is submitted, propertykeyis removed from the resulting record. To change a value, send the new value; to add a key that does not exist yet, use/set."- Worth a pass over the other
jsExampleblocks for the same class of error: each example's URL should be checked against the endpoint its section documents. These two were found by diffing the examples against the controllers rather than by reading the page.
- Lingua principale
- JavaScript
- Stelle
- 3
- Fork
- 6
- Merge medio
- 4g 9h
- PR unite (30g)
- 5
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di CenterForDigitalHumanities/rerum_server_nodejs
-
backend dependencies easy
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
CenterForDigitalHumanities/rerum_server_nodejs#290 · 1 commento ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 50/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 74/100
-
Code Cleanup EpicAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
Tutte le issue di CenterForDigitalHumanities/rerum_server_nodejs
Issue simili
-
curriculum documentation quality
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
githubnext/gh-aw-workshop#3897 ·
I maintainer di solito rispondono entro 2 giorni
-
agent/quality hive/hosted-available-lke648397-260827-5n31 quality testing
Difficoltà 2/5 1-3 ore Idoneità per principianti 91/100
I maintainer di solito rispondono entro 1 giorno
-
Add: RSV Honduras FeedApertacheck:failed feeds:add
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
iptv-org/database#36179 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno