Home » 🚀 Desenvolvendo uma Aplicação Completa em Go: ToDo API

🚀 Desenvolvendo uma Aplicação Completa em Go: ToDo API

Se você está começando com Golang ou deseja criar uma aplicação completa, este guia é para você! Vamos desenvolver uma API RESTful de Gerenciamento de Tarefas com as melhores práticas. Aqui está o que cobrimos:


📂 Estrutura do Projeto

Organize o projeto de forma clara e escalável:

go
project/
├── main.go
├── config/
│ └── config.go
├── controllers/
│ └── task_controller.go
├── models/
│ └── task.go
├── routes/
│ └── routes.go
├── database/
│ └── connection.go
└── utils/
└── responses.go

🛠️ Passos para Configuração

  1. Instalar Go: Download do Golang.
  2. Configurar o Projeto:
    bash
    mkdir todo-api
    cd todo-api
    go mod init todo-api
  3. Instalar Dependências:
    bash
    go get github.com/gofiber/fiber/v2
    go get gorm.io/gorm
    go get gorm.io/driver/sqlite

🧑‍💻 Implementação

Arquivo Principal: main.go

go

package main

import (
“log”
“todo-api/database”
“todo-api/routes”

“github.com/gofiber/fiber/v2”
)

func main() {
database.ConnectDB()
app := fiber.New()
routes.SetupRoutes(app)
log.Fatal(app.Listen(“:3000”))
}

Banco de Dados: database/connection.go

go

package database

import (
“log”
“todo-api/models”

“gorm.io/driver/sqlite”
“gorm.io/gorm”
)

var DB *gorm.DB

func ConnectDB() {
var err error
DB, err = gorm.Open(sqlite.Open(“tasks.db”), &gorm.Config{})
if err != nil {
log.Fatal(“Erro ao conectar com o banco de dados: “, err)
}

DB.AutoMigrate(&models.Task{})
}

Modelo: models/task.go

go

package models

import “gorm.io/gorm”

type Task struct {
gorm.Model
Title string `json:”title”`
Description string `json:”description”`
Completed bool `json:”completed”`
}

Controlador: controllers/task_controller.go

go

package controllers

import (
“todo-api/database”
“todo-api/models”

“github.com/gofiber/fiber/v2”
)

func GetTasks(c *fiber.Ctx) error {
var tasks []models.Task
database.DB.Find(&tasks)
return c.JSON(tasks)
}

func CreateTask(c *fiber.Ctx) error {
task := new(models.Task)
if err := c.BodyParser(task); err != nil {
return c.Status(400).JSON(fiber.Map{“error”: “Invalid input”})
}
database.DB.Create(&task)
return c.Status(201).JSON(task)
}

func UpdateTask(c *fiber.Ctx) error {
id := c.Params(“id”)
var task models.Task
if result := database.DB.First(&task, id); result.Error != nil {
return c.Status(404).JSON(fiber.Map{“error”: “Task not found”})
}
if err := c.BodyParser(&task); err != nil {
return c.Status(400).JSON(fiber.Map{“error”: “Invalid input”})
}
database.DB.Save(&task)
return c.JSON(task)
}

func DeleteTask(c *fiber.Ctx) error {
id := c.Params(“id”)
var task models.Task
if result := database.DB.First(&task, id); result.Error != nil {
return c.Status(404).JSON(fiber.Map{“error”: “Task not found”})
}
database.DB.Delete(&task)
return c.SendStatus(204)
}

Rotas: routes/routes.go

go

package routes

import (
“todo-api/controllers”

“github.com/gofiber/fiber/v2”
)

func SetupRoutes(app *fiber.App) {
api := app.Group(“/api”)

api.Get(“/tasks”, controllers.GetTasks)
api.Post(“/tasks”, controllers.CreateTask)
api.Put(“/tasks/:id”, controllers.UpdateTask)
api.Delete(“/tasks/:id”, controllers.DeleteTask)
}


🚀 Rodando o Projeto

  1. Iniciar o servidor:
    bash
    go run main.go
  2. Testar as Rotas:
    • GET /api/tasks → Retorna todas as tarefas.
    • POST /api/tasks → Cria uma nova tarefa.
    • PUT /api/tasks/:id → Atualiza uma tarefa específica.
    • DELETE /api/tasks/:id → Remove uma tarefa.

🌟 Conclusão

Você acabou de criar uma aplicação funcional com Golang! Essa API pode ser expandida com autenticação, testes automatizados, ou até mesmo deployment na nuvem. Se precisar de ajuda para avançar com o projeto, estou por aqui. 🚀

Leave a Reply

Your email address will not be published. Required fields are marked *

You can use the Markdown in the comment form.