Quickstarters
Feature Overview
How to Build a Backend for Blazor?
38 мин
введение в этом учебном пособии вы узнаете, как создать полный бэкенд для приложения blazor с использованием back4app мы пройдем через интеграцию основных функций back4app таких как управление базами данных, функции облачного кода, rest и graphql api, аутентификация пользователей и запросы в реальном времени (live queries) чтобы создать безопасный, масштабируемый и надежный бэкенд, который бесшовно взаимодействует с вашим фронтендом blazor использование надежных бэкенд сервисов back4app с blazor, фреймворком asp net core для создания интерактивных веб интерфейсов с использованием c#, позволяет разработчикам ускорить разработку бэкенда независимо от того, создаете ли вы приложение blazor server или приложение blazor webassembly, бесшовная интеграция с back4app может значительно сократить время разработки, обеспечивая при этом высокое качество бизнес логики на стороне сервера к концу этого учебного пособия вы создадите безопасную структуру бэкенда, адаптированную для веб приложения полного стека с использованием blazor вы получите представление о том, как обрабатывать операции с данными, применять меры безопасности и реализовывать облачные функции, делая ваше веб приложение blazor надежным и масштабируемым предварительные требования чтобы завершить это учебное пособие, вам потребуется учетная запись back4app и новый проект back4app начало работы с back4app https //www back4app com/docs/get started/new parse app если у вас нет учетной записи, вы можете создать ее бесплатно следуйте приведенному выше руководству, чтобы подготовить ваш проект базовая среда разработки blazor вы можете настроить это, установив последнюю версию net sdk с microsoft https //dotnet microsoft com/download и создав новый проект blazor с использованием шаблонов, таких как dotnet new blazorserver или dotnet new blazorwasm net sdk (версия 6 или выше) установлен убедитесь, что у вас установлен net sdk для создания и запуска приложений blazor знание c# и концепций blazor официальная документация blazor https //docs microsoft com/en us/aspnet/core/blazor/?view=aspnetcore 6 0 если вы новичок в blazor, ознакомьтесь с официальной документацией или учебным пособием для начинающих перед началом убедитесь, что у вас есть эти предварительные условия перед началом, чтобы обеспечить плавный опыт обучения шаг 1 – настройка проекта back4app создание нового проекта первый шаг в создании вашего blazor бэкенда на back4app – это создание нового проекта если вы еще не создали его, выполните следующие шаги войдите в свою учетную запись back4app нажмите кнопку “новое приложение” на вашей панели управления back4app дайте вашему приложению имя (например, “blazor backend tutorial”) после создания проекта вы увидите его в своем дашборде back4app этот проект станет основой для всех конфигураций бэкенда, обсуждаемых в этом руководстве подключите parse sdk back4app полагается на платформу parse для управления вашими данными, предоставления функций в реальном времени, обработки аутентификации пользователей и многого другого подключение вашего приложения blazor к back4app включает установку parse sdk для net и его инициализацию с учетными данными из вашего дашборда back4app получите ваши ключи parse в вашем дашборде back4app перейдите в раздел «настройки приложения» или «безопасность и ключи», чтобы найти ваш идентификатор приложения и net ключ вы также найдете url сервера parse (часто в формате https //parseapi back4app com ) установите parse sdk в вашем проекте blazor dotnet add package parse инициализируйте parse в вашем приложении blazor обычно вы настраиваете инициализацию в program cs или в специальном классе службы program cs using parse; var builder = webapplication createbuilder(args); // инициализация parse parseclient initialize(new parseclient configuration { applicationid = "your application id", windowskey = "your dotnet key", server = "https //parseapi back4app com" }); var app = builder build(); // остальная часть вашей конфигурации эта конфигурация гарантирует, что каждый раз, когда вы используете parse в вашем приложении blazor, оно предварительно настроено для подключения к вашему конкретному экземпляру back4app завершив этот шаг, вы установили безопасное соединение между вашим фронтендом blazor и бэкендом back4app, открыв путь для выполнения операций с базой данных, управления пользователями и многого другого шаг 2 – настройка базы данных сохранение и запрос данных с вашим проектом back4app, настроенным и интегрированным с parse sdk в ваше приложение blazor, вы теперь можете начать сохранять и извлекать данные самый простой способ создать запись — использовать класс parseobject somedataservice cs using parse; using system threading tasks; public class somedataservice { public async task\<parseobject> createtodoitemasync(string title, bool iscompleted) { var todo = new parseobject("todo"); todo\["title"] = title; todo\["iscompleted"] = iscompleted; try { await todo saveasync(); console writeline("todo saved successfully " + todo objectid); return todo; } catch (exception ex) { console writeline("error saving todo " + ex message); return null; } } public async task\<ilist\<parseobject>> fetchtodosasync() { var query = new parsequery\<parseobject>("todo"); try { var results = await query findasync(); console writeline("fetched todo items " + results count); return results; } catch (exception ex) { console writeline("error fetching todos " + ex message); return null; } } } в качестве альтернативы вы можете использовать конечные точки rest api back4app для операций проектирование схемы и типы данных по умолчанию parse позволяет создание схемы на лету , но вы также можете определить свои классы и типы данных в панели управления back4app для большего контроля перейдите в раздел “база данных” в вашей панели управления back4app создайте новый класс (например, “todo”) и добавьте соответствующие столбцы, такие как заголовок (string) и iscompleted (boolean) back4app также поддерживает различные типы данных строка , число , логическое , объект , дата , файл , указатель, массив, отношение , геоточка , и многоугольник вы можете выбрать подходящий тип для каждого поля если вы хотите, вы также можете позволить parse автоматически создать эти столбцы, когда вы впервые сохраняете объект из вашего приложения blazor back4app предлагает ai агента, который может помочь вам спроектировать вашу модель данных откройте ai агента из вашей панели управления приложением или в меню опишите вашу модель данных простым языком (например, “пожалуйста, создайте новое приложение todo на back4app с полной схемой класса ”) позвольте ai агенту создать схему для вас использование ai агента может сэкономить ваше время при настройке архитектуры данных и обеспечить согласованность в вашем приложении реляционные данные если у вас есть реляционные данные например, объект категория который указывает на несколько задач вы можете использовать указатели или отношения в parse процесс аналогичен reactjs, но с использованием объектов net somedataservice cs (продолжение) public async task\<parseobject> createtaskforcategoryasync(string categoryobjectid, string title) { var todo = new parseobject("todo"); // создать указатель на категорию var categorypointer = parseobject createwithoutdata("category", categoryobjectid); todo\["title"] = title; todo\["category"] = categorypointer; try { await todo saveasync(); return todo; } catch (exception ex) { console writeline("ошибка при создании задачи с отношением к категории " + ex message); return null; } } при запросе включите данные указателя somedataservice cs (continuation) public async task\<ilist\<parseobject>> fetchtodoswithcategoryasync() { var query = new parsequery\<parseobject>("todo") include("category"); try { var todoswithcategory = await query findasync(); return todoswithcategory; } catch (exception ex) { console writeline("error fetching todos with category " + ex message); return null; } } живые запросы для обновлений в реальном времени в приложении blazor server рассмотрите возможность использования подключения signalr для живых запросов хотя sdk parse net поддерживает живые запросы, их интеграция непосредственно в приложение blazor может потребовать дополнительной настройки с signalr для связи в реальном времени включите живые запросы в вашей панели управления back4app в разделе настройки сервера убедитесь, что "живые запросы" включены настройте клиент живых запросов в net, если это необходимо однако для приложений blazor использование signalr может быть более идиоматичным для серверных подключений из за сложности настройки живых запросов в blazor и потенциальных ограничений sdk parse net в blazor webassembly вам может потребоваться реализовать серверный сервис, который соединяет живые запросы parse с клиентами signalr шаг 3 – применение безопасности с помощью acl и clp механизм безопасности back4app back4app серьезно относится к безопасности, предоставляя списки контроля доступа (acl) и разрешения на уровне класса (clp) эти функции позволяют ограничить, кто может читать или записывать данные на уровне объекта или класса, обеспечивая, чтобы только авторизованные пользователи могли изменять ваши данные списки управления доступом (acl) acl применяется к отдельным объектам, чтобы определить, какие пользователи, роли или общественность могут выполнять операции чтения/записи например somedataservice cs (acl example) public async task\<parseobject> createprivatetodoasync(string title, parseuser owneruser) { var todo = new parseobject("todo"); todo\["title"] = title; // create an acl granting read/write access only to the owner var acl = new parseacl(owneruser); acl publicreadaccess = false; acl publicwriteaccess = false; todo acl = acl; try { await todo saveasync(); return todo; } catch (exception ex) { console writeline("error saving private todo " + ex message); return null; } } когда вы сохраняете объект, у него есть acl, который предотвращает чтение или изменение его кем либо, кроме указанного пользователя разрешения на уровне класса (clp) clp управляют стандартными разрешениями для всего класса, такими как возможность публичного чтения или записи, или доступ только для определенных ролей перейдите в свою панель управления back4app , выберите свое приложение и откройте раздел база данных выберите класс (например, “todo”) откройте вкладку разрешения на уровне класса настройте свои параметры по умолчанию, такие как “требуется аутентификация” для чтения или записи, или “нет доступа” для общественности эти разрешения устанавливают базовый уровень, в то время как acl уточняют разрешения для отдельных объектов надежная модель безопасности обычно сочетает как clp (широкие ограничения), так и acl (точные ограничения для каждого объекта) для получения дополнительной информации перейдите по ссылке руководство по безопасности приложений https //www back4app com/docs/security/parse security шаг 4 – написание и развертывание облачных функций облачный код – это функция среды parse server, которая позволяет вам запускать пользовательский javascript код на стороне сервера, не требуя управления вашими серверами или инфраструктурой написав облачный код, вы можете расширить ваш бэкенд back4app дополнительной бизнес логикой, валидациями, триггерами и интеграциями, которые работают безопасно и эффективно в среде parse server как это работает когда вы пишете облачный код, вы обычно размещаете ваши функции javascript, триггеры и любые необходимые модули npm в файле main js (или app js ) этот файл затем развертывается в вашем проекте back4app, который выполняется в среде parse server поскольку эти функции и триггеры работают на сервере, вы можете доверять им обрабатывать конфиденциальную логику, обрабатывать чувствительные данные или выполнять только серверные api вызовы процессы, которые вы, возможно, не хотите раскрывать напрямую клиенту весь облачный код для вашего приложения back4app выполняется внутри parse server, который управляется back4app, так что вам не нужно беспокоиться о техническом обслуживании сервера, масштабировании или предоставлении ресурсов каждый раз, когда вы обновляете и развертываете свой файл main js, работающий сервер parse обновляется с вашим последним кодом структура файла main js типичный main js может содержать заявления require для любых необходимых модулей (пакеты npm, встроенные модули node или другие файлы облачного кода) определения облачных функций с использованием parse cloud define() триггеры такие как parse cloud beforesave() , parse cloud aftersave() , и т д модули npm которые вы установили (если необходимо) main js // main js // 1 import necessary modules and other cloud code files const axios = require('axios'); const report = require(' /reports'); // 2 define a custom cloud function parse cloud define('fetchexternaldata', async (request) => { const url = request params url; if (!url) { throw new error('url parameter is required'); } const response = await axios get(url); return response data; }); // 3 example of a beforesave trigger parse cloud beforesave('todo', (request) => { const todo = request object; if (!todo get('title')) { throw new error('todo must have a title'); } }); с возможностью установки и использования модулей npm облачный код становится невероятно гибким, позволяя вам интегрироваться с внешними api, выполнять преобразования данных или выполнять сложную серверную логику типичные случаи использования бизнес логика например, агрегировать данные для аналитики или выполнять вычисления перед сохранением в базу данных валидация данных убедитесь, что определенные поля присутствуют или что у пользователя есть правильные разрешения перед сохранением или удалением записи триггеры выполняйте действия, когда данные изменяются (например, отправляйте уведомление, когда пользователь обновляет свой профиль) интеграции подключение к сторонним api или сервисам обеспечение безопасности проверяйте и очищайте вводимые данные для обеспечения безопасности перед выполнением чувствительных операций разверните вашу функцию ниже приведена простая функция cloud code, которая вычисляет длину текстовой строки, отправленной с клиента main js // main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); развертывание через back4app cli https //www back4app com/docs/local development/parse cli 1 установите cli для linux/macos curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash для windows скачайте файл b4a exe https //github com/back4app/parse cli/releases/download/release 3 3 1/b4a exe с страницы релизов 2 настройте ваш ключ аккаунта https //www back4app com/docs/local development/parse cli#f cxi b4a configure accountkey 3 разверните свой облачный код b4a deploy развертывание через панель управления в панели управления вашего приложения перейдите в cloud code > functions скопируйте/вставьте функцию в редактор main js нажмите deploy вызов вашей функции из blazor с использованием parse net sdk somedataservice cs (calling function) public async task\<int?> gettextlengthasync(string text) { try { var result = await parsecloud callfunctionasync\<dictionary\<string, object>>("calculatetextlength", new dictionary\<string, object> { { "text", text } }); if(result != null && result containskey("length")) return convert toint32(result\["length"]); return null; } catch(exception ex) { console writeline("error calling cloud function " + ex message); return null; } } вы также можете вызвать его через rest или graphql, как показано в учебнике по reactjs шаг 5 – настройка аутентификации пользователей аутентификация пользователя в back4app back4app использует класс parse user в качестве основы для аутентификации по умолчанию parse обрабатывает хеширование паролей, токены сессий и безопасное хранение это означает, что вам не нужно вручную настраивать сложные потоки безопасности настройка аутентификации пользователя в приложении blazor вы можете создать нового пользователя с помощью authservice cs using parse; using system threading tasks; public class authservice { public async task signupuserasync(string username, string password, string email) { var user = new parseuser() { username = username, password = password, email = email }; try { await user signupasync(); console writeline("user signed up successfully!"); } catch (exception ex) { console writeline("error signing up user " + ex message); } } public async task loginuserasync(string username, string password) { try { var user = await parseuser loginasync(username, password); console writeline("user logged in " + user username); } catch (exception ex) { console writeline("error logging in user " + ex message); } } } управление сессиями после успешного входа в систему parse создает токен сессии , который хранится в объекте пользователя в вашем приложении blazor вы можете получить доступ к текущему вошедшему пользователю somecomponent razor cs var currentuser = parseuser currentuser; if (currentuser != null) { console writeline("currently logged in user " + currentuser username); } else { console writeline("no user is logged in"); } parse автоматически обрабатывает сессии на основе токенов в фоновом режиме, но вы также можете вручную управлять ими или аннулировать для выхода из системы authservice cs (logout) public async task logoutasync() { await parseuser logoutasync(); console writeline("user logged out"); } интеграция социального входа back4app и parse могут интегрироваться с популярными провайдерами oauth, такими как google или facebook конфигурация может варьироваться и часто включает настройку на стороне сервера или дополнительные пакеты обратитесь к документации по социальному входу https //www back4app com/docs/platform/sign in with apple для подробных инструкций поскольку приложения blazor server работают на asp net core, вы можете интегрировать социальный вход, используя провайдеров asp net core identity вместе с parse для бесшовной аутентификации подтверждение электронной почты и сброс пароля чтобы включить подтверждение электронной почты и сброс пароля перейдите в настройки электронной почты в вашей панели управления back4app включите подтверждение электронной почты для обеспечения того, чтобы новые пользователи подтвердили право собственности на свои адреса электронной почты настройте адрес отправителя , шаблоны электронной почты и ваш собственный домен, если это необходимо эти функции улучшают безопасность учетной записи и пользовательский опыт, проверяя право собственности пользователей на электронные адреса и предоставляя безопасный метод восстановления пароля шаг 6 – обработка хранения файлов загрузка и получение файлов parse включает класс parsefile для обработки загрузки файлов, который back4app хранит безопасно fileservice cs using parse; using system; using system threading tasks; public class fileservice { public async task\<string> uploadimageasync(byte\[] filedata, string filename) { var parsefile = new parsefile(filename, filedata); try { await parsefile saveasync(); console writeline("file saved " + parsefile url); return parsefile url; } catch (exception ex) { console writeline("error uploading file " + ex message); return null; } } } чтобы прикрепить файл к объекту fileservice cs (continued) public async task\<parseobject> createphotoobjectasync(byte\[] filedata, string filename) { var photo = new parseobject("photo"); var parsefile = new parsefile(filename, filedata); photo\["imagefile"] = parsefile; try { await photo saveasync(); return photo; } catch (exception ex) { console writeline("error creating photo object " + ex message); return null; } } получение url файла somecomponent razor cs var imagefile = photo get\<parsefile>("imagefile"); var imageurl = imagefile url; вы можете отобразить этот imageurl в ваших компонентах blazor, установив его в качестве источника для \<img> тега безопасность файлов parse server предоставляет гибкие настройки для управления безопасностью загрузки файлов используйте acl на parsefiles или устанавливайте настройки на уровне сервера по мере необходимости шаг 7 – планирование задач с помощью облачных заданий облачные задания облачные задания в back4app позволяют вам планировать и выполнять рутинные задачи на вашем сервере такие как очистка старых данных или отправка ежедневного сводного отчета по электронной почте типичное облачное задание может выглядеть так main js parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); const now = new date(); const thirty days = 30 24 60 60 1000; const cutoff = new date(now thirty days); query lessthan('createdat', cutoff); try { const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; } catch (err) { throw new error('error during cleanup ' + err message); } }); разверните ваш облачный код с новым заданием (через cli или панель управления) перейдите в панель управления back4app > настройки приложения > настройки сервера > фоновые задания запланируйте выполнение задания ежедневно или с любым интервалом, который соответствует вашим потребностям облачные задания позволяют вам автоматизировать фоновое обслуживание или другие периодические процессы без необходимости ручного вмешательства шаг 8 – интеграция вебхуков вебхуки позволяют вашему приложению back4app отправлять http запросы на внешнюю службу, когда происходят определенные события это мощный инструмент для интеграции с системами третьих сторон, такими как платежные шлюзы, инструменты email маркетинга или аналитические платформы перейдите к настройкам вебхуков в вашей панели управления back4app > дополнительно > вебхуки, а затем нажмите на добавить вебхук настройте конечную точку (например, https //your external service com/webhook endpoint https //your external service com/webhook endpoint ) настройте триггеры для указания, какие события в ваших классах back4app или функциях cloud code будут вызывать вебхук например, если вы хотите уведомлять канал slack каждый раз, когда создается новая задача todo создайте приложение slack, которое принимает входящие вебхуки скопируйте url вебхука slack в вашей панели управления back4app установите конечную точку на этот url slack для события “новая запись в классе todo ” вы также можете добавить пользовательские http заголовки или полезные нагрузки, если это необходимо вы также можете определить вебхуки в cloud code, выполняя пользовательские http запросы в триггерах, таких как beforesave, aftersave шаг 9 – изучение панели администратора back4app приложение back4app admin app является веб интерфейсом управления, предназначенным для нетехнических пользователей, чтобы выполнять операции crud и обрабатывать рутинные задачи с данными без написания кода он предоставляет ориентированный на модели , дружественный к пользователю интерфейс, который упрощает администрирование базы данных, управление пользовательскими данными и операции на уровне предприятия включение приложения администратора включите его, перейдя в панель приложений > дополнительно > приложение администратора и нажав кнопку “включить приложение администратора” создайте первого администратора (имя пользователя/пароль), что автоматически создаст новую роль (b4aadminuser) и классы (b4asetting, b4amenuitem и b4acustomfield) в схеме вашего приложения выберите поддомен для доступа к интерфейсу администратора и завершите настройку войдите с использованием учетных данных администратора, которые вы создали, чтобы получить доступ к новой панели администратора после включения приложение администратора back4app упрощает просмотр, редактирование или удаление записей из вашей базы данных без необходимости прямого использования панели управления parse или кода на сервере заключение следуя этому подробному руководству, вы создали безопасный бэкенд для приложения blazor на back4app настроили базу данных с классами схем, типами данных и отношениями интегрировали запросы в реальном времени там, где это применимо, для немедленного обновления данных применили меры безопасности с использованием acl и clp для защиты и управления доступом к данным реализовали функции cloud code для выполнения пользовательской бизнес логики на стороне сервера настроили аутентификацию пользователей с поддержкой проверки электронной почты и сброса паролей управляли загрузкой файлов и их извлечением, с дополнительными контролями безопасности файлов запланировали cloud jobs для автоматизированных фоновых задач использовали webhooks для интеграции с внешними сервисами изучили панель администратора back4app для управления данными с надежным фронтендом blazor и мощным бэкендом back4app вы теперь хорошо подготовлены для разработки функционально насыщенных, масштабируемых и безопасных веб приложений продолжайте исследовать более продвинутые функции, интегрируйте свою бизнес логику и используйте возможности back4app, чтобы сэкономить вам бесчисленные часы на администрировании серверов и баз данных удачного кодирования! следующие шаги создайте готовое к производству приложение blazor путем расширения этого бэкенда для обработки более сложных моделей данных, стратегий кэширования и оптимизации производительности интегрируйте продвинутые функции такие как специализированные потоки аутентификации, контроль доступа на основе ролей или внешние api посмотрите официальную документацию back4app для более глубокого изучения вопросов безопасности, настройки производительности и анализа логов изучите другие учебники по приложениям для чата в реальном времени, панелям iot или услугам на основе местоположения объедините техники, изученные здесь, с api третьих сторон для создания сложных, реальных приложений