Skip to content

REST API made using native Golang libraries. This API resembles the basic working of Instagram.

License

Notifications You must be signed in to change notification settings

bhavyagoel/GoRestAPI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logo

Golang RESTful API for Instagram

A Go based REST API built using native libraries. The API has been thoroughly worked through with Postman.

Routes include

  • User Route: These route includes the functionality of fetchUser and addUser.
  • Auth Route: Authentication for user is done using jwt.
  • FileHandler Route: Worked with GridFS to store files as fs.chunks . Added functionality to uploadFile and downloadFile.
  • Post Route: Functionality to create a post having functionality to uploadFile, desctiption, title.

MongoDB MongoDB is serving as the required database for all the storage functionality of this api. To access the MongoDB locally we used a docker container to run an instance of it binding the same to localhost port 27017 using -p 27017:27017.

docker run --name MongoREST -p 27017:27017 -d mongo:latest

Run Locally

Clone the project and navigate to the cloned repo.

  git clone https://github.com/bhavyagoel/GoRestAPI.git
  cd GoRestAPI

Install go dependencies by initialising a local env

go mod init
go mod tidy

Run the API Server

go run main.go

API Reference

Get details by UserID

  GET /user/getUserById
Parameter Type Description
id string Required UserID to fetch details

Dummy Response

{
    "Email": "jane_doe@testing.com",
    "Password": "$2a$14$vJSwx9sOr2e9KMLiVji9tOfB5AbMjro69R/D1wN5Yqa/IpFMCr2Tq",
    "_id": "61617e08b11882299ca8a3fa",
    "id": "393d0be9-1091-4bd0-822b-915980d94b6d",
    "name": "Jane Dow",
    "post": [
        "56f18233-07bc-4472-9f71-4192f3cc2a3f.jpg",
        "927d4eef-7a77-4865-9cb3-0907fa44a871.jpg"
    ]
}

Add User To Database

  POST /user/addUser
Parameter Type Description
Name string Your Name as query Parameter
Email string Your Email as query Parameter
Password string Your Password as query Parameter. Hashed of the same will be saved in db

Note: The string password from the POST request will be automatically hashed using golang.org/x/crypto/bcrypt.
Dummy Response

{
    "message": "User added successfully",
    "result": {
        "InsertedID": "6161e51740c7852d0e45a540"
    }
}

Adding a POST by UserId

To add A post Under a user with a given Id following are the query parma

Parameter Type Description
Id string UUID Generated By github.com/google/uuid package
Title string Title to Your Post passed as a String
Description string A paragraph long Description of the post
urlToImage string URI to the local image location
publishedAt string TimeStamp Generated using time.now()
fileName string Unique fileName Generated github.com/google/uuid
userId string userId that links the post and the user
{
    "fileName": "3b59e4c8-9c75-4e4d-a716-4d18f1e5d22e.jpg",
    "fileSize": 171959,
    "id": "6161eb3a2318903450b28e0e",
    "message": "Successfully uploaded",
    "post": {},
    "user": {
        "Email": "\"jane_doe@testing.com\"",
        "Password": "$2a$14$r/yybaVD9/JgjSY8sP5.XezjyBLzHrARar175YBuneKAYvn5r26hO",
        "_id": "6161eb1c2318903450b28e0a",
        "id": "d3e1fd98-0348-429f-9963-de9433960276",
        "name": "\"Jane Doe\"\n"
    }
}

Testing

To run tests, run the following command The unit tests can be found nested inside the test directory

    cd test/
    go test -v 

TODO

  • Containerising the API using docker
  • Deploying the API to Postman

Badges

MIT License

Creator

Screenshots

Screenshots for the same can be found under the img sub-folder.

About

REST API made using native Golang libraries. This API resembles the basic working of Instagram.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages