Sign inSign up

noandrea/plz

By noandrea

Updated about 6 years ago

Image
0

333

noandrea/plz repository overview

PLZ Rest API

A simple rest API that exposes data related to zip codes and buildings in Berlin.

The source dataset is published by Esri and is available here.

Motivations

Built as an exercise

Rest API

PLZ provides the following endpoints:

  • /status returns the status of the service
  • /zip/buildings returns the number of buildings aggregated by zip code
  • /zip/buildings/history returns the number of buildings aggregated by zip code and year
  • /zip/buildings/:code returns the number of buildings for a specific zip code
  • /zip/buildings/:code/history returns the number of buildings aggregated by zip code and year for a specific zip code

Usage

There are 2 ways to run the PLZ api service: using Docker(recommended) or via manual setup.

For more details about the command line options, use the command plz --help

Docker

The Docker image is available at noandrea/plz, and can be run with

docker run -p 2007:2007 noandrea/plz

The image is built on scratch, the image size is ~9.3mb:

asciicast

Manual setup

Those are the steps to setup the service:

  1. Install plz
go get github.com/noandrea/plz

OR

Download the latest from the release page

  1. Download the dataset linked above:
curl -L https://opendata.arcgis.com/datasets/273bf4ae7f6a460fbf3000d73f7b2f76_0.csv?outSR=%7B%22latestWkid%22%3A3857%2C%22wkid%22%3A102100%7D -o /tmp/src.csv
  1. Massage the dataset to produce an optimized json to be served via the Rest API
plz massage --input /tmp/src.csv --output rest.json
  1. Run the Rest API service
plz serve --data rest.json

asciicast

Examples

Docker compose

docker-compose.yaml example

version: '3'
services:
  plz:
    container_name: plz
    image: noandrea/plz:latest
    ports:
    - 2007:2007

K8s

Kubernetes configuration example:

---
# Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: plz
  name: plz
spec:
  replicas: 1
  revisionHistoryLimit: 3
  selector:
    matchLabels:
      app: plz
  template:
    metadata:
      labels:
        app: plz
    spec:
      containers:
      - env:
        image: noandrea/plz:latest
        imagePullPolicy: Always
        name: plz
        ports:
        - name: http
          containerPort: 2007
        livenessProbe:
          httpGet:
            path: /status
            port: 2007
---
# Service
# the service for the above deployment
apiVersion: v1
kind: Service
metadata:
  name: plz-service
spec:
  type: ClusterIP
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: http
  selector:
    app: plz

Tag summary

Content type

Image

Digest

Size

3.5 MB

Last updated

about 6 years ago

docker pull noandrea/plz