Quickstarters
Feature Overview
Como construir um backend para SwiftUI?
42 min
introdução neste tutorial, você aprenderá como construir um backend completo para um swiftui aplicativo ios usando o back4app vamos mostrar como integrar o sdk parse swift no seu projeto swiftui e aproveitar os principais recursos do back4app—como gerenciamento de banco de dados, funções de cloud code, apis rest e graphql, autenticação de usuários e consultas em tempo real—para criar um backend seguro e escalável essa abordagem ajuda você a armazenar dados de forma segura, executar operações do lado do servidor sem configurar sua própria infraestrutura e escalar facilmente seu aplicativo ios ou aplicativo web conforme necessário você também verá como a configuração rápida e o ambiente intuitivo do back4app podem reduzir drasticamente o tempo e o esforço em comparação com a configuração manual do seu próprio servidor e banco de dados ao final, você entenderá como construir um backend para swiftui que pode ser estendido para um ambiente de produção ou integrado com lógica e apis personalizadas vamos começar a criar um robusto, backend escalável com mínima sobrecarga! pré requisitos uma conta back4app e um novo projeto back4app começando com back4app https //www back4app com/docs/get started/new parse app se você não tiver uma conta, pode criar uma gratuitamente siga o guia acima para preparar seu projeto ambiente básico de desenvolvimento swiftui você precisará do xcode instalado em sua máquina e de um projeto básico de swiftui ou ios configurado swift package manager ou cocoapods para adicionar o sdk parse swift documentação do sdk parse swift https //github com/netreconlab/parse swift familiaridade com swift e swiftui se você é novo no swiftui, revise documentação swiftui da apple https //developer apple com/documentation/swiftui antes de começar certifique se de que tudo isso esteja em ordem antes de começar ter seu projeto back4app configurado e seu ambiente local swiftui pronto ajudará você a acompanhar mais facilmente passo 1 – configurando o projeto back4app criar um novo projeto o primeiro passo para construir seu backend swiftui no back4app é criar um novo projeto se você ainda não criou um, siga estas etapas faça login na sua conta back4app clique no botão “novo app” no seu painel do back4app dê um nome ao seu app (por exemplo, “swiftui backend tutorial”) uma vez que o projeto é criado, você verá ele listado no seu painel do back4app este projeto será a base para todas as configurações de backend discutidas neste tutorial conectar o sdk parse swift o back4app depende da plataforma parse para gerenciar seus dados, fornecer recursos em tempo real, lidar com autenticação de usuários e mais conectar seu aplicativo swiftui ao back4app envolve instalar o sdk parse swift e inicializá lo com as credenciais do seu painel do back4app recupere suas chaves parse no seu painel do back4app, navegue até a seção “configurações do app” ou “segurança e chaves” para encontrar seu id do aplicativo e chave do cliente (ou chave javascript) você também encontrará a url do servidor parse (geralmente no formato https //parseapi back4app com ) instale o sdk parse swift se estiver usando swift package manager , abra seu projeto no xcode e então arquivo → adicionar pacotes → insira a url https //github com/netreconlab/parse swift git escolha “até a próxima versão principal” nas regras de versão e confirme se estiver usando cocoapods pod 'parseswiftog' inicialize o parse no seu app por exemplo, na sua estrutura do app @main struct myapp app { init() { do { try await parseswift initialize( applicationid "your app id", clientkey "your client key", serverurl url(string "https //parseapi back4app com")! ) } catch { print("error initializing parse \\(error)") } } var body some scene { windowgroup { contentview() } } } ao completar esta etapa, você estabeleceu uma conexão segura entre seu front end swiftui e o backend back4app todas as solicitações e transações de dados são gerenciadas pelo parse swift sdk, reduzindo a complexidade de chamadas rest ou graphql manuais (embora você ainda possa usá las quando necessário) etapa 2 – configurando o banco de dados salvando e consultando dados com seu projeto back4app configurado e o parse swift sdk integrado, você pode agora começar a salvar e recuperar dados abaixo está um simples parseobject exemplo suponha que temos uma todo struct import parseswift struct todo parseobject { // parseobject conformance var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom properties var title string? var iscompleted bool? } salvando um novo todo func createtodoitem(title string, iscompleted bool) async { var todo = todo() todo title = title todo iscompleted = iscompleted do { let savedtodo = try await todo save() print("todo saved successfully \\(savedtodo)") } catch { print("error saving todo \\(error)") } } consultando todos os todos func fetchtodos() async { do { let todos = try await todo query() find() print("fetched todos \\(todos)") } catch { print("error fetching todos \\(error)") } } alternativamente, você pode usar os endpoints da api rest do back4app , ou graphql curl x post \\ h "x parse application id your application id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"title" "buy groceries", "iscompleted" false}' \\ https //parseapi back4app com/classes/todo graphql mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } ter várias opções (parse swift sdk, rest, graphql) permite que você escolha a abordagem que funciona melhor para o seu fluxo de trabalho design de esquema e tipos de dados por padrão, o parse permite a criação de esquemas dinamicamente , mas você também pode definir suas classes no painel do back4app para mais controle navegue até a seção “banco de dados” no seu painel do back4app crie uma nova classe (por exemplo, “todo”) e adicione colunas relevantes, como título (string) e iscompleted (boolean) back4app suporta vários tipos de dados string , número , booleano , objeto , data , arquivo , ponteiro , array , relação , geopoint , e polígono você pode escolher o tipo apropriado para cada campo back4app também fornece um agente de ia que pode ajudá lo a projetar seu modelo de dados abra o agente de ia no seu painel de controle do app descreva seu modelo de dados em linguagem simples (por exemplo, “por favor, crie um novo esquema de classe todo ”) deixe o agente de ia gerar o esquema para você dados relacionais se você tem dados relacionais—digamos, um categoria objeto que aponta para múltiplos todo itens—você pode usar pointers ou relations no parse por exemplo struct category parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var name string? } struct todo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var title string? var category pointer\<category>? } func createtodowithcategory(categoryid string, title string) async { var todo = todo() todo title = title // construct pointer let categorypointer = pointer\<category>(objectid categoryid) todo category = categorypointer do { try await todo save() } catch { print("error creating todo with category relationship \\(error)") } } ao consultar, você também pode incluir dados de ponteiro let query = todo query() include("category") do { let todoswithcategory = try await query find() print("todos with category \\(todoswithcategory)") } catch { print("error fetching todos \\(error)") } consultas ao vivo para atualizações em tempo real, o back4app fornece consultas ao vivo no seu aplicativo swiftui, você pode se inscrever para mudanças em uma classe específica ativar consultas ao vivo no seu painel do back4app em configurações do servidor inscrever se no código // example snippet using the parse swift subscription system task { let subscription = try todo query() subscribecallback() // react to events for await event in subscription { switch event { case entered(let todo) print("new todo entered \\(todo)") case updated(let todo) print("todo updated \\(todo)") case left(let todo) print("todo deleted or left subscription \\(todo)") default break } } } sempre que um todo é criado, atualizado ou excluído no servidor, seu aplicativo é notificado em tempo real este recurso é muito útil para aplicativos colaborativos ou dinâmicos que requerem sincronização imediata de dados passo 3 – aplicando segurança com acls e clps mecanismo de segurança do back4app back4app fornece listas de controle de acesso (acls) e permissões em nível de classe (clps) para uma segurança robusta dos dados isso permite que você restrinja quem pode ler ou escrever dados em uma base por objeto ou por classe, garantindo que apenas usuários autorizados possam modificar seus dados listas de controle de acesso (acls) uma acl é aplicada a objetos individuais por exemplo, para garantir que apenas um usuário específico possa ler/escrever um todo func createprivatetodo(title string, user user) async { var todo = todo() todo title = title var acl = parseacl() // grant read/write to the owner only acl setreadaccess(true, for user) acl setwriteaccess(true, for user) todo acl = acl do { let saved = try await todo save() print("private todo saved \\(saved)") } catch { print("error saving private todo \\(error)") } } permissões em nível de classe (clps) clps governam os padrões de toda a classe, como se a classe é publicamente legível ou gravável, ou se apenas certos papéis podem acessá la vá para o painel do back4app e selecione seu aplicativo abra a seção de banco de dados , selecione uma classe (por exemplo, todo ) abra a aba de permissões em nível de classe configure padrões como “requer autenticação” ou “sem acesso ” essas permissões definem uma base ampla, enquanto as acls permitem que você ajuste a segurança no nível do objeto combinar ambos garante um modelo de segurança forte para mais detalhes, veja diretrizes de segurança do app https //www back4app com/docs/security/parse security passo 4 – escrevendo e implantando funções em nuvem o código em nuvem permite que você execute código personalizado do lado do servidor em swift (ou javascript) sem gerenciar servidores é ideal para adicionar lógica de negócios, validações de dados, gatilhos ou integrações de backend que não devem ser executadas do cliente como funciona escreva seu código em nuvem em um arquivo como main js (javascript) ou aproveite o ambiente de código em nuvem baseado em swift implante em seu projeto back4app o código é executado no ambiente do parse server, então você não precisa manter seu próprio servidor chame seu código em nuvem do cliente via sdk swift, rest ou graphql casos de uso típicos lógica de negócios validações de dados complexas, cálculos de campo ou integrações externas gatilhos de dados execute lógica quando um objeto é salvo, atualizado ou excluído segurança proteja operações sensíveis do cliente executando as no lado do servidor função de exemplo abaixo está um exemplo de javascript cloud code (já que o cloud code usa principalmente js no back4app) que calcula o comprimento do texto main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); implantando via cli instale o back4app cli https //www back4app com/docs/local development/parse cli configure sua chave de conta b4a configure accountkey implante o cloud code b4a deploy chamando sua função do swift struct cloudfunction { static func calculatetextlength(text string) async throws > int { do { if let result = try await parsecloud callfunction("calculatetextlength", with \["text" text]) as? \[string any], let length = result\["length"] as? int { return length } } catch { throw error } return 0 } } task { do { let len = try await cloudfunction calculatetextlength(text "hello back4app") print("text length \\(len)") } catch { print("error calling cloud function \\(error)") } } via 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 '{"text" "hello back4app"}' \\ https //parseapi back4app com/functions/calculatetextlength passo 5 – configurando a autenticação do usuário autenticação de usuário no back4app back4app usa a parseuser classe para gerenciar autenticação segura a hash de senha, tokens de sessão e dados são gerenciados automaticamente, permitindo que você se concentre na lógica do aplicativo configurando a autenticação do usuário cadastrar um novo usuário struct user parseuser { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // required fields var username string? var email string? var emailverified bool? var password string? var authdata \[string \[string string]?]? } func signupuser(username string, password string, email string) async { var newuser = user() newuser username = username newuser password = password newuser email = email do { try await newuser signup() print("user signed up successfully!") } catch { print("error signing up user \\(error)") } } faça login em um usuário existente func loginuser(username string, password string) async { do { let user = try await user login(username username, password password) print("user logged in \\(user)") } catch { print("error logging in user \\(error)") } } tokens de sessão são gerenciados automaticamente pelo parse você pode sair func logout() async { do { try await user logout() print("user logged out ") } catch { print("error logging out \\(error)") } } integração de login social integrações com google , apple , facebook , etc , são possíveis com configuração adicional confira a documentação de login social https //www back4app com/docs/platform/sign in with apple para mais detalhes verificação de email e redefinição de senha ative a verificação de email no seu painel do back4app e configure os emails de redefinição de senha para que os usuários possam recuperar suas contas de forma segura para redefinições de senha try await user passwordreset(email "user\@example com") passo 6 – gerenciamento de armazenamento de arquivos carregando e recuperando arquivos parse inclui parsefile para gerenciar o upload de arquivos func uploadimage(filedata data) async { let parsefile = parsefile(name "photo jpg", data filedata) do { let savedfile = try await parsefile save() print("file saved at \\(savedfile url ?? "no url")") } catch { print("error uploading file \\(error)") } } anexe o a um parseobject struct photo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var imagefile parsefile? } func createphotoobject(filedata data) async { var photo = photo() photo imagefile = parsefile(name "image jpg", data filedata) do { = try await photo save() } catch { print("error saving photo object \\(error)") } } segurança de arquivos por padrão, os arquivos são acessíveis via uma url pública você pode configurar a segurança dos arquivos usando configurações do parse server https //www back4app com/docs/platform/file storage para controles de arquivo mais rigorosos, certifique se de que apenas usuários autenticados ou funções especificadas possam carregar ou recuperar arquivos passo 7 – agendando tarefas com cloud jobs cloud jobs permitem que você agende e execute tarefas recorrentes, como limpar dados ou enviar e mails // main js (javascript cloud code) 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); } }); após a implantação, agende via o painel do back4app em configurações do servidor > tarefas em segundo plano passo 8 – integrando webhooks webhooks permitem que seu aplicativo back4app envie requisições http para serviços externos (como stripe) sempre que certos eventos ocorrerem isso é útil para se conectar a ferramentas de terceiros ou outras integrações do lado do servidor vá para webhooks no seu painel do back4app > mais > webhooks adicione um endpoint (por exemplo, https //your service com/webhook ) configure quais eventos (por exemplo, novo registro na classe todo) irão acionar o webhook por exemplo, você pode enviar uma mensagem no slack sempre que um usuário criar um novo todo isso ajuda a manter os serviços externos sincronizados com seus dados do back4app passo 9 – explorando o painel de administração do back4app o back4app admin app é uma interface de gerenciamento baseada na web para usuários não técnicos realizarem operações crud em seus dados ele fornece uma interface amigável que é separada do painel do parse, facilitando a gestão de dados em produção habilitando o app de administração vá para seu painel do app > mais > app de administração e clique em “habilitar app de administração ” crie um usuário administrador , que gera automaticamente um papel de administrador e classes associadas escolha um subdomínio para a interface de administração e, em seguida, faça login para gerenciar seus dados por meio de uma interface simples de apontar e clicar conclusão seguindo este guia abrangente, você aprendeu como construir um backend para swiftui usando back4app e o parse swift sdk como armazenar dados de forma segura com esquemas de classe personalizados e relacionamentos como integrar consultas em tempo real (consultas ao vivo) para atualizações imediatas de dados como aplicar medidas de segurança usando acls e clps para proteger e gerenciar o acesso aos dados como executar lógica de negócios via cloud code como lidar com armazenamento de arquivos , autenticação e agendamento de tarefas em segundo plano com cloud jobs como integrar seu aplicativo com serviços externos usando webhooks com essas habilidades, você pode construir um aplicativo ios ou aplicativo web que seja fácil de gerenciar, seguro e pronto para escalar explore recursos mais avançados—como permissões baseadas em função, notificações push ou cache avançado você também pode integrar outras apis ou adaptar seu cloud code para atender a casos de uso especializados feliz codificação , e aproveite para construir aplicativos incríveis no back4app! próximos passos aplicativo swiftui pronto para produção estenda este backend para lidar com modelos de dados mais complexos, cache e melhorias de desempenho recursos avançados aprofunde se em autenticação especializada, acesso baseado em funções ou integrações de api de terceiros (como stripe) explore a documentação oficial do back4app para mergulhos mais profundos sobre segurança do lado do servidor , análise de logs e ajuste avançado de banco de dados ver tutoriais adicionais chat em tempo real, serviços baseados em localização ou aplicativos multi inquilinos—combine os métodos aprendidos aqui com apis externas para criar soluções sofisticadas e do mundo real