https://github.com/pcpratheesh/go-urlshortner
URL Shortener Service in Go with storage
https://github.com/pcpratheesh/go-urlshortner
docker docker-compose fiber fiber-framework file golang golang-package snippets swagger url-shortener
Last synced: about 2 months ago
JSON representation
URL Shortener Service in Go with storage
- Host: GitHub
- URL: https://github.com/pcpratheesh/go-urlshortner
- Owner: pcpratheesh
- Created: 2022-11-30T14:53:07.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-07-02T06:59:48.000Z (almost 2 years ago)
- Last Synced: 2025-05-30T00:41:38.233Z (about 1 year ago)
- Topics: docker, docker-compose, fiber, fiber-framework, file, golang, golang-package, snippets, swagger, url-shortener
- Language: Go
- Homepage:
- Size: 45.9 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# go-urlshortner
A golang api application which can be used to shorten any url.
## URL Shortening
```
URL shortening is a technique on the World Wide Web in which a Uniform Resource Locator may be made substantially shorter and still direct to the required page. This is achieved by using a redirect which links to the web page that has a long URL
```
## Tech Stack
- [Golang](https://go.dev/)
- [Fiber](https://docs.gofiber.io/) - Express inspired web framework
- [Docker](https://www.docker.com/)
- [Docker compose](https://docs.docker.com/compose/)
### Golang
Go is a statically typed, compiled programming language designed at Google by Robert Griesemer, Rob Pike, and Ken Thompson. It is syntactically similar to C, but with memory safety, garbage collection, structural typing, and CSP-style concurrency
credits:google
### Fiber
Fiber is a Go web framework built on top of Fasthttp, the fastest HTTP engine for Go. It's designed to ease things up for fast development with zero memory allocation and performance in mind
### Docker
Docker is a set of platform as a service products that use OS-level virtualization to deliver software in packages called containers. The service has both free and premium tiers. The software that hosts the containers is called Docker Engine. It was first started in 2013 and is developed by Docker, Inc
credits:google
### Docker Compose
Docker Compose is a tool for running multi-container applications on Docker defined using the Compose file format. A Compose file is used to define how the one or more containers that make up your application are configured.
credits:google
## Installation
- install Docker
- [Linux](https://docs.docker.com/desktop/install/linux-install/)
- [Windows](https://docs.docker.com/desktop/install/windows-install/)
- [Mac OS](https://docs.docker.com/desktop/install/mac-install/)
- Install Docker compose
- https://docs.docker.com/compose/install/other/
- After successfull installation, run the following command to build and up the docker container
docker-compose up
or
docker-compose up -d : to run the container in background
- Server will be running now
## API KEY
`encode` is secured with an api key. You can use `3cbc5291f1e04ebe5ea24bfdba6763c49c597cea` as default.
## Try API
curl --request POST \
--url http://127.0.0.1:8080/encode \
--header 'Content-Type: application/json' \
--header 'x-api-key: 3cbc5291f1e04ebe5ea24bfdba6763c49c597cea' \
--data '{
"url":"https://google.com"
}'
## How to implement new storage
At the moment, the system is developed with easy implementation of new storages, such as databases, caches, etc.
Follow the below steps to implement the redis cache
- Install redis
- Create `redis.go` and `redis_test.go` files under `pkg/storage`
- Create new structure `RedisStorage` within redis.go
- Implement `CheckURLExists`, `SaveURL`, `RetrieveURL` methods in `RedisStorage` struct, and a `NewRedisStorage` function to create new object of `RedisStorage`
- Create new global variable `STORE_TYPE_REDIS` with value `Redis`
- Add a new case within the `NewStorage` function to switch to `RedisStorage`
- And the last set teh env config as `Redis` to run the application with `Redis Cache`
## Useful Docker commands
docker build -t pcpratheesh/go_url_shortner .
docker images
docker container ps
docker logs --follow
## Switch shortned url storage
You can setup environment variable as
`URLSRT_STORE='File'` or `URLSRT_STORE='InMemory'`