Projetinho feito durante o curso Clean Architecture na prática: Go, MongoDB e Docker na Udemy. O intuito desse repositório é de estudar Go e MongoDB.
Important
Repositório criado somente para estudar a Criação de uma API com Go e MongoDB.
Conteúdo:
- 1. Configuração do ambiente
- 2. IDE
- 3. Docker
- 4. Introdução ao módulo
- 5. Criando API
- 6. Adicionando o banco de dados
- 7. Criando uma Task
- 8. Listando as tasks
- 9. Atualizando as tasks
- 10. Deletando task
- 11. Adicionando Swagger na aplicação
- Instalação do Go.
- Configuração variável ambiente.
- Checar a versão do Go com comando
go version;
-
Para checar ser o go está rodando é simples:
- Abra o terminal
cmd. - Verifique a versão
go version. - Crie um diretório
mkdir helloe acesecd hello. - Insira um arquivo dentro chamado
hello.gocomo abaixo:
package main import "fmt" func main() { fmt.Println("Hello, World!") }
- Execute utilizando o comando
go run .. - Verifique se retornou
Hello, World!.
- Abra o terminal
- Instalar a extenção do Go
e
.
- Adicionar em
Arquivo > Preferências > Configuraçõesas configuração no VS Code:
{ "go.formatTool": "goimports", "go.lintTool": "golangci-lint", "go.useLanguageServer": true }- Sempre uso a extensão Docker da Microsoft para facilitar a visualização dos conteiners.
Note
A execução do projeto depende da criação do conteiner e que ele esteja executando.
- Teste executado com old_main.go com o comando
go run old_main.go. - Verificar se no localhost
http://localhost:8000/é possível visualizar a mensagemOlá Mundo!.
- Crie um novo arquivo
main.goe adicione o código e execute no terminalgo run main. - Criar um servidor HTTP com a rota
/que retorna a mensagemOlá Mundo!: - Executea o comando
go run main.go. - Verifique se no localhost
http://localhost:8000/é possível visualizar a mensagemOlá Mundo!. - Caso erro devido ao erro de porta, altere o comando para
go run -p 8001 main.goe execute novamente. - Caso o Framework Gin não esteja instalado use o comando
go get -u github.com/gin-gonic/gin. - Execute o comando
go run main.gopara verficarOlá,Mundo!na página localhost.
Projeto no Postman:
Note
As resquisições e o ambiente de teste foram salvos na pasta Postman para utilizar faça o import no Postman.
- Verifique se o Docker está em execução.
- Crie um conteiner Docker com o comando
docker run -d -p 27017:27017 --name mongodb mongo:4. - Verifique com
docker psse a instalação foi realizada. - Baixar pacotes para o projeto:
go mod tidy. - Verificar se foi gerado o arquivo
go.modemgo-crud-api\go.mod. - Continuar a parte do código para criar uma task.
- Criar novo repositório
modelse adicionar o arquivotask.go. - Adicionar uma struct
Taskdentro do arquivotask.go. - Adicionar um método
CreateTaskdentro do arquivomain.go. - Inserir tratamento de exceção para verificar a conexão com o banco de dados.
- Criar o router para POST
Createtask. - Instalar a ferramenta
para visualizar as conexões do MongoDB.
- Para criar a conexão no Studio 3T bastas clicar em
Conect. - Inserir a url
mongodb://localhost:27017para estabelecer a conexão local. - Instalar o Postman para teste da API.
- No Postman é nescessário criar um novo worspace.
- Adicione uma requisiçao
POSTpara testartasksPOST: http://localhost:8000/task. - Insira o JSON dentro do
Body > raw:
{ "title":"Estudando Go", "description":"Exemplo do projeto", "completed":true, "created_at":"2022-03-18T14:10:00Z", "duo_date":"2022-03-18T14:10:00Z" }- Verifique se retornou o id similiar a esse:
{ "id": "683a043f3b9c9b864c7a67a4" }- Checar no Studio3T se os dados foram inseridos no MongoDB. Processo pode ser feito usando um JS
db.getCollection("tasks").find({}).
- Criar o bloco de
listTaskdentro do arquivomain.go. - Inserir tratamento de exceção para verificar a conexão com o banco de dados.
- Inserir o router para
listTask. - No Postman teste utilizando uma requisição
GET: http://localhost:8000/taskspara listar todas as tasks. - Verificar se retorna a lista de tasks adicionadas.
- Implementar o código com a função
- Criar uma request no Postman
PUT - Inserir o
Body > Raw > JSON:
{ "id": "<<ID>>", "title": "<<TÍTULO>>", "description": "<<DESCRIÇÃO>>", "completed": <<TRUE/FALSE>>, "due_date": "<<DATETIME>>", "created_at": "<<DATETIME>>" }- Verificar se API foi atualizada rodando a API
GET: http://localhost:8000/tasks - A API retorna mensagem de sucesso:
{ "message": "Task atualizada com sucesso" }- Verificar no Studio3T se os dados foram atualizados do MongoDB.
- Processo pode ser feito usando um JS
db.getCollection("tasks").find({}).
- Inserir em
main.goa função para apagar a task. - Inserir o router de apagar task.
- No Postman criar um requet
DELETE: http://localhost:8000/task/<<ID>>para deletar a task. - Verificar se a task foi apagada e se API retornou a mensagem de sucesso:
{ "message": "Task deletada com sucesso" } - Verificar no Studio3T se os dados foram deletados do MongoDB.
- Processo pode ser feito usando um JS
db.getCollection("tasks").find({}). - Após a finalização do CRUD popule Tasks com os JS populando-tasks.js ou inserir-task.js.
- Basta inserir os dados no MongoDB e checar com comando
db.getCollection("tasks").find({})oudb.tasks.find().pretty().
- Essa parte é para documentar a API é feita através da instalação de pacotes.
- Acesse o terminal na pasta do projeto
cd go-crud-api. - Instale os pacotes via terminal:
go get -u github.com/swaggo/gin-swagger.go get -u github.com/swaggo/files.go install github.com/swaggo/swag/cmd/swag@latest.
- Fazer o import dos pacotes dentro do
main.go.
"go-crud-api-docs" ginSwagger "github.com/swaggo/gin-swagger" swaggerFiles "github.com/swaggo/files"-
Adiciona novo endpoint.
-
Criar uma pasta
docsemgo-crud-api/docs. -
Inserir a documentação em cada função criada em
main.gofunc createTaskinserir:
// @Summary Criando nova task // @Description Cria uma nova task no banco de dados. // @Tags tasks // @Accept json // @Produce json // @Param task body models.Task true "Dados da Tarefa" // @Success 201 {object} map[string]interface{} // @Failure 400 {object} map[string]string // @Failure 500 {object} map[string]string // @Router /task [post]
func listTaskinserir:
// @Summary Listar tasks // @Description Lista todas as tasks no banco de dados. // @Tags tasks // @Accept json // @Produce json // @Success 200 {array} models.Task // @Failure 500 {object} map[string]string // @Router /tasks [get]
func updateTaskinserir:
// @Summary Atualizando a task // @Description Atualiza uma task no banco de dados. // @Tags tasks // @Accept json // @Produce json // @Param id path string true "ID da tarefa" // @Param task body models.Task true "Dados da Tarefa" // @Success 200 {object} map[string]string // @Failure 400 {object} map[string]string // @Failure 404 {object} map[string]string // @Failure 500 {object} map[string]string // @Router /tasks/{id} [put]
func deleteTaskinserir:
// @Summary Apagar a task // @Description Apaga uma task no banco de dados. // @Tags tasks // @Accept json // @Produce json // @Param id path string true "ID da tarefa" // @Success 200 {object} map[string]string // @Failure 400 {object} map[string]string // @Failure 404 {object} map[string]string // @Failure 500 {object} map[string]string // @Router /tasks/{id} [delete] {delete}
-
No terminal execute
swag --versionpara checar a versão. -
Execute
swag initpara gerar todos os arquivos necessários a partir dos comentários da documentação. -
Verifique se foram criados os arquivos
docs.go,swagger.json,swagger.yamlemgo-crud-api\docs. -
Abrir no navegador o localhost
http://localhost:8000/swagger/index.html. -
Agora temos a visualização dos Swaggers.
Caso queira usar o repositório leia Contribuidores antes de fazer o fork.