Quickstarters
Feature Overview
How to Build a Backend for Golang?
35 мин
введение в этом учебном пособии вы научитесь создавать и тестировать полный бэкенд для golang с использованием back4app мы проведем вас через интеграцию основных функций back4app — таких как управление базами данных, настройки безопасности, аутентификация пользователей, хранение файлов и cloud code — чтобы создать безопасный, гибкий и масштабируемый бэкенд, который хорошо работает с вашим go http сервером мы сосредоточимся на использовании restful api back4app для подключения к базе данных из нашего golang http клиента, а не на использовании специализированного parse sdk, чтобы проиллюстрировать, как создавать легко поддерживаемые функции обработчики для вашего нового бэкенда вы увидите, как этот подход снижает сложность разработки по сравнению с настройкой собственных серверов с нуля полагаясь на системы реального времени back4app, хранение файлов и аутентификацию пользователей, вы ускорите процесс создания вашего бэкенда к концу вы узнаете, как создать безопасный бэкенд на golang, планировать автоматизированные задачи и интегрировать внешние вебхуки вы будете хорошо подготовлены, чтобы развить эту основу в готовое к производству приложение или добавить пользовательскую логику по мере необходимости предварительные требования учетная запись back4app зарегистрируйтесь бесплатно здесь https //www back4app com/ новый проект back4app начало работы с back4app https //www back4app com/docs/get started/new parse app среда разработки go (golang) убедитесь, что у вас установлен go на вашем компьютере вы можете найти инструкции в официальная документация go https //go dev/ базовые знания о пакете http go и restful api знание того, как написать обработчик функции, разобрать сообщения об ошибках, обрабатывать запросы метода post и настроить http сервер на localhost, будет полезно убедитесь, что у вас есть все эти предварительные требования перед тем, как продолжить эта настройка упростит ваш опыт, когда вы будете изучать, как создать бэкенд для golang с использованием back4app шаг 1 – создание нового проекта на back4app и подключение почему новый проект? создание нового проекта back4app – это ваш первый шаг здесь вы будете хранить данные, настраивать файловое хранилище, планировать облачные функции и добавлять фоновые задачи этот проект бэкенда станет основой для всех последующих шагов войдите в свою учетную запись back4app нажмите “новое приложение” в вашей панели управления back4app назовите ваше приложение (например, “golang backend tutorial”) после создания оно появится в вашей панели управления это приложение теперь является вашим бэкендом на базе back4app подключение через rest api back4app предоставляет restful api для создания, обновления и удаления данных в golang мы будем использовать http клиент из стандартной библиотеки go для связи с этими конечными точками найдите ваш идентификатор приложения и rest api ключ перейдя в раздел настройки или безопасность и ключи вашего приложения back4app вам понадобятся эти учетные данные в каждом заголовке запроса мы проиллюстрируем это на следующих этапах, когда подключимся к базе данных, используя метод post, get и другие http запросы шаг 2 – настройка базы данных создание модели данных чтобы хранить данные в back4app, вы определяете классы (таблицы) и столбцы (поля) например, предположим, что мы хотим класс todo вы можете создать его вручную в панели управления back4app перейдите в раздел база данных в панели управления вашего приложения создайте новый класс с именем “todo ” добавьте столбцы, такие как title (string) и iscompleted (boolean) вы также можете позволить системе автоматически создавать столбцы, отправляя объекты с новыми полями из вашего приложения на golang создание модели данных с использованием ai агента откройте ai агента в вашей панели управления приложением опишите вашу желаемую модель данных (например, “пожалуйста, создайте новый класс todo с полем заголовка и полем iscompleted ”) примите предложенную схему эта удобная функция экономит время при проектировании схемы вашей базы данных чтение и запись данных с использованием rest api (пример на golang) ниже приведен базовый пример того, как создать (метод post) и получить (метод get) данные с использованием пакета http в go предположим, у вас есть ваши application id и rest api key в качестве переменных окружения 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 } в этих примерах мы создаем http клиент, добавляем необходимые заголовки и обрабатываем коды ответа вместе с сообщениями об ошибках не забудьте заменить your application id и your rest api key на фактические ключи из вашего проекта back4app чтение и запись данных с использованием graphql api back4app также предоставляет конечную точку graphql по адресу https //parseapi back4app com/graphql вы можете использовать популярную библиотеку клиента go graphql (например, machine box graphql https //github com/machinebox/graphql ) для выполнения запросов или мутаций это может быть более структурированный подход, чем простые вызовы rest работа с живыми запросами (по желанию) если вы хотите видеть обновления в реальном времени в вашем приложении, вы можете включить живые запросы в панели управления back4app golang не имеет официальной библиотеки для живых запросов parse однако вы можете реализовать собственное соединение по веб сокету, чтобы слушать обновления живых запросов от wss\ //your subdomain b4a io эта функция полезна для совместных приложений, требующих немедленной синхронизации данных шаг 3 – применение безопасности с помощью acl и clp обзор back4app предоставляет списки управления доступом (acl) и разрешения на уровне классов (clp) для защиты ваших данных acl определяются для каждого объекта, в то время как clp определяют общие правила для всего класса разрешения на уровне классов перейдите в базу данных вашего приложения в back4app выберите класс (например, todo ) нажмите разрешения на уровне классов и установите доступ на чтение/запись для различных ролей пользователей или публичного доступа acl вы можете передать acl при создании или обновлении объекта через rest вызовы это гарантирует, что только определенные пользователи или роли могут читать/записывать данные для получения дополнительной информации посетите руководство по безопасности приложений https //www back4app com/docs/security/parse security шаг 4 – написание функций облачного кода почему облачный код облачный код позволяет вам запускать функции на стороне сервера, триггеры или валидации — без управления собственными серверами вы можете добавлять сложную бизнес логику или интегрировать внешние api со стороны сервера пример облачной функции простой пример — это функция, которая вычисляет длину текста в вашем main js файле на панели управления back4app parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); развертывание разверните cloud code одним из следующих способов back4app cli back4app dashboard в cloud code > functions вставьте ваш код в редактор main js и нажмите deploy вызов cloud functions из golang вы можете вызвать cloud function через rest из вашего 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 } шаг 5 – настройка аутентификации включить аутентификацию пользователя back4app использует класс user для аутентификации когда вы создаете нового пользователя через rest, сервер будет безопасно хранить учетные данные и генерировать токен сессии 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 используйте возвращенный токен сессии для последующих запросов, которые требуют привилегий пользователя в go вы отправите тот же тип http запроса из http клиента, как было показано ранее социальный вход для социальных входов, таких как google или facebook, вам нужно будет настроить параметры oauth на back4app эти потоки часто включают обмен токенами обратитесь к документации по входу с apple / социальный вход https //www back4app com/docs/platform/sign in with apple для получения подробной информации шаг 6 – обработка хранения файлов настройка и загрузка вы можете хранить файлы на back4app, отправляя их в виде данных, закодированных в base64, или 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 после загрузки вы можете прикрепить файл к объекту, сохранив возвращаемый url файла или указатель на файл в go создайте http запрос аналогичным образом — просто убедитесь, что вы правильно кодируете содержимое файла шаг 7 – подтверждение электронной почты и сброс пароля важность подтверждение электронной почты гарантирует, что пользователи контролируют предоставленный адрес электронной почты, в то время как сброс пароля помогает им восстановить учетные записи оба этих функционала повышают безопасность и доверие включение подтверждения электронной почты перейдите в ваш back4app dashboard в разделе email settings , включите проверочные письма при необходимости настройте свои шаблоны электронной почты когда пользователь регистрируется, ему автоматически отправляется письмо для подтверждения сброс пароля используйте конечную точку rest requestpasswordreset https //docs parseplatform org/rest/guide/#r passwordreset для инициации сброса пароля 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 шаг 8 – планирование задач с помощью облачных заданий что делают облачные задания облачные задания выполняются по расписанию для автоматизации задач, таких как очистка устаревших данных или отправка еженедельных новостных рассылок parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); // remove records older than 30 days // }); разверните это задание и запланируйте его в вашем back4app dashboard > настройки приложения > настройки сервера > фоновая работа шаг 9 – интеграция вебхуков зачем нужны вебхуки вебхуки позволяют уведомлять внешние сервисы, когда происходят определенные события например, вы можете отправлять уведомления в slack, когда создаются новые элементы todo перейдите в раздел вебхуки в вашем back4app dashboard настройте вашу конечную точку (например, https //your external service com/webhook ) назначьте триггеры (например, aftersave на todo ) вы также можете вызывать внешние api из облачного кода, написав запрос http клиента, если предпочитаете прямой контроль событий шаг 10 – изучение панели администратора back4app обзор приложение back4app admin — это интерфейс с возможностью щелчка, которым вы можете поделиться с не техническими членами команды для управления данными включите приложение admin перейдите в дополнительно > приложение admin в вашей панели управления back4app включите его и создайте администратора используйте выбранный вами поддомен для входа в простой интерфейс для манипуляции данными это освобождает вас от необходимости писать прямые запросы или настраивать пользовательский код для выполнения основных операций заключение в этом руководстве вы узнали, как создать бэкенд для golang с использованием back4app вы изучили, как подключиться к базе данных через restful api, применить меры безопасности с помощью acl и clp, запускать запланированные задачи с помощью cloud jobs, интегрироваться с внешними сервисами с использованием webhooks и настраивать аутентификацию пользователей и хранение файлов с помощью пакета http в go и мощных функций back4app вы можете создать мощный бэкенд, который экономит время и легко масштабируется теперь, когда вы освоили основы, вы можете расширить логику функции обработчика golang, подключиться к новым конечным точкам api и создать богатое приложение, которое соответствует вашим потребностям следующие шаги усовершенствуйте ваше приложение на golang добавьте расширенные функции, такие как доступ на основе ролей, или оптимизируйте ваш http сервер для продакшена узнайте больше о запросах в реальном времени интегрируйте живые запросы для совместных приложений изучите расширенную документацию back4app настройте ваши acl, журналы и аналитику интегрируйте сторонние api используйте cloud code или прямые вебхуки для расширения функциональности вашего бэкенда