Este projeto é um desafio prático para iniciantes em Go, focado na construção de uma API REST. O objetivo é desenvolver um sistema CRUD (Criar, Ler, Atualizar, Deletar) de usuários com armazenamento em memória, permitindo praticar os conceitos fundamentais de HTTP, como métodos, códigos de status e manipulação de JSON na linguagem Go.
Estrutura, regras e requisitos do projeto
O objetivo deste projeto é construir uma API RESTful em Go para gerenciar usuários. Você implementará as operações básicas de CRUD (Criar, Ler, Atualizar e Deletar) utilizando um "banco de dados" em memória, o que permitirá focar nos conceitos de HTTP e na estrutura de uma aplicação web em Go.
{ "id": "", // UUID, obrigatório "first_name": "Jane Doe", // String, obrigatória (mín. 2, máx. 20 caracteres) "last_name": "Jane Doe", // String, obrigatória (mín. 2, máx. 20 caracteres) "biography": "Tendo diversão" // String, obrigatória (mín. 20, máx. 450 caracteres) }
Como o objetivo desse projeto é praticar os conceitos basicos de Go e também HTTP, não abordamos ainda sobre persistência. Devido a isso, iremos simular um banco de dados onde todo o conteúdo enviado por nossos usuários será salvo em um Hash Map, a onde o id é a chave de cada registro.
type id uuid.UUID type user struct { FirstName string LastName string biography string } type application struct { data map[id]user
Você deve criar um pacote que implemente as seguintes funções para manipular este mapa:
FindAll(): Retorna a lista completa de usuários.FindById(id): Retorna o usuário correspondente ao id ou nil se não existir.Insert(newUser): Adiciona um novo usuário e retorna o usuário recém-criado com seu id.Update(id, userUpdates): Atualiza um usuário existente e retorna a versão atualizada.Delete(id): Remove um usuário e retorna o usuário que foi deletado.Sua API deverá implementar os seguintes endpoints, cada um com sua lógica de negócio específica:
Obs.: Todas as respostas de erro devem ser retornadas no formato JSON, contendo uma mensagem descritiva do erro. Ex.:
{ "error": "User not found" }
POST /api/users - Criar um novo usuárioUtiliza as informações enviadas no corpo da requisição para criar um novo usuário.
201 e o objeto do usuário recém-criado (incluindo o id).first_name, last_name ou biography, retorne o status 400.500.GET /api/users - Listar todos os usuáriosRetorna uma lista com todos os usuários cadastrados.
200 e a lista de todos os usuários.500.GET /api/users/:id - Buscar um usuário específicoRetorna o objeto do usuário com o id especificado na URL.
200 e o objeto do usuário.id não existir, retorne o status 404.500.PUT /api/users/:id - Atualizar um usuárioAtualiza o usuário com o id especificado usando os dados enviados no corpo da requisição.
200 e o objeto do usuário atualizado.id não existir, retorne o status 404.first_name, last_name ou biography no corpo da requisição, retorne o status 400.500.DELETE /api/users/:id - Deletar um usuárioRemove o usuário com o id especificado na URL.
200 com o objeto do usuário que foi deletado.id não existir, retorne o status 404.500.O objetivo deste projeto é construir uma API RESTful em Go para gerenciar usuários. Você implementará as operações básicas de CRUD (Criar, Ler, Atualizar e Deletar) utilizando um "banco de dados" em memória, o que permitirá focar nos conceitos de HTTP e na estrutura de uma aplicação web em Go.
{ "id": "", // UUID, obrigatório "first_name": "Jane Doe", // String, obrigatória (mín. 2, máx. 20 caracteres) "last_name": "Jane Doe", // String, obrigatória (mín. 2, máx. 20 caracteres) "biography": "Tendo diversão" // String, obrigatória (mín. 20, máx. 450 caracteres) }
Como o objetivo desse projeto é praticar os conceitos basicos de Go e também HTTP, não abordamos ainda sobre persistência. Devido a isso, iremos simular um banco de dados onde todo o conteúdo enviado por nossos usuários será salvo em um Hash Map, a onde o id é a chave de cada registro.
type id uuid.UUID type user struct { FirstName string LastName string biography string } type application struct { data map[id]user
Você deve criar um pacote que implemente as seguintes funções para manipular este mapa:
FindAll(): Retorna a lista completa de usuários.FindById(id): Retorna o usuário correspondente ao id ou nil se não existir.Insert(newUser): Adiciona um novo usuário e retorna o usuário recém-criado com seu id.Update(id, userUpdates): Atualiza um usuário existente e retorna a versão atualizada.Delete(id): Remove um usuário e retorna o usuário que foi deletado.Sua API deverá implementar os seguintes endpoints, cada um com sua lógica de negócio específica:
Obs.: Todas as respostas de erro devem ser retornadas no formato JSON, contendo uma mensagem descritiva do erro. Ex.:
{ "error": "User not found" }
POST /api/users - Criar um novo usuárioUtiliza as informações enviadas no corpo da requisição para criar um novo usuário.
201 e o objeto do usuário recém-criado (incluindo o id).first_name, last_name ou biography, retorne o status 400.500.GET /api/users - Listar todos os usuáriosRetorna uma lista com todos os usuários cadastrados.
200 e a lista de todos os usuários.500.GET /api/users/:id - Buscar um usuário específicoRetorna o objeto do usuário com o id especificado na URL.
200 e o objeto do usuário.id não existir, retorne o status 404.500.PUT /api/users/:id - Atualizar um usuárioAtualiza o usuário com o id especificado usando os dados enviados no corpo da requisição.
200 e o objeto do usuário atualizado.id não existir, retorne o status 404.first_name, last_name ou biography no corpo da requisição, retorne o status 400.500.DELETE /api/users/:id - Deletar um usuárioRemove o usuário com o id especificado na URL.
200 com o objeto do usuário que foi deletado.id não existir, retorne o status 404.500.Use este checklist para ajudar a organizar a sua entrega