Hacker News new | ask | show | jobs
by masklinn 4615 days ago
Obligatory warning: API is absolutely not restful.
3 comments

Just wanted to add some thoughts on how one could try to make this RESTful. First, if it were me, I'd pick a media type that can express hyperlinks in JSON (since JSON knows nothing about hyperlinks), maybe something like HAL [1]. Next, I would define my link relations for this API, which in this case would be a collection of countries and the countries themselves (so at least two different types of resources).

After creating the representations of each of these resources, I would then create URI templates in my root response (I guess found at /rest) that allow for the searching aspect that this site is providing, which would be something like:

  { 
    "_links": {
      "search_by_name": {
        "href": "/rest/name/{name}",
        "templated": true
      }
    }
  }
I may build on to this to provide other resources, like a collection of capitals, each with a link to "/rest/capital/{capital_city}", or a resource of currencies, linking to "/rest/currency/{currency}".

The goal of all of this would be to tell the client how to find resources rather than having that hard-coded into the client. These are just some first steps toward being RESTful, and there are lots of different directions you could take this and still be RESTful.

edit: example was incomplete

[1] http://stateless.co/hal_specification.html

thanks for your input. i'll think about this
Since the project seems to have an educational bent, what would the proper REST interface for it look like?

GET:

http://restcountries.eu/rest/alpha/ee would be http://restcountries.eu/countries?alpha=ee

http://restcountries.eu/rest/name/norge would be http://restcountries.eu/countries?name=norge

That seems right, right?

Neither is more or less RESTful than the other. The media type and link relations express to the client what resource is being returned, not the URL itself.
But it even has "rest" in the URL! You mean that doesn't make it RESTful (rest-full?)