In REST, editing an existing resource is done by the client by the GET representation of the presentation of this resource, making changes to the presentation, and then performing the PUT of the new view back to the server.
So, to just read the resource, your REST client program would do:
GET http:
And edit this resource:
GET http://www.example.com/SomeResource ... edit it ... PUT http://www.example.com/SomeResource
Usually, simultaneous updates are processed, allowing the last PUT arriving at the server to overwrite earlier ones, on the assumption that it is a newer state. But in your case, you want to protect yourself from this.
Take a close look at @Jason's suggestion to support an additional parallel blocking resource for each main resource. Your client will first create a lock, edit it, and then remove the lock. The system will need to automatically cancel the lock if the user making the lock subsequently never saves any changes. It will look like this:
GET http://www.example.com/SomeResource ... user presses an edit button ... PUT http://www.example.com/SomeResource/lock ... user edits the resource representation ... PUT http://www.example.com/SomeResource DELETE http://www.example.com/SomeResource/lock
You will need to do the appropriate error handling if the user is trying to edit a resource that is blocked by someone else.
It sounds like you feel limited by the current limitations of HTML. If you use a server-side REST framework such as Restlet (for Java), it supports the concept of “overloaded POST,” where you can use POST but adhere to the query string argument, for example method = PUT or method = DELETE. If you write your own server components, they can use this trick too.
There are tricks that you can play at the HTML level. For example, only a read-only part and an input form that is not initially shown may be displayed on your page. When the user clicks the edit button, your JavaScript hides the read-only part and shows the input form.
Be sure to read Richardson and Ruby Restful Web Services (O'Reilly). It is very useful.