Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/felipelaptrin/go-api
Simple API using Golang
https://github.com/felipelaptrin/go-api
api go
Last synced: 12 days ago
JSON representation
Simple API using Golang
- Host: GitHub
- URL: https://github.com/felipelaptrin/go-api
- Owner: felipelaptrin
- Created: 2022-08-16T12:32:10.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-08-16T13:23:08.000Z (over 2 years ago)
- Last Synced: 2024-10-11T17:08:50.692Z (2 months ago)
- Topics: api, go
- Language: Go
- Homepage:
- Size: 73.2 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# go-api
## Description
This is a simple API built using Go and MySQL.## Tools
The following tools/packages/modules were used:- Database: `MySQL`
- Web server: `Mux`
- ORM: `Gorm`## API Design
The API was build using the following folder structure:```
├── config // Database settings
├── controllers // Business logic
├── models // Database tables
├── repository // Functions used to query data from the database
├── routes // Routes of the API
├── schemas // Responses
└── utils // Common functions to be used
```We can make it easier to understand with the picture below.
![API Flow](/docs/flow.png)1- User makes a HTTP request to the API.
2- The specified route will execute a specific controller function.
3- The function needs to interact with the database to gather information. To better isolation of each layer, the controller function will call the repository function to interact with the database and gather the data.
4- The repository is responsible for direct communication with the database.
5- Repository will return the gathered information to the controller.
6- Controller will execute the business logic and use the schema layer to create the response.
7- HTTP response is returned to the user.## Running the API
A docker-compose was created to setup, using Docker, the API and MySQL dabase.So simply running `docker-compose up` will spin up all the infrastructure.
## Routes
The following routes were created.
- GET `/user`
Get all users.
- GET `/user/{id}`
Return information about a specific user given its ID.
- POST `/user`
Adds a new user to the database. Accepts the following body:
```json
{
"name": << name of the user >>,
"email": << email of the user>>,
"status": << bool indicating if user is active or not>>
}
```- PUT `/user/{id}`
Edit information about a user given its ID. Accepts same body as the POST `/user` route.
- DELETE `/user/{id}`
Delete a user given its ID.