Crie uma API REST simples usando Go, MySQL, Gorm e mux

ABHI KHANDELWAL Seg. 13 de jul · 3 min ler

Go foi projetado pelo Google. Golang é influenciado por C, mas com maior simplicidade e portabilidade. Este artigo orientará você na criação de uma API REST simples usando o Go.

Sobre o aplicativo
O aplicativo é um servidor REST API simples que fornecerá pontos de extremidade para as operações CRUD nos registros do Football Ground Booking.

Para realizar este trabalho, primeiro temos que instalar algumas dependências.

1. Gorilla mux : Para criar rotas e manipuladores HTTP.

 vá buscar github.com/gorilla/mux 

2. gorm : Uma ferramenta ORM para o MySQL.

 vá buscar github.com/jinzhu/gorm 

3. mysql : o driver do MySQL.

 vá em github.com/go-sql-driver/mysql 

Antes de começar, primeiro temos que criar um banco de dados manualmente. Eu estou usando o shell MySQL para criar um banco de dados. Entre no shell do MySQL e use a seguinte instrução para criar o banco de dados

 CREATE DATABASE Football; 

Agora crie um arquivo main.go no diretório do seu projeto e comece a cozinhar. Queremos conectar nosso aplicativo ao nosso banco de dados:

 db, err = gorm.Open (“mysql”, “usuário: senha @ tcp (127.0.0.1:3306) / dbname? charset = utf8 & parseTime = True”) 

NOTA : Para lidar com o time.Time , você precisa incluir parseTime como parâmetro. ( Mais parâmetros suportados )

Vamos dar uma olhada no nosso arquivo main.go agora:

Vamos testar esse arquivo

 abhi @ abhi-Inspiron-N4050: ~ / $ go build 
abhi @ abhi-Inspiron-N4050: ~ / $ go run main.go
2019/07/13 00:49:33 Conexão Estabelecida

Agora, crie uma estrutura de Booking simples que total_members id , user , total_members

 tipo reserva struct { 
Id int `json:” id ”`
User string `json:” usuário ”`
Membros int `json:” membros ”`
}

Depois de criar uma estrutura, é hora de migrar nosso esquema

 db.AutoMigrate (& Booking {}) 

AVISO : O AutoMigrate só criará tabelas, colunas ausentes e índices ausentes, e NÃO mudará o tipo de coluna existente nem excluirá colunas não usadas para proteger seus dados.

Crie um servidor da Web

Agora, criamos um servidor da web para lidar com solicitações HTTP. Para isso, estou criando uma nova função chamada handleRequests() . Sob esta função, crie uma nova instância de um roteador mux :

 myRouter: = mux.NewRouter (). StrictSlash (true) 

Agora execute o código digitando go run main.go

 abhi @ abhi-Inspiron-N4050: ~ / $ go run main.go 
2019/07/13 00:59:54 Conexão Estabelecida
2019/07/13 00:59:54 Iniciando o servidor de desenvolvimento em
http://127.0.0.1:10000/
2019/07/13 00:59:54 Saia do servidor com o CONTROL-C.

Em seguida, abra http://localhost:10000/ em seu navegador e você verá uma Welcome to Homepage!

Operações CRUD

Nesta parte, vamos fazer as operações CREATE , READ , UPDATE e DELETE

  • CRIAR uma nova reserva

Adicione a rota à lista de rotas definidas na função handleRequests . No entanto, adicionaremos .Methods("POST") ao final de nossa rota para especificar que só queremos chamar essa função quando a solicitação recebida for uma solicitação HTTP POST .

 myRouter.HandleFunc (“/ new-booking”, createNewBooking) .Métodos (“POST”) 

Vamos criar uma nova função createNewBooking() que createNewBooking() um dado de solicitação POST e criará uma nova entrada de reserva no banco de dados. Mas primeiro temos que Desmarcar os dados JSON no corpo da solicitação em uma nova estrutura Booking que pode ser anexada à tabela e, para criar um novo registro, usamos a seguinte função:

 func createNewBooking (w http.ResponseWriter, r * http.Request) { 
// obtém o corpo da nossa solicitação POST
// retorna a resposta da string contendo o corpo da solicitação
reqBody, _: = ioutil.ReadAll (r.Body)
var reserva Reservar
json.Unmarshal (reqBody, & booking)
db.Create (& booking)
fmt.Println ("Endpoint Hit: Criando Nova Reserva")
json.NewEncoder (w) .Encode (reserva)
}
  • LEITURA de todas as reservas

Novamente, adicione a rota à lista de rotas definidas na função handleRequests

 myRouter.HandleFunc (“/ all-bookings”, returnAllBookings) 

Crie uma nova função returnAllBookings() Para obter todos os registros, usamos db.Find(&bookings)

 func returnAllBookings (w http.ResponseWriter, r * http.Request) { 
reservas: = [] Reserva {}
db.Find (& reservas)
fmt.Println (“Endpoint Hit: returnAllBookings”)
json.NewEncoder (w) .Encode (reservas)
}
  • Lendo detalhes de reserva por seu ID

Para realizar esse trabalho, executamos um loop sobre todas as reservas, se booking.id for igual à chave que passamos na UTL, ele retornará o detalhe da reserva codificado como JSON.

 // handleRequests () 
myRouter.HandleFunc ("/ booking / {id}", returnSingleBooking)

func returnSingleBooking (w http.ResponseWriter, r * http.Request) {
vars: = mux.Vars (r)
key: = vars [“id”]
reservas: = [] Reserva {}
db.Find (& reservas)
para _, reserva: = reservas de intervalo {
// string para int
s, err: = strconv.Atoi (chave)
se err == nil {
if booking.Id == s {
fmt.Println (reserva)
fmt.Println (“Endpoint Hit: Booking No:”, chave)
json.NewEncoder (w) .Encode (reserva)
}
}
}
}

Agora é a sua vez de criar a operação Atualizar e Excluir. Se você precisar de alguma ajuda, faça perguntas na seção de comentários. Você também pode receber ajuda dos seguintes links:

Finalmente, completamos nosso primeiro projeto em Golang. Espero que tenhas gostado 🙂