I have a resource Car
which have some required fields and another optional ones.
The Car
was created with the following request:
POST /cars
{
plate: "XYZ-A2C4",
color: "blue,
owner: "John" //OPTIONAL
}
A REST client wants to update all required info of this car:
PUT /cars/:id
{
plate: "ABC-1234",
color: "black"
}
What happen to the owner
optional field?
- It will be removed, since it was not informed? ie:
PUT
must replace the entire resource with the representation passed in the payload ? - Or, since
owner
is not required, the server may preserve the old value?
I know that the server can provide a PATCH
method, but sometimes it is not possible to update a single field because the new state could become invalid (there are no minimum required payload to enforce related fields values). Also, manipulating arrays, removing fields or setting it with null
can be tricky in some cases with PATCH
since it can be done with two different patterns; JSON Merge Patch is limited and JSON Patch is kinda strange.
Is it OK to perform a PUT
with the required fields and the server preserves the old optional values when it is omitted?