null, nebo pole vynechat
Shrnutí: `null` říká, že pole existuje bez hodnoty; vynechání říká, že pole neexistuje. Těla PATCH, slučování konfigurace a předvyplnění formulářů jsou místa, kde rozdíl kouše.

Stručně: posílejte null, když konzument musí rozlišit „vymazáno“ od „nedotčeno“ – v těle PATCH nepřítomnost pole nechá být a explicitní null ho vymaže – a držte jednu konvenci pro každé pole, aby odpovědi i slučování konfigurace zůstaly stabilní.
Rozdíl
{ "nickname": null }
Přítomné, prázdné. Konzument ví, že pole bylo explicitně vymazáno.
{ }
Nepřítomné. Konzument nedokáže rozlišit „nikdy nastaveno“ od „nepodporováno“.
V JavaScriptu je rozdíl konkrétní:
'nickname' in obj // false — nepřítomné
obj.nickname === null // true — přítomné a null
obj.nickname === undefined // true — oba případy
Kde na tom záleží
Těla PATCH. {"nickname": null} vymaže přezdívku. {} nezmění nic. Pokud handler považuje „null“ a „chybějící“ za totéž, uživatelé pole nikdy nemohou vymazat – mohou jen nastavit prázdný řetězec, což je něco jiného.
Implementujte podle přítomnosti klíče, nikoli hodnoty:
if (Object.hasOwn(patch, 'nickname')) {
target.nickname = patch.nickname; // null povoleno
}
Slučování konfigurace. Vynechání zdědí výchozí hodnotu; null ji explicitně vypne. Přesně tak se chovají hodnoty v Helm a Kubernetes.
Předvyplnění formuláře. null se vykreslí jako prázdné a chybějící pole také, ale odeslání se liší: mělo hodnotu, teď vymazáno → pošli null; nikdy nevyplněno → vynechej. Bez rozlišení vypadá vymazání stejně jako nedotčení.
Konvence
| Situace | Konvence |
|---|---|
| Těla odpovědí | Ponechte null; stabilní tvar, jednodušší typy |
| Požadavky PATCH | null vymaže, vynechání zachová |
| PUT (plná náhrada) | Vynechání znamená smazat – celý dokument se nahradí |
| Slučování konfigurace | Vynechání = výchozí, null = vypnuto |
| Databáze | null pro neznámé nebo neplatné; '' pro známé-prázdné |
Držte tvary odpovědí stabilní. Seznam, kde některé položky nesou avatar a jiné ne, nutí kontroly 'avatar' in item na každém volajícím místě. avatar: null se konzumuje snadněji.
Tři věci, které nedělat
Nepoužívejte "" jako null. Prázdná přezdívka a nenastavená přezdívka jsou ve většině domén různé stavy.
Nepoužívejte 0 nebo -1 jako sentinely. Nula je legitimní číslo a sentinel zkazí každý průměr, který spočítáte.
Nemíchejte konvence mezi endpoinpty. Dvě konvence znamenají dvě větve kódu v každém klientovi.
Časté dotazy
Co rozhoduje mezi null a vynechaným polem?
Zeptejte se, zda konzument potřebuje rozlišit „explicitně vymazáno“ od „nikdy nastaveno“. V těle PATCH musí, takže null vymaže a nepřítomnost zachová; v odpovědích ponechání null činí tvar stabilní a typy klienta jednodušší.
Jak endpoint PATCH rozliší vymazání od ponechání být?
Kontrolujte přítomnost klíče, nikoli hodnotu: Object.hasOwn(patch, 'nickname') vám řekne, že pole bylo odesláno, a teprve potom ho přiřaďte, včetně null. Pokud handler považuje null a chybějící za totéž, uživatelé pole nikdy nemohou vymazat a mohou se uchýlit jen k prázdnému řetězci.
Proč mají těla odpovědí ponechat null?
Stabilní tvar znamená, že klienti nepotřebují kontrolu 'avatar' in item pro každý volitelný klíč. Když některé položky seznamu nesou avatar a jiné ho vynechávají, tato kontrola se duplikuje na každém volajícím místě a snadno se pokazí.