Building an API
for Icelandic
You need some data
The Database of Modern Icelandic Inflection
tala;424804;so;alm;talar;GM-FH-NT-2P-ET
6.005.343
You need a database
- One table, 6 columns
- Read-only
- Indexes
LevelDB is a light-weight, single-purpose library for persistence with bindings to many platforms.
- Key-value storage
- Keys are sorted lexicographically
- Snappy compression
tala;424804;so;alm;talar;GM-FH-NT-2P-ET
Choosing a key
tala;424804;so;alm;talar;GM-FH-NT-2P-ET
talar~tala;424804;so;alm;talar;GM-FH-NT-2P-ET
424804~tala;424804;so;alm;talar;GM-FH-NT-2P-ET
Creating indexes
# Raw data
% ls -lh ./data/all.csv
284M ./data/all.csv
# LevelDB database
% du -h ./db
171M ./db
Creating the API
Deploying
Package apps with their environment
Run multiple apps on the same server without conflicts.
Heroku approach: git push
App builds inside the container
AppEngine approach: rsync
App builds locally.
Built files are stored in the container.
Dockerfiles
FROM busybox
VOLUME /code/db
ADD ./db /code/db
CMD /bin/sh
LevelDB database
FROM nodesource/node:latest
WORKDIR /code
ADD . /code
RUN npm install
EXPOSE 8000
CMD npm start
API
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
COPY dist /usr/share/nginx/html
Ember app
# deploy.sh
eval "$(boot2docker shellinit)"
docker build -t davidblurton/tala-api .
docker push davidblurton/tala-api
curl -X POST https://dashboard.tutum.co/api/...
@davidblurton
github.com/davidblurton/tala-api
slides.com/davidblurton/tala
api.tala.is
Building an API for Icelandic
By David
Building an API for Icelandic
- 738