Quickstarters
Feature Overview
Como Construir um Backend para Golang?
36 min
introdução neste tutorial, você aprenderá como construir e testar um backend completo para golang usando o back4app vamos guiá lo na integração de recursos essenciais do back4app—como gerenciamento de banco de dados, configurações de segurança, autenticação de usuários, armazenamento de arquivos e cloud code—para criar um backend seguro, flexível e escalável que funcione bem com seu servidor http em go nosso foco será usar as apis restful do back4app para conectar ao banco de dados a partir do nosso cliente http em golang, em vez de um sdk parse dedicado, para que possamos ilustrar como construir funções de manipulador fáceis de manter para seu novo backend você verá como essa abordagem reduz a complexidade do desenvolvimento em comparação com a configuração de seus próprios servidores do zero ao confiar nas consultas em tempo real do back4app, no armazenamento de arquivos e nos sistemas de autenticação de usuários, você acelerará seu processo de criação de backend ao final, você saberá como construir um backend seguro em golang, agendar tarefas automatizadas e integrar webhooks externos você estará bem preparado para aprimorar esta base em uma aplicação pronta para produção ou adicionar lógica personalizada conforme necessário pré requisitos uma conta back4app inscreva se gratuitamente aqui https //www back4app com/ um novo projeto back4app começando com back4app https //www back4app com/docs/get started/new parse app ambiente de desenvolvimento go (golang) certifique se de que você tenha o go instalado em sua máquina você pode encontrar instruções na documentação oficial do go https //go dev/ conhecimento básico do pacote http do go e apis restful familiaridade com como escrever um manipulador de func, analisar mensagens de erro, lidar com solicitações de método post e configurar um servidor http localhost ajudará certifique se de ter esses pré requisitos em vigor antes de prosseguir esta configuração facilitará sua experiência enquanto você descobre como construir um backend para golang usando o back4app passo 1 – criando um novo projeto no back4app e conectando por que um novo projeto? criar um novo projeto back4app é seu primeiro passo é onde você armazenará dados, configurará o armazenamento de arquivos, agendará funções em nuvem e adicionará tarefas em segundo plano este projeto de backend ancorará todos os passos subsequentes faça login na sua conta back4app clique em “novo app” no seu painel do back4app nomeie seu app (por exemplo, “golang backend tutorial”) uma vez criado, ele aparecerá no seu painel este aplicativo agora é o seu backend baseado em back4app conectando via apis rest back4app fornece apis restful para criar, atualizar e excluir dados em golang, usaremos o cliente http da biblioteca padrão do go para nos comunicarmos com esses endpoints localize seu id do aplicativo e chave da api rest indo para a seção configurações ou segurança e chaves do seu aplicativo back4app você precisará dessas credenciais em cada cabeçalho de solicitação ilustraremos isso nos próximos passos quando nos conectarmos ao banco de dados usando o método post, get e outras solicitações http passo 2 – configurando o banco de dados criando um modelo de dados para armazenar dados no back4app, você define classes (tabelas) e colunas (campos) por exemplo, digamos que queremos uma todo classe você pode criá la manualmente no painel do back4app vá para a seção de banco de dados no painel do seu aplicativo crie uma nova classe chamada “todo ” adicione colunas como título (string) e iscompleted (boolean) você também pode permitir que o sistema crie colunas automaticamente enviando objetos com novos campos do seu aplicativo golang criando um modelo de dados usando o agente de ia abra o agente de ia no seu painel de aplicativos descreva seu modelo de dados desejado (por exemplo, “por favor, crie uma nova classe todo com um campo de título e um campo iscompleted ”) aceite o esquema sugerido este recurso prático economiza tempo no design do esquema do seu banco de dados lendo e escrevendo dados usando rest api (exemplo em golang) abaixo está um exemplo básico de como criar (método post) e buscar (método get) dados usando o pacote http do go suponha que você tenha seu application id e rest api key como variáveis de ambiente package main import ( "bytes" "encoding/json" "fmt" "io/ioutil" "log" "net/http" ) type todo struct { objectid string `json "objectid,omitempty"` title string `json "title,omitempty"` iscompleted bool `json "iscompleted,omitempty"` } func main() { // example create todo newtodo = todo{ title "buy groceries", iscompleted false, } created, err = createtodo(newtodo) if err != nil { log println("error creating todo ", err) } else { log println("created todo with id ", created objectid) } // example fetch todos todos, err = fetchalltodos() if err != nil { log println("error fetching todos ", err) } else { for , t = range todos { log println("fetched todo ", t title, t iscompleted) } } } // createtodo sends a post request to save a new record in the "todo" class func createtodo(todo todo) (todo, error) { // convert struct to json body, = json marshal(todo) // create http request req, err = http newrequest("post", "https //parseapi back4app com/classes/todo", bytes newbuffer(body)) if err != nil { return todo{}, err } // set necessary headers req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") req header set("content type", "application/json") // execute the request client = \&http client{} resp, err = client do(req) if err != nil { return todo{}, err } defer resp body close() if resp statuscode != http statuscreated && resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return todo{}, fmt errorf("api error %s", string(bodybytes)) } // parse response var createdtodo todo if err = json newdecoder(resp body) decode(\&createdtodo); err != nil { return todo{}, err } return createdtodo, nil } // fetchalltodos retrieves all todo objects from back4app using get func fetchalltodos() (\[]todo, error) { req, err = http newrequest("get", "https //parseapi back4app com/classes/todo", nil) if err != nil { return nil, err } req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") client = \&http client{} resp, err = client do(req) if err != nil { return nil, err } defer resp body close() if resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return nil, fmt errorf("api error %s", string(bodybytes)) } // parse response for "results" key var result struct { results \[]todo `json "results"` } if err = json newdecoder(resp body) decode(\&result); err != nil { return nil, err } return result results, nil } nestes exemplos, criamos um cliente http, adicionamos os cabeçalhos necessários e lidamos com códigos de resposta junto com mensagens de erro lembre se de substituir your application id e your rest api key pelas chaves reais do seu projeto back4app lendo e escrevendo dados usando a api graphql o back4app também fornece um endpoint graphql em https //parseapi back4app com/graphql você pode usar uma biblioteca cliente go graphql popular (como machine box graphql https //github com/machinebox/graphql ) para realizar consultas ou mutações isso pode ser uma abordagem mais estruturada do que chamadas rest brutas trabalhando com consultas ao vivo (opcional) se você gostaria de ver atualizações em tempo real em seu aplicativo, pode habilitar consultas ao vivo no painel do back4app golang não possui uma biblioteca oficial de consultas ao vivo do parse no entanto, você pode implementar sua própria conexão websocket para ouvir atualizações de consultas ao vivo de wss\ //your subdomain b4a io este recurso é útil para aplicativos colaborativos que exigem sincronização imediata de dados passo 3 – aplicando segurança com acls e clps visão geral back4app fornece listas de controle de acesso (acls) e permissões em nível de classe (clps) para proteger seus dados as acls são definidas em cada objeto, enquanto as clps definem regras gerais para uma classe inteira permissões em nível de classe vá para a visão do banco de dados do seu aplicativo no back4app selecione uma classe (por exemplo, todo ) clique em permissões em nível de classe e defina o acesso de leitura/gravação para diferentes funções de usuário ou acesso público acls você pode passar uma acl ao criar ou atualizar um objeto via chamadas rest isso garante que apenas certos usuários ou funções possam ler/gravar os dados para mais detalhes, visite diretrizes de segurança do aplicativo https //www back4app com/docs/security/parse security passo 4 – escrevendo funções de código em nuvem por que código em nuvem o código em nuvem permite que você execute funções do lado do servidor, gatilhos ou validações—sem gerenciar seus próprios servidores você pode adicionar lógica de negócios avançada ou integrar apis externas do lado do servidor exemplo de função em nuvem um exemplo simples é uma função que calcula o comprimento do texto no seu main js arquivo no painel do back4app parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); implantação implante o cloud code de uma das seguintes maneiras back4app cli back4app dashboard em cloud code > functions cole seu código no main js editor e clique em implantar chamando funções em nuvem a partir do golang você pode chamar uma função em nuvem via rest a partir do seu cliente http func callcalculatetextlength(txt string) (int, error) { body, = json marshal(map\[string]string{"text" txt}) req, err = http newrequest("post", "https //parseapi back4app com/functions/calculatetextlength", bytes newbuffer(body)) if err != nil { return 0, err } // headers req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") req header set("content type", "application/json") client = \&http client{} resp, err = client do(req) if err != nil { return 0, err } defer resp body close() if resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return 0, fmt errorf("api error %s", string(bodybytes)) } var result struct { result map\[string]int `json "result"` } if err = json newdecoder(resp body) decode(\&result); err != nil { return 0, err } return result result\["length"], nil } passo 5 – configurando a autenticação ativar autenticação de usuário back4app usa uma user classe para autenticação quando você cria um novo usuário via rest, o backend armazenará as credenciais de forma segura e gerará um token de sessão curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"username" "alice", "password" "secret123", "email" "alice\@example com"}' \\ https //parseapi back4app com/users use o token de sessão retornado para solicitações subsequentes que requerem privilégios de usuário em go, você enviaria o mesmo tipo de solicitação http de um cliente http, como demonstrado anteriormente login social para logins sociais como google ou facebook, você precisará configurar as configurações de oauth no back4app esses fluxos geralmente envolvem a troca de tokens consulte a documentação de login com apple / login social https //www back4app com/docs/platform/sign in with apple para detalhes passo 6 – manipulação de armazenamento de arquivos configuração e upload você pode armazenar arquivos no back4app enviando os como dados codificados em base64 ou multipart/form data curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{ "file" { "name" "myimage png", " type" "file", "base64" "ivborw0kggoaaaansuheugaa " } }' \\ https //parseapi back4app com/files/myimage png após o upload, você pode anexar o arquivo a um objeto armazenando a url do arquivo retornada ou o ponteiro do arquivo em go, crie uma solicitação http da mesma maneira—apenas certifique se de codificar o conteúdo do arquivo corretamente passo 7 – verificação de email e redefinição de senha importância a verificação de email garante que os usuários controlam o email fornecido, enquanto a redefinição de senha os ajuda a recuperar contas ambas as funcionalidades aumentam a segurança e a confiança habilitando a verificação de email vá para o seu painel do back4app sob configurações de email , habilite os emails de verificação personalize seus modelos de email, se necessário quando um usuário se inscreve, um email de verificação é enviado automaticamente para ele redefinição de senha use o endpoint rest requestpasswordreset https //docs parseplatform org/rest/guide/#r passwordreset para iniciar uma redefinição de senha curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"email" "alice\@example com"}' \\ https //parseapi back4app com/requestpasswordreset curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"email" "alice\@example com"}' \\ https //parseapi back4app com/requestpasswordreset curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"email" "alice\@example com"}' \\ https //parseapi back4app com/requestpasswordreset passo 8 – agendando tarefas com cloud jobs o que os cloud jobs fazem os cloud jobs são executados em um cronograma para automatizar tarefas como limpar dados obsoletos ou enviar boletins semanais parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); // remove records older than 30 days // }); implante este trabalho e agende o em seu back4app dashboard > configurações do app > configurações do servidor > tarefas em segundo plano passo 9 – integrando webhooks por que webhooks webhooks permitem que você notifique serviços externos quando certos eventos acontecem por exemplo, você pode enviar alertas do slack quando novos itens de todo são criados vá para a seção de webhooks em seu back4app dashboard configure seu endpoint (como https //your external service com/webhook ) atribua gatilhos (por exemplo, aftersave em todo ) você também pode acionar apis externas a partir do cloud code escrevendo uma solicitação de cliente http se preferir controle direto dos eventos passo 10 – explorando o painel de administração do back4app visão geral o aplicativo admin do back4app é uma interface de apontar e clicar que você pode compartilhar com membros da equipe não técnicos para gerenciar dados ativar o aplicativo admin vá para mais > aplicativo admin no seu painel do back4app ative e crie um usuário administrador use seu subdomínio escolhido para fazer login em uma interface simples para manipulação de dados isso o libera de escrever consultas diretas ou código personalizado para realizar operações básicas conclusão neste guia, você descobriu como construir um backend para golang usando o back4app você explorou como se conectar ao banco de dados via apis restful, aplicar medidas de segurança com acls e clps, executar tarefas agendadas com cloud jobs, integrar com serviços externos usando webhooks e configurar autenticação de usuários e armazenamento de arquivos com o pacote http do go e os recursos robustos do back4app, você pode criar um backend poderoso que economiza tempo e escala sem esforço agora que você dominou o básico, pode estender a lógica da função manipuladora do golang, conectar se a novos endpoints de api e construir um aplicativo rico que atenda às suas necessidades próximos passos refine seu aplicativo golang adicione recursos avançados como acesso baseado em funções ou otimize seu servidor http para produção saiba mais sobre consultas em tempo real integre consultas ao vivo para aplicativos colaborativos explore a documentação avançada do back4app ajuste suas acls, logs e análises incorpore apis de terceiros use cloud code ou webhooks diretos para expandir a funcionalidade do seu backend