
Show HN: SWAPI – A Star Wars API - paulhallett
http://swapi.co
======
Adrock
Check out the author's blog post where he explains his motivation:
[http://phalt.co/if-you-have-data-they-will-consume-it/](http://phalt.co/if-
you-have-data-they-will-consume-it/)

------
idlewan
Is there a reason you're not using numbers in the json output?

    
    
        "vehicle_id": "1"
    

is better represented as:

    
    
        "vehicle_id": 1

~~~
wise_young_man
What if the integer exceeds the maximum allowed on 32 bit machines and you try
to decode the JSON?

~~~
paulhallett
This is mostly just a typo in the examples I put, but I will consider using
only strings for this type of stuff, to avoid issues.

~~~
idlewan
Given the dataset you have to serve, I don't think you'll be having any issues
if most of the JSON parsers give you 32bit integers.

------
mcphage
Can I use the API to figure out that, for instance, the x-wing is /vehicles/1
and Mustafar is /planets/7? Otherwise, how would I know?

~~~
paulhallett
As well as ID, we'll do some fuzzy matching on the URLs as well, so

GET /api/vehicle/t-65-x-wing

and

GET /api/planets/mustafar

will also work

~~~
anonfunction
I think it would be nice to also provide an endpoint that lists all the
resources as an array of objects where the key is the id and the value is the
name. Maybe something like this:

    
    
      GET /resources/ships
      [
        { 1 : "Tantive IV" },
      ]

~~~
paulhallett
So RESTfully, I think this is normal. You should be able to call a resource
and then be fed back all of those resources (usually paginated to say, 20 per
request).

It will have this style of lookup.

------
anonfunction
I was so excited and then equally let down when I realized it wasn't online
and this is just a coming soon page. Oh well, I signed up.

~~~
paulhallett
We're working on it, sorry!

~~~
anonfunction
No worries and thanks for building it. You may want to put the email capture
above so it's more clear as I'm probably not the only one to copy pasta the
url in the examples and be confused for a moment until scrolling to the
bottom.

~~~
paulhallett
Good point. I set the URL config to catch all URLs and redirect back to the
home page (anticipating people would try the API).

Once things die down I'll push up an update. Getting a heavy bit of traffic
right now.

------
kcbanner
Any reason why this is an API and not a data dump?

~~~
antihero
You don't really want to have to download potentially gigabytes of data to
find a few sets of results!

~~~
paulhallett
Local caching will be the way to go.

All resources will have a "date_updated" or similar attribute which you can
check against.

~~~
slapresta
Ahh, if only HTTP had defined a standard header for checking if the requested
content has been modified, and sending a specific status code if that's the
case...

------
reubenswartz
Not encouraging to see a basic error right on the front page: "From all _six_
Star Wars films"

Couldn't resist... ;-)

~~~
paulhallett
Check the bottom of the page ;)

We'll have episode VII details as and when it gets released.

~~~
simonsayscode
I'm pretty sure it was a jibe at the fact that only 3 real Star Wars live-
action films were made.

~~~
paulhallett
Ah, you didn't see the film_id & episode_id reference in the second example?

~~~
joshdotsmith
I feel like somewhere, somehow, a point is being missed.

------
1kevgriff
Signed up. This is going to be great for conference demos.

