Giter Site home page Giter Site logo

twitter-backend's Introduction

Twitter Backend API

This is a Twitter-Backend side project written in Golang along with database like PostgreSQL and Redis, and RabbitMQ as message Queue.

Article explaining the internals:

Docker Build

docker network create Twitter
docker-compose up -d

Only the logs of services are outputed rest are disabled in docker-compose file

Authentication

This API uses JWT (JSON Web Tokens) for authentication. When a user logs in, the API generates a JWT containing the user's id, which is used to authenticate all subsequent requests. I have usen Asymmetric JWTs so it have an private and a public key. private key will be used for creating tokens and public key will be used for verifying the tokens. The Public key is shared by other service for authentication.

Asymmetric JWT key

Endpoints

Auth

 

Routes:

 

Method Url Description
POST /auth/signup Creates a new user.
POST /auth/login Login a user
POST /auth/logout Logout a user
POST /auth/refresh-token Generate new access Token

User

 

Routes:

 

Method Url Description
GET /user/data/:username Gets User Details
DELETE / Delete User
UPDATE / Update User
POST /user/follow?username= Follows User
POST /user/unfollow?username= Unfollows User

Tweet

 

Routes:

 

Method Url Description
POST /tweet/create Create Tweet
GET /tweet/id/:id Get Tweet By ID
DELETE /tweet/id/:id/delete Del Tweet by ID
POST /tweet/id/:id/like Like a Tweet by ID
POST /tweet/id/:id/dislike DisLike a Tweet by ID
POST /tweet/id/:id/retweet Retweet a tweet
DELETE /tweet/id/:id/retweet del a Retweet

Timeline

 

Routes:

 

Method Url Description
GET /timeline/home?start= Gets User's Home timeline
GET /timeline/user?username=&start= Gets User Timeline by specifying username

Architecture

As you know this project in microservice architecture, So each service is independent. Tweet service and Timeline service is connected through Message Queue (RabbitMq). Tweet Service sends the new tweets to Timeline Service and Timleine service pushes these to respective tweet authors followers timeline If authors follower count is less than 10(I know it's very low but for testing this is fine). If it's above 10 followers would fetch tweet when they load the timeline.

Tweet-Timleine link by Mq

 

Conclusion

This was a fun project, I'm glad I could finish this project😬 learned some new things like How twitter timeline works, consul(service register), HAproxy(load balancer), RabbitMq(Message Queue) and Asymmetric JWT token. Now going back to learning👋.

Twitter Journey: "https://twitter.com/serpico_z/status/1605899167439757312"

twitter-backend's People

Contributors

leoantony72 avatar

Stargazers

Moses Kippe avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.