Interface/Presentation Layer: RESTAPI Composite Application Interface
A part of Simple Implementation of Modular DDD Technical Architecture Patterns in Go
.
A. Interface Layer (Composite Interface)
- REST API - using Echo Framework [ d3ta-go/app-restapi-composite ]
B. DDD Modules:
- Geolocation - using DDD Layered Architecture Pattern (CRUD-GORM) [ d3ta-go/ddd-mod-geolocation ]
- Authentication - using DDD Layered Architecture (Contract, GORM) [ d3ta-go/ddd-mod-account ]
- Email - using DDD Layered Architecture (Contract, GORM, SMTP) [ d3ta-go/ddd-mod-email ]
- Covid19 - using DDD Layered Architecture (Contract, Adapters -> Connectors) [ d3ta-go/ddd-mod-covid19 ]
C. Common System Libraries [ d3ta-go/system ]:
- Configuration - using yaml
- Identity & Securities - using JWT, Casbin (RBAC)
- Initializer
- Email Sender - using SMTP
- Handler
- Migrations
- Utils
D. Databases
- MySQL (tested)
- PostgreSQL (untested)
- SQLServer (untested)
- SQLite3 (untested)
E. Providers (Connectors) [ d3ta-go/connector-* ]:
- data.covid19.go.id (Official Covid19 Website - Indonesia)
- covid19.who.it (Official Covid19 Website - WHO)
F. Persistent Caches
- Session/Token/JWT Cache (Redis, File, DB, etc) [tested: Redis]
- Indexer/Search Cache (ElasticSearch)
G. Messaging [to-do]
H. Logs [to-do]
- Clone
$ git clone https://github.com/d3ta-go/app-restapi-composite.git
- Setup
a. copy `conf/config-sample.yaml` to `conf/config.yaml`
b. copy `conf/data/test-data-sample.yaml` to `conf/data/test-data.yaml`
c. setup your dependencies/requirements (e.g: database, redis, elasticsearch, smtp, etc.)
- Runing on Development Stage
$ cd app-restapi-composite
$ go run main.go db migrate
$ go run main.go server restapi
- Build
$ cd app-restapi-composite
$ go build
$ ./app-restapi-composite db migrate
$ ./app-restapi-composite server restapi
- Distribution (binary)
Binary distribution (OS/arch):
- darwin/amd64
- linux/amd64
- linux/386
- windows/amd64
- windows/386
$ cd app-restapi-composite
$ sh build.dist.sh
$ platform: [choose from OS/arch list, for example: darwin/amd64]
$ cd dist/[OS-arch]/
$ ./app-restapi db migrate
$ ./app-restapi server restapi
RESTAPI (console):
Swagger UI (openapis docs):
URL: http://localhost:2020/openapis/docs/index.html
Related Domain/Repositories:
- DDD Module: Account (Generic Subdomain) - d3ta-go/ddd-mod-account
- DDD Module: Email (Generic Subdomain) - d3ta-go/ddd-mod-email
- DDD Module: GeoLocation (Supporting Subdomain) - d3ta-go/ddd-mod-geolocation
- DDD Module: Covid19 (Core Subdomain) - d3ta-go/ddd-mod-covid19
- Common System Libraries - d3ta-go/system
Online Demo:*
Due the limitation of our server spec (for ELK: Elasticsearch/Kibana). We cannot provide the online demo for this repo. Very sorry for the inconvenience.
Available Online Demo:
-
Account REST API Microservice - d3ta-go/ms-account-restapi
-
Email REST API Microservice - d3ta-go/ms-email-restapi
-
Covid19 REST API Microservice - d3ta-go/ms-covid19-restapi
-
Email GraphQL API Microservice - d3ta-go/ms-email-graphql-api
References:
-
[Book] Domain-Driven Design: Tackling Complexity in the Heart of Software 1st Edition (Eric Evans, 2004)
-
[Book] Patterns, Principles, and Practices of Domain-Driven Design (Scott Millett & Nick Tune, 2015)
Team & Maintainer:
- Muhammad Hari (https://www.linkedin.com/in/muharihar/)