~~~
paulhallett
:D My other API for Pokémon is also great for demos and teaching APIs -
[http://pokeapi.co](http://pokeapi.co)

------
ianakelly
I Virtualized this API just for kicks -
[https://vapi.ca.com/vapi/api/Vapidemouser/Star_Wars/planets/...](https://vapi.ca.com/vapi/api/Vapidemouser/Star_Wars/planets/7)
and
[https://vapi.ca.com/vapi/api/Vapidemouser/Star_Wars/vehicles...](https://vapi.ca.com/vapi/api/Vapidemouser/Star_Wars/vehicles/1)

Would love more details and I can make a Virtual Copy of the whole thing.

Built it here [https://vapi.ca.com](https://vapi.ca.com)

~~~
ianakelly
Added Films and People now
[https://vapi.ca.com/vapi/api/Vapidemouser/Star_Wars/films/6](https://vapi.ca.com/vapi/api/Vapidemouser/Star_Wars/films/6)
[https://vapi.ca.com/vapi/api/Vapidemouser/Star_Wars/people/1](https://vapi.ca.com/vapi/api/Vapidemouser/Star_Wars/people/1)

------
ukmadlz
This is amazing, all I need is a reason to mash
[http://pokeapi.co](http://pokeapi.co) into this

~~~
paulhallett
Hi Mike, this is Paul, I am making this API too :D

~~~
ukmadlz
Yeah I know, I'be even used PokeAPI at a hack before. It's MusicHackDay soon,
I may have to use it again as a reference for poke chiptunes

~~~
paulhallett
Please do :D

------
SvenAndersson
Hah! I'm in need of just this sort of API come January, what are the odds?
Awesome, hope you launch soon!

~~~
paulhallett
ETA is end of January :)

------
anonfunction
Where are your getting the data?

~~~
paulhallett
Good ol' scraping from websites like wookiepedia.

And watching lots and lots of Star Wars.

I have the blurays, so I should be in for a fun experience whilst collecting
the nitty gritty data.

~~~
slayed0
Do yourself a favor and get the Despecialized Edition.

[http://originaltrilogy.com/forum/topic.cfm/Harmys-STAR-
WARS-...](http://originaltrilogy.com/forum/topic.cfm/Harmys-STAR-WARS-
Despecialized-Edition-HD-V25-MKV-IS-OUT-NOW/topic/12713/)

~~~
paulhallett
Oh that's a good point. Do I want my data to be consistent with the 1997
releases or the originals!?

~~~
delinka
If it's "All The Star Wars data [We]'ve Ever Wanted," then I want both. With
tags telling me which data is 'original' and which changed in the '97
releases.

EDIT: And a donate button so I can reward you.

------
acomjean
Totally ridiculous, but awesome at the same time.

Make that API great!

Whats the backend?

~~~
paulhallett
Hey! Thanks. I made the Pokémon API as well -
[http://pokeapi.co](http://pokeapi.co)

The backend on that is Django. I might stick with what I know, or build SWAPI
in Go. At the moment, we're still very early stage, so we can choose soon.

------
emillon
Under which license is this data available?

~~~
paulhallett
The data is being scraped from sources online and by watching the films about
a thousand times.

As the data is already available freely elsewhere, I won't be charging or
keeping the data, I'll provide it just like I do on
[http://pokeapi.co](http://pokeapi.co)

~~~
rakoo
Thank you for what you're doing, that's awesome! I'd like to enlighten why
choosing a license is important.

Many people can be picky about the license, because even though you may be
full of good intentions, the data you provide is non-free as-is in that it
can't be reused elsewhere. Having a license is the clean, boring way to tell
everyone "do whatever you want with this data".

That's even a problem for Github, or more precisely Github users, because many
people push some code without any explicit license, making this code hardly
usable by default: it may be available but you don't know if you have the
right to reuse it, even if the developer said "yeah, use this as you want".
That's not enough. Just because the developer didn't take a few minutes to
select and put a LICENSE file.

It is also important to think about it in the other direction: If you're going
to take content from Wookieepedia, their license is CC-BY-SA
([http://starwars.wikia.com/wiki/Wookieepedia:Copyrights](http://starwars.wikia.com/wiki/Wookieepedia:Copyrights)),
which means that you MUST say it comes (at least partially) from them (not
that you wouldn't anyway) and that you MUST redistribute your content with a
"similar" license. Even though you may think that everything is fine, there
are some actions to do on this side.

Now, I'd understand that if only "amateurs" come and play with the data, we're
all among good behaving adults and all is fine. But you may not be able to
predict what will happen with how data is used, so unfortunately this step is
important.

Personally I don't like restricting people, so I try to use CC0 as much as
possible. Be aware that Creative Commons licenses may not be best suited for
data (they were designed for work of art primarily), as can be seen by OSM's
decision on the matter
([http://www.osmfoundation.org/wiki/License/We_Are_Changing_Th...](http://www.osmfoundation.org/wiki/License/We_Are_Changing_The_License))
so you may want to avoid them.

Note: I'm not even talking about money, which is an orthogonal problem.

------
gegtik
Luke Sykwalker

~~~
paulhallett
Good spot!

