from Hacker News

REST question

by stevepotter on 12/8/10, 2:20 AM with 6 comments

I'll start by saying that I understand REST APIs. However, I am having trouble with one thing. How do typical methods - suspend, archive, export, etc - translate best to REST APIs?

For example, say I have a project management system. And you can archive a project. How should my REST API handle archival?

I assume you'd do a POST to myapp.com/project/1234, and you'd pass some data in like { archived: true }.

Or maybe a POST to: myapp.com/project/1234/archive. Although I guess that URL is not restful.

So what's the approach that most apps take here? A generate "update" action that takes varying parameters, rather than individual actions for each method, would be a bit of a pain to code and document, no?

  • by jsarch on 12/8/10, 3:33 AM

    From what I can tell, I think it depends on if you want to be able to access the project later. If you don't, then I would recommend using DELETE /project/1234 with { archived: true} as an option. If you want to view the project later, then I think you should do a PUT to create the "archive" resource as in PUT /project/1234/archive or do a POST if you don't know the actual archive URI.
  • by rmk on 12/8/10, 2:26 AM

    Not necessarily, if you are using rails, you get update actions for free in your controller.

    So you could do: curl -X PUT -d "<params>" http://myapp.com/project/1234

    See section 11.6 (How to take snapshots of resources) in the book "RESTFul web services cookbook" for a discussion of this...

  • by spooneybarger on 12/8/10, 3:26 AM

    you might get more and potentially better answers somewhere like stackoverflow.com
  • by steveklabnik on 12/8/10, 3:31 AM

    PUT to myapp.com/project/1234 with the param {"status":"archived"}, then set your model up so that when the status changes to archived, it archives itself.