One of the first steps in developing a RESTful web service is designing the resource model. The resource model identifies and classifies all the resources the client uses to interact with the server. Of all the aspects of designing a RESTful web service, such as identification of resources, choice of media types and formats, and application of the uniform interface, resource identification is the most flexible part.
Because of the visible nature of HTTP (see Recipe 1.1), you can use tools like Firebug (http://getfirebug.com), Yahoo! YSlow (http://developer.yahoo.com/yslow/), or Resource Expert Droid (http://redbot.org/) to make reasonable assertions about whether the server is implementing HTTP correctly. But you cannot do the same with resources. There is no right or wrong resource model. All that matters is whether you can use HTTP’s uniform interface reasonably correctly to implement your web service. This chapter goes through the following recipes to help identify resources for a number of common situations:
Use this recipe to identify an initial set of resources from domain entities.
Use this recipe to guide resource granularity.
When you have several resources of the same kind, use this recipe to group those into collection resources.
Use this recipe to combine resources into composites, based on client usage patterns.
Apply this recipe to identify resources that implement processing functions.