Friday, November 23rd, 2007
REST groupies can talk your ear off about resources and the difference between URI and URL. Many developers still don’t really know the difference though, and Ryan McDonough has put up this simple summary.
His summary is by example and goes like this:
A URI identifies a resource either by location or name. More often than not, most of us use URIs that defines a location to a resource. However, a URI does not have to specify the location of a specific representation. Citing and example of a W3C URI for their home image, they use the following URI: http://www.w3.org/Icons/w3c_home. Note the absence of a file extension. The URI for the w3c_home image is still universally unique, but it does not specify the specific representation of the image (either a GIF, PNG, or JPG). The selection of the representation can be determined by the web server through HTTP content negotiation. The Apache HTTPD server has had excellent support for content negotiation for many years. Oddly, few sites take advantage of HTTP content negotiation. The W3C is one web application that makes heavy use of URIs and content negotiation.
A URL is a URI but a URI is not a URL. A URL is a specialization of URI that defines the network location of a specific representation for a given resource. Taking the same W3C example, there are actually 2 representations available for the w3c_home resource:
These URIs also define the file extension that indicates what content type is available at the URL. Through content negotiation, the web server will forward the user agent to the proper type, depending on the clientâ€™s capabilities, when the URI http://www.w3.org/Icons/w3c_home is accessed.
More often than not, URI is the correct term to use when referring to the location of resources on the WWW.
Posted by Dion Almaer at 7:59 am