

Get information about any country via a RESTful API - vaeke
http://restcountries.eu/

======
racbart
This is nice if considered a programming exercise but it's actually pretty
useless for real world use.

This data is static, that is it very rarely changes. The whole dataset is also
very tiny. It's just better to store this data in-house and don't provide
unnecessary point of potential failure by using an external service.

An idea on how to make it more useful is to provide downloadable data dump in
several formats suited for immediate import into various data stores. An extra
addition might be modules for popular frameworks providing access to this
(local) data in all the ways your web service does.

I'm not trying to diss, just trying to find some value for real world usage.
The service is neat otherwise.

~~~
darrhiggs
>> It's just better to store this data in-house and don't provide unnecessary
point of potential failure by using an external service.

Isn't this the point of rfc2616 sec13? I haven't looked, but if there are
etags etc then I think a computer is better than a human at looking for new
data, no?

------
icebraining
"JSON Data is taken from
[https://github.com/mledoze/countries"](https://github.com/mledoze/countries")

The data is cool, but seems overkill to do an HTTP call when the full dataset
is 11K (gzipped).

------
contrahax
Why not just publish a JSON file? It's not like the data source is that large
or changes often. No reason to have an API for this

~~~
icebraining
Apparently the data does come from a JSON file:
[https://github.com/mledoze/countries/blob/master/countries.j...](https://github.com/mledoze/countries/blob/master/countries.json)

------
jodyr
Some of the data seems to be incorrect:

[http://restcountries.eu/rest/alpha2/za](http://restcountries.eu/rest/alpha2/za)

The South African currency is ZAR, not SOS. Cape Town is the legislative
capital, but not _the_ capital.

If you search by currency for ZAR:

[http://restcountries.eu/rest/currency/zar](http://restcountries.eu/rest/currency/zar)

You get South Georgia. I assume that's meant to be South Africa.

~~~
Svip
And what about the Netherlands which has two capitals? A national capital
(Amsterdam) and an administrative capital (Den Haag)?

And what about countries that use two currencies... oh wait, Cuba actually
lists two currencies; never mind.

~~~
tokenizerrr
As a Dutch person I would say Amsterdam would be the correct listing as it is
the official capital, which is what is listed.

------
NKCSS
That's pretty awesome :) Simple and too the point. Nice project :)

------
agilebyte
You have "CZ,Ceska" as an alternative spelling, but in fact it is "Česká
republika" or "Česko".

Especially since you have "AT,Österreich" for Austria.

Shall I submit it to mledoze/countries instead?

Edit: solved - submitted a pull request

------
ismaelc
(Disclaimer: I work for Mashape). I added this API to Mashape
[https://www.mashape.com/community/rest-
countries-1#!document...](https://www.mashape.com/community/rest-
countries-1#!documentation)

------
chrishas35
The callingcode endpoint only returns one result even when there is more than
one that qualifies, as is the case with 1 and USA and Canada (and others that
are part of the North American Numbering Plan)

------
gulbrandr
Maintainer of the dataset here. Most of the inacurracies have been fixed now.

More data will come soon. Thank you for all the feedback, I appreciate it!

------
chatman
Pretty crappy search, query for "india" returns "British Indian Ocean
Territory" as the first result.

~~~
vaeke
ordering by "relevance" is coming =)

------
masklinn
Obligatory warning: API is absolutely not restful.

~~~
smizell
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](http://stateless.co/hal_specification.html)

~~~
vaeke
thanks for your input. i'll think about this

------
echeese
The capital of Canada is Ottawa, not Ottowa.

