What is the difference between PUT and PATCH?
PUT replaces a resource entirely with the representation you send. PATCH applies a partial modification. The distinction determines what happens to fields you do not mention, and that is where most confusion and most bugs live.
With a correct PUT, omitting a field means setting it to empty or default, because you are declaring the complete new state. Sending only the fields you want to change would clear everything else. In practice many APIs implement PUT as though it were PATCH, ignoring absent fields, which works until someone reads the specification and expects replacement semantics.
PATCH sends only what should change, and unmentioned fields are left alone. That is the behaviour most applications actually want for an edit form.
Idempotency differs too. PUT is idempotent by definition: sending the same complete representation repeatedly lands on the same state. PATCH is not necessarily, because a patch can be expressed as an operation such as incrementing a counter, which compounds when repeated. A patch that simply sets fields is idempotent in practice.
There is a genuine ambiguity PATCH does not resolve on its own: distinguishing a field omitted because it should not change from a field explicitly set to empty. If your representation allows null values, those two cases look identical in JSON unless you decide a convention. Formats such as JSON Merge Patch define one, treating null as delete, at the cost of being unable to set a field to null.
The pragmatic advice is to pick one, document what happens to omitted fields, and be consistent. An API where the answer varies by endpoint is the worst outcome.