Envio de SMS em Go (Golang): integração com API de biblioteca
No mundo moderno, o envio de mensagens SMS continua sendo uma função essencial para verificação de usuários, notificações e campanhas de marketing. Em Go (Golang), isso é implementado de forma fácil e eficiente graças às ferramentas integradas para trabalhar com HTTP e JSON. Neste artigo, vamos abordar como escrever sua própria biblioteca para enviar SMS via REST API usando Go. O exemplo será baseado em um provedor abstrato, mas o código pode ser facilmente adaptado para qualquer serviço (Twilio, SMS.ru, Vonage, etc.).
Arquitetura da biblioteca
Nossa biblioteca será composta pelos seguintes componentes:
- Cliente para requisições HTTP com suporte a timeouts e tentativas repetidas
- Estruturas para requisição (número, texto, remetente) e resposta (status, ID da mensagem, erro)
- Função de inicialização com chave de API e URL base
- Método
SendSMSpara enviar uma única mensagem
Instalação e preparação
Para funcionar, você só precisa da biblioteca padrão do Go (net/http, encoding/json). Nenhuma dependência externa é necessária. Crie um arquivo sms.go e importe o pacote:
package smsclient
import ( "bytes" "encoding/json" "fmt" "net/http" "time")Estruturas de dados
Vamos definir os tipos para requisição e resposta:
// SMSRequest representa o corpo da requisição para a APItype SMSRequest struct { To string `json:"to"` // Número do destinatário no formato internacional Text string `json:"text"` // Texto da mensagem Sender string `json:"sender"` // Nome do remetente (alfa-nome)}
// SMSResponse contém o resultado do enviotype SMSResponse struct { Success bool `json:"success"` MessageID string `json:"message_id,omitempty"` Error string `json:"error,omitempty"`}Cliente para trabalhar com a API
Vamos criar a estrutura do cliente com configuração:
// Client gerencia o envio de SMS via APItype Client struct { apiKey string baseURL string httpClient *http.Client}
// NewClient cria uma nova instância do clientefunc NewClient(apiKey, baseURL string) *Client { return &Client{ apiKey: apiKey, baseURL: baseURL, httpClient: &http.Client{ Timeout: 10 * time.Second, }, }}Método de envio de SMS
Vamos implementar a lógica principal — envio de uma requisição POST com corpo JSON:
// SendSMS envia um SMS e retorna a resposta da APIfunc (c *Client) SendSMS(req SMSRequest) (*SMSResponse, error) { // 1. Serializa a requisição em JSON body, err := json.Marshal(req) if err != nil { return nil, fmt.Errorf("erro ao serializar requisição: %w", err) }
// 2. Cria a requisição HTTP httpReq, err := http.NewRequest("POST", c.baseURL+"/sms/send", bytes.NewBuffer(body)) if err != nil { return nil, fmt.Errorf("erro ao criar requisição: %w", err) }
// 3. Define os cabeçalhos httpReq.Header.Set("Content-Type", "application/json") httpReq.Header.Set("Authorization", "Bearer "+c.apiKey)
// 4. Executa a requisição resp, err := c.httpClient.Do(httpReq) if err != nil { return nil, fmt.Errorf("erro ao executar requisição: %w", err) } defer resp.Body.Close()
// 5. Decodifica a resposta var smsResp SMSResponse if err := json.NewDecoder(resp.Body).Decode(&smsResp); err != nil { return nil, fmt.Errorf("erro ao decodificar resposta: %w", err) }
// 6. Verifica o código de status HTTP if resp.StatusCode != http.StatusOK { return &smsResp, fmt.Errorf("API retornou código %d: %s", resp.StatusCode, smsResp.Error) }
return &smsResp, nil}Exemplo de uso
Agora vamos mostrar como aplicar a biblioteca em código real:
package main
impo Também na biblioteca
CoreLocation para Swift: guia completo com exemplos
Geração de relatórios PDF em Java: visão geral das bibliotecas e ferramentas
Trabalho com XML em PHP: DOMDocument, SimpleXML e XPath
Cliente Redis para PHP: Predis e PhpRedis – conexão e exemplos
Processamento de Markdown em Swift para iOS e macOS: bibliotecas e exemplos