In designing a new API, we are doing our best to follow the patterns established by REST. The question I have is the best method to follow when trying to update a single property. For example:
Imagine you have a simple Car resource:
{
"make": "Chevrolet",
"model": "Chevelle",
"year": 1966,
"color": "black",
"for_sale": true
}
Let's assume that the property for_sale
is something that you anticipate will be updated regularly by the user. I have a couple options:
PUT
the entire resource withfor_sale
set tofalse
. For a reasonably small resource, this seems fine, however, in most cases our resources are quite large so a lot of waste in sending the entire resource to update a single, often changed property.POST
and do a partial update by only including the element to update, such as:{"for_sale":false}
This is better as it requires a lot less overhead.
But I somehow seem to be reaching for something even more simple, but I don't seem to find the right approach. It would be quite convenient to offer a simple PUT
to a URL (that doesn't require any request body) to update this property. I see what Google is doing in their API to accomplish this, but it feels just a bit RPC-ish, although I like the simplicity.
POST
/blogs/blogId/posts/postId/comments/commentId/approve
(marks a comment as not spam)
POST
/blogs/blogId/posts/postId/comments/commentId/spam
(marks a comment as spam)
Can someone offer some some advice on the best way to approach updating a single property within a resource (in a preferably lightweight manner) that followed REST principles? Thank you!