Joe Gregorio: So there you have it, outside of six open questions, a nice RESTful way to do partial updates.
James Snell: Blech…....
Placing verbs in URIs definitely smells bad.
With HTTP PUT, the the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. Having some servers interpret the removal of elements (such as content) as a modification, and others interpret the requests in such a way that elided elements are to be left alone is hardly uniform or self-descriptive. In fact, depending on usage, it is positively stateful.
I’m fine with a server choosing to interpret the request anyway it sees fit. As a black box, it could behave as if it updated the resource as requested and then one nanosecond later — and before it processes any other requests — fill in missing data with defaults, historical data, whatever. My concern is with clients coding with to the assumption as to how the server works. That’s called coupling.
Don’t get me wrong, there are use cases where partial updates are desirable, even when that comes at a cost in terms of relaxing one or more of RESTs constraints. But such should be possible without violating the spec or spirit of either HTTP’s PUT or Atom’s entry.
I’ll close with a concrete use case: consider a AtomPub server that supports categories. Imagine an entry that currently has two categories. How would you add a category? How would you delete one? How would you delete them all?