{"id":19051012,"url":"https://github.com/tomasbasham/blunderlist-gateway","last_synced_at":"2026-06-20T19:31:32.262Z","repository":{"id":69147696,"uuid":"170752238","full_name":"tomasbasham/blunderlist-gateway","owner":"tomasbasham","description":"Contrived todo app example API gateway","archived":false,"fork":false,"pushed_at":"2020-01-12T00:06:09.000Z","size":52,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-11T19:25:36.405Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tomasbasham.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-14T20:16:59.000Z","updated_at":"2021-05-01T21:48:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"3cf2d650-0000-4b3c-a26f-8f0af8ee5abf","html_url":"https://github.com/tomasbasham/blunderlist-gateway","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tomasbasham/blunderlist-gateway","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomasbasham%2Fblunderlist-gateway","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomasbasham%2Fblunderlist-gateway/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomasbasham%2Fblunderlist-gateway/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomasbasham%2Fblunderlist-gateway/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tomasbasham","download_url":"https://codeload.github.com/tomasbasham/blunderlist-gateway/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomasbasham%2Fblunderlist-gateway/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34583589,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-20T02:00:06.407Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T23:16:55.090Z","updated_at":"2026-06-20T19:31:32.242Z","avatar_url":"https://github.com/tomasbasham.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# blunderlist-gateway [![Build Status](https://travis-ci.com/tomasbasham/blunderlist-gateway.svg?branch=master)](https://travis-ci.com/tomasbasham/blunderlist-gateway) [![Maintainability](https://api.codeclimate.com/v1/badges/428e6cae5d8321a778ed/maintainability)](https://codeclimate.com/github/tomasbasham/blunderlist-gateway/maintainability) [![Pact](https://blunderlist.pact.dius.com.au/pacts/provider/blunderlist-gateway/consumer/blunderlist/latest/badge.svg)](https://blunderlist.pact.dius.com.au)\n\nA fictitious todo application through which to teach how to implement a\nmicroservice architecture. For the full list of services required to run this\napplication visit\n[Blunderlist](https://github.com/tomasbasham?utf8=✓\u0026tab=repositories\u0026q=blunderlist)\non GitHub.\n\nThis repository implements an API gateway that aggregates data from multiple\nbackends, acting as the single entry point for all clients. The API gateway\nhandles requests in one of two ways. Some requests are simply proxied/routed to\nthe appropriate service whilst others are handled by fanning out to multiple\nservices.\n\nThe intent of this repository is to provided an isolated layer between client\nand services to abstract how the application as a whole is separated into its\ncomponent services. In addition it provides the most optimal API surface for\nthe intended client, as opposed to exposing redundant interfaces that\ncomplicated interactions.\n\n## Prerequisites\n\nYou will need the following things properly installed on your computer.\n\n* [Git](https://git-scm.com/)\n* [Go](https://golang.org/)\n* [Docker](https://www.docker.com/)\n\nOptionally to run deployments manually the following tools must be present:\n\n* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)\n* [kustomize](https://github.com/kubernetes-sigs/kustomize)\n\n## Installation\n\n* `git clone \u003crepository-url\u003e` this repository\n* `cd blunderlist-gateway`\n\n## Running / Development\n\n* `docker run --rm -it -p 8080:8080 --env-file .env gateway`\n* Visit your app at [http://localhost:8080](http://localhost:8080).\n\n### Running Tests\n\n* `docker run --rm gateway golint ./...`\n* `docker run --rm gateway go vet ./...`\n* `docker run --rm gateway go test ./...`\n\n### Building\n\n* `docker build -t gateway --target builder .`\n\n## Design\n\nThe gateway makes several calls to two other services before aggregating the\nresults into a single JSON payload. This can be seen in the following:\n\n![list-tasks][list-tasks]\\\n[diagram][list-tasks-diagram]\n\n## Debugging Running Pods\n\nWhen there is a problematic pod running within a cluster it may not be\ndesirable to destroy it without first understanding what went wrong. Instead\nthe pod should be removed from the load balancer and inspected whilst no longer\nserving traffic.\n\nThis has been accomplished through the use of labels and selectors within the\nKubernetes manifest files. In particular there is a serving: true label that\nindicates to Kubernetes that a pod should be placed within the load balancer\nand should be serving traffic. For a pod to be removed from the load balancer\nit's labels must be edited in place.\n\n    kubectl --namespace=neptune label pods/\u003cPOD NAME\u003e --overwrite serving=false\n\nThe replication controller will spin up a new pod to replace the one taken from\nthe load balancer whilst the problematic pod will remain active for inspection\nbut not available to serve traffic.\n\n## Further Reading / Useful Links\n\n* [Go](https://golang.org/)\n* [json:api](https://jsonapi.org/)\n\n[list-tasks]: /diagrams/list-tasks.svg?raw=true\u0026sanitize=true \"List Tasks\"\n[list-tasks-diagram]: https://sequencediagram.org/index.html#initialData=C4S2BsFMAIBkQM7GgFQIYINYIFA7QK7AD2AdgQLYBGkATtPkcWgMagBuaoZeADmrVAsQ-UsgBEAQQAKASWgBxLpADuaAJ7joGaAHNla9Tn6CQw0RJTEAJsWgBlOuzOQtOkreMChItGOjiAMLEFBSQ-o60ziyu2gjQLCFhYnj6wKoaALQAfB7EAFwAPIngxLT5AMS0kNbZAPR18EjoWAgNhXUlZdkAFACUOHmZOWkZ6vnAGNh4pcS80ABmZdCQrAAW0JNYOKOGOYmh4cBFXeVVNfWNiMDBh2JtdR2nvVuYAwfJwMPZuxr5H0ccOFrNAgA\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomasbasham%2Fblunderlist-gateway","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomasbasham%2Fblunderlist-gateway","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomasbasham%2Fblunderlist-gateway/lists"}