8000 GitHub - micheltank/cryptocurrency-data-service: An application to fetch cryptocurrency data
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

micheltank/cryptocurrency-data-service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cryptocurrency data service

An application to fetch cryptocurrency data through a REST API

Running

  • Option 1: to run application asap you can use docker-compose, as the images have already been built and uploaded to docker hub:
    make docker_compose
  • Option 2: to run the application using go:
    make first_run

Documentation

Project's structure

📦Project
 ┣ 📂cmd
 ┃ ┗ 📂rest
 ┃ ┃ ┣ 📂handler
 ┃ ┃ ┃ ┣ 📂block
 ┃ ┃ ┃ ┣ 📂transaction
 ┃ ┃ ┃ ┗ 📜health_check_handler.go
 ┃ ┃ ┣ 📂presenter
 ┃ ┃ ┗ 📜api.go
 ┣ 📂docs
 ┣ 📂internal
 ┃ ┣ 📂application
 ┃ ┃ ┣ 📂adapter
 ┃ ┃ ┃ ┗ 📂so-chain
 ┃ ┃ ┣ 📂mock
 ┃ ┃ ┣ 📜service.go
 ┃ ┣ 📂domain
 ┃ ┃ ┣ 📂mock
 ┃ ┗ 📂infra
 ┃ ┃ ┣ 📂config
 ┃ ┃ ┗ 📂so-chain
 ┃ ┃ ┃ ┣ 📂mock
 ┗ 📜main.go

Code quality

  • golangci-lint: 0 lint errors
  • unit testing: 71.1% of code coverage

Decisions

  • Design: Clean architecture
  • Unit testing: the libraries onsi/gomega and golang/mock are being used because their facility and popularity
  • Host application: AWS ECS or AWS EKS as they are the most common and reliable solutions
  • Documentation: created Swagger using swaggo and hosted on https://{host}/swagger
  • Scaling: Using ECS or EKS, they will do this job for us, so the only concern is about:
    • Vertically scaling: set a minimum/maximum of CPU/RAM resources
    • Horizontally scaling set a minimum/maximum of replicas and specify the condition using such as: CPU/RAM and/or requests
  • Security: it is a large topic (the CIA Triad), but I can think about:
    • Depending on the client:
      • Api-Key
      • Authentication using OAuth, like AWS Cognito or Keycloack
    • Rate limit
    • Container scan
    • SSL
    • Good practices in development such as coding scan, CI/CD, permissions
  • Deal with latency and delays in external API calls: for this API is ok just to set a timeout such as 10s as we have only fetch calls, but some improvements are:
    • for a better time response, a cache could be included for subsequent calls
    • if the API will deal with operations, so an idempotency key would be needed
  • Caching: in order to have an optimised solution, a dedicated cache solution would be needed, like Redis
  • Errors: the logging is catching all errors and for the client can vary on response:
    • if is an internal error only, respond with a status code 500 without details
    • if is a business domain error, respond with a status code 4xx
  • Monitoring: some solutions for this purpose: Dynatrace/Splunk/Elastic Stack/Slack
  • Observability: some solutions for this purpose: Splunk or Elastic Stack
    • for logging, the application need:
      • standardization of the logs, like putting them in a json format
      • track more data about request

TODO:

  • Improve test coverage
  • Finalize the implementation of the API making it RESTful, using HATEOAS as an example

About

An application to fetch cryptocurrency data

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0