Skip to content

My template for a simple, clean API architecture using Go, gRPC, gRPC-gateway, buf, and DuckDB.

License

Notifications You must be signed in to change notification settings

zcking/clean-api-lite

Repository files navigation

Clean API Lite

This is a template I created for a simple, clean API implementation using the following tech stack:

  • Go - programming language of choice
  • gRPC - modern open source high performance Remote Procedure Call (RPC) framework
  • gRPC-gateway - gRPC to JSON proxy generator
  • buf - Protocol buffers build tool
  • DuckDB - fast, in-process, analytical database

Everything but DuckDB in this list are technology choices I would consider very standard/common and versatile to create any modern API. I decided to use DuckDB as well to provide a modern, yet super simple database fabric, hence the "lite" in this project's name.


Getting Started: Docker

To build and run the Docker image, just run:

make docker docker/run

You should see an output like the following:

docker run --rm -it -p 8080:8080 -p 8081:8081 clean-api-lite
2024/06/06 01:24:05 setting up database at lite.duckdb...
2024/06/06 01:24:05 gRPC Gateway listening on http://0.0.0.0:8081

You can call the REST API to create a user like so:

curl --location 'http://localhost:8081/api/v1/users' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
  "name": "John Doe",
  "email": "jdoe@userapi.com"
}'

And list users with:

curl --location 'http://localhost:8081/api/v1/users' \
--header 'Accept: application/json'

Changing Protobuf

You can change the protobuf at proto/users/v1/users.proto. Then use make generate to generate all new stubs, which are written to the gen/ directory.

About

My template for a simple, clean API architecture using Go, gRPC, gRPC-gateway, buf, and DuckDB.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published