Golang 中的 API 完整 - 第 1 部分
介绍
我开始在 vamos criar uma API 上发布一系列帖子,以完成完整的形式。一个想法和项目是真实的,fugindo um pouco do“CRUD básico”。
Vamos criar um cadastro completo de usuário、com autenticação JWT、redefinição de senha、cadastro de endereço(consumindo uma API)、vamos criar também um cadastro de produtos、trabalhando um pouco com relacionamentos com banco de bados relacional、交易。
Será um projeto simples, mas que vamos utilizar boaparte do ferramental utilizado no dia a dia no market Go.
您发布了有关 vamos usar 的信息、一份初始说明和 vamos criar 或初始项目和 vamos configurar nossos 日志。
O que vamos usar?
Para o nosso projeto, vamos usar o seguinte:
- PostgreSQL与 bados 银行一起使用
- SQCL为激光雷达公司提供咨询服务 银行
- Golang Migrate与激光雷达 com nossas 迁移
- Go Chi para criar nossas rotas
- Go Playground 验证器响应验证器的响应
- Swaggo提供有关 OpenAPI 的文档
- 环境中的变种毒蛇
- Docker para rodar nosso banco de bados
项目结构
Nesse post já vamos deixar nossa estrutura inicial pronta, vamos separa da seguinte maneira:
- cmd:打开我们的应用程序
main.go并响应应用程序。 - config:Vamos salvar algumas 配置 aqui、como envs、日志。
- 内部:Aqui é onde vai ficar nossa regra de negócio
- 内部/dto:Onde vamos 决定了vamos允许应用程序进入的提示
- 内部/实体: Aqui vamos salvar as entidades da nossa aplicação
- 内部/处理程序:Essa Pasta vai ficar nossos arquivos de roteamento (pode chamar decontroller se Preferred)
- 内部/数据库:Essa Pasta é onde vamos salvar tudo que for relacionado ao banco de bados
- 内部/数据库/迁移: Vamos salvar nossas 迁移 aqui
- 内部/数据库/查询: Onde vai ficar nossas 查询 sql de Consulta ao banco
- 内部/数据库/sqlc : Aqui vai ficar os arquivos geradosautomaticamente pelo sqlc
- 内部/存储库:Aqui onde vai ficar nossa camada de repositórios,não seria preciso colocar essa camada,poderíamos usar diretetamente as estruturas do sqlc,mas vamos adicionar mais essa camada,para deixar um pouco mais desacoplado do sqlc。
- 内部/服务:Por último, nossa camada de service, onde a regra de negócio vai ficar (pode chamar de usecase se better)。
Ao longo do projeto vamos melhorando nossa estrutura。
Criando o projeto
Vamos criar 或 projeto com 或 comando
go mod init github.com/wiliamvj/api-users-golang
Em Go é comum criar o nome do projeto com o caminho para o repositórios, criando a estrutura mencionada acima, vamos ter esses diretórios:
最初的时间是立即出现的日志,日志是应用程序中最重要的日志,建议您在开始时使用日志,不使用日志,使用日志。 que o Go já fornece, o slog。
如果您输入的日志有功能,请设置为默认使用方式,如果您NewJSONHandler的日志 devolver 操作系统日志没有 json 格式,那么您可以指定日志和索引,然后使用弹性堆栈,您可以使用面食配置uma 意大利面 chamada记录器e um arquivo logger.go。
package logger
import (
"log/slog"
"os"
)
func InitLogger() {
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
slog.SetDefault(logger)
}
Agora Podemos usar algo como slog.Info("Starting api")e teremos o log em json:
{
"time": "2023-12-01T18:58:22.270976-03:00",
"level": "INFO",
"msg": "starting api"
}
Iniciando o main.go,vamos iniciar nosso 入口点和 carregar o 记录器:
package main
import (
"log/slog"
"github.com/wiliamvj/api-users-golang/config/logger"
)
func main() {
logger.InitLogger()
slog.Info("starting api")
}
关卡中的一些选项确实很困难,例如:
InfoErrorDebugWarn
结束语、个人化的基本原则、决定性的、神秘的、秘密的、信用的、没有记录的、没有文本的、不存在的、不存在的、不存在的例子um Campo do Tipo 密码:
package main
import (
"log/slog"
"github.com/wiliamvj/api-users-golang/config/logger"
)
type user struct {
Name string `json:"name"`
Age int `json:"age"`
Password string `json:"password"`
}
func (u user) LogUser() slog.Value {
return slog.GroupValue(
slog.String("name", u.Name),
slog.Int("age", u.Age),
slog.String("password", "HIDDEN"),
)
}
func main() {
logger.InitLogger()
user := user{
Name: "John Doe",
Age: 30,
Password: "123456",
}
slog.Info("starting api")
slog.Info("creating user", "user", user.LogUser())
}
基本的criamos uma função para log do usuário,que recebe nossa struct,essa função chamada LogUser()return um slog.Valueonde podemos ocultar Campos sensíveis,veja o retorno:
{
"time": "2023-12-01T19:18:29.379521-03:00",
"level": "INFO",
"msg": "creating user",
"user": { "name": "John Doe", "age": 30, "password": "HIDDEN" }
}
例如,您可以定制我们的日志。
普罗西莫斯
Bom,essa foi a 第 1 部分, apenas uma 介绍了 vamos fazer 和 que vamos utilizar,第 2 部分中的大部分内容。
两个 vamos 配置或 banco de bados、sqlc、configurar nossas 迁移和 deixar nossas 接口和配置前的构造函数、como assim 构造函数?去东方的对象,mas vamos usar algo semelhante a OOP。
Já criei 发布了有关使用 vamos utilizar 的所有信息,请参阅第 2 部分。
可以使用 Swagger 或 Swagger 主题来使用 Swaggo 和 Golang 的深色模式
仓库链接
项目存储库
link do projeto no meu blog
文章来源:https://dev.to/wiliamvj/api-completa-em-golang-parte-1-mah
