<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lucas Menezes</title>
    <description>The latest articles on DEV Community by Lucas Menezes (@lp-menezes_78af3b44b).</description>
    <link>https://dev.to/lp-menezes_78af3b44b</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4121580%2F75b53b23-cb2b-4e48-914e-0eb8385fffb2.png</url>
      <title>DEV Community: Lucas Menezes</title>
      <link>https://dev.to/lp-menezes_78af3b44b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lp-menezes_78af3b44b"/>
    <language>en</language>
    <item>
      <title>Arquitetura e Segurança em Aplicações Multiplataforma com .NET 8</title>
      <dc:creator>Lucas Menezes</dc:creator>
      <pubDate>Sat, 12 Sep 2026 02:32:02 +0000</pubDate>
      <link>https://dev.to/lp-menezes_78af3b44b/arquitetura-e-seguranca-em-aplicacoes-multiplataforma-com-net-8-1i1i</link>
      <guid>https://dev.to/lp-menezes_78af3b44b/arquitetura-e-seguranca-em-aplicacoes-multiplataforma-com-net-8-1i1i</guid>
      <description>&lt;p&gt;Autor: Lucas Menezes&lt;br&gt;
Curso: Análise e Desenvolvimento de Sistemas — UNIP&lt;br&gt;
Projeto: TechService — PIM IV&lt;br&gt;
Tempo estimado de leitura: aproximadamente 15 minutos&lt;/p&gt;

&lt;p&gt;Este artigo apresenta um estudo de caso baseado no desenvolvimento do TechService, projeto desenvolvido no PIM IV do curso de Análise e Desenvolvimento de Sistemas da Universidade Paulista (UNIP). O objetivo é demonstrar como aplicações Web e Mobile podem compartilhar uma mesma API, utilizando autenticação JWT, banco de dados relacional e uma arquitetura desacoplada.&lt;/p&gt;

&lt;p&gt;Ao longo do desenvolvimento foram utilizadas tecnologias como .NET 8, ASP.NET Core MVC, .NET MAUI, Entity Framework Core, MySQL e Swagger/OpenAPI. A proposta deste artigo é apresentar as principais decisões arquiteturais adotadas, os mecanismos de segurança utilizados e os aprendizados obtidos durante a integração entre os diferentes componentes da solução.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Introdução
&lt;/h2&gt;

&lt;p&gt;O desenvolvimento de sistemas corporativos modernos frequentemente exige que diferentes tipos de aplicações acessem as mesmas informações.&lt;/p&gt;

&lt;p&gt;Uma empresa pode possuir, por exemplo, uma aplicação Web utilizada pela equipe administrativa e, ao mesmo tempo, um aplicativo Mobile utilizado por profissionais que trabalham em campo.&lt;/p&gt;

&lt;p&gt;Nesse cenário, permitir que cada aplicação acesse diretamente o banco de dados pode trazer dificuldades relacionadas à segurança, manutenção, integridade das informações e evolução do sistema.&lt;/p&gt;

&lt;p&gt;Uma alteração realizada diretamente por uma aplicação pode não seguir as mesmas regras utilizadas por outra, criando inconsistências e aumentando a complexidade da solução.&lt;/p&gt;

&lt;p&gt;Uma alternativa para esse problema é utilizar uma API como camada intermediária entre as aplicações clientes e o banco de dados.&lt;/p&gt;

&lt;p&gt;Esse foi um dos principais conceitos aplicados durante o desenvolvimento do TechService.&lt;/p&gt;

&lt;p&gt;O projeto é composto por uma aplicação administrativa desenvolvida em ASP.NET Core MVC, uma aplicação Mobile utilizando .NET MAUI, uma Web API em .NET 8 e um banco de dados relacional MySQL.&lt;/p&gt;

&lt;p&gt;Cada componente possui uma responsabilidade específica, mas todos trabalham de maneira integrada.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Contexto do projeto TechService
&lt;/h2&gt;

&lt;p&gt;O TechService foi desenvolvido para auxiliar no gerenciamento de Ordens de Serviço (OS).&lt;/p&gt;

&lt;p&gt;Em um cenário tradicional de atendimento técnico existe uma separação entre as atividades administrativas e aquelas executadas pelos técnicos em campo.&lt;/p&gt;

&lt;p&gt;A equipe administrativa precisa cadastrar clientes e técnicos, criar Ordens de Serviço, acompanhar atendimentos e consultar informações gerenciais.&lt;/p&gt;

&lt;p&gt;Já o técnico precisa de uma interface simplificada e adequada para dispositivos móveis, permitindo visualizar os atendimentos atribuídos, consultar informações e atualizar o status das atividades.&lt;/p&gt;

&lt;p&gt;Criar uma única aplicação para atender os dois cenários poderia resultar em uma interface mais complexa e pouco adequada para cada perfil de utilização.&lt;/p&gt;

&lt;p&gt;Por isso, o projeto foi dividido em aplicações diferentes.&lt;/p&gt;

&lt;p&gt;Mesmo existindo interfaces distintas, ambas utilizam a mesma API e trabalham com a mesma base de dados.&lt;/p&gt;

&lt;p&gt;Essa decisão foi importante para manter as regras centralizadas e evitar duplicação de funcionalidades.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Arquitetura geral da solução
&lt;/h2&gt;

&lt;p&gt;A arquitetura do TechService foi organizada em quatro componentes principais:&lt;/p&gt;

&lt;p&gt;[ TechServiceWeb - ASP.NET Core MVC ]&lt;br&gt;
                 |&lt;br&gt;
                 |&lt;br&gt;
                 v&lt;br&gt;
          [ TechServiceApi ]&lt;br&gt;
                 |&lt;br&gt;
                 v&lt;br&gt;
              [ MySQL ]&lt;br&gt;
                 ^&lt;br&gt;
                 |&lt;br&gt;
                 |&lt;br&gt;
[ TechServiceMaui - .NET MAUI ]&lt;/p&gt;

&lt;p&gt;O TechServiceWeb representa a aplicação administrativa.&lt;/p&gt;

&lt;p&gt;O TechServiceMaui representa a aplicação utilizada pelos técnicos.&lt;/p&gt;

&lt;p&gt;O TechServiceApi funciona como camada central de comunicação e processamento das regras.&lt;/p&gt;

&lt;p&gt;O MySQL é responsável pela persistência dos dados.&lt;/p&gt;

&lt;p&gt;A principal característica dessa arquitetura é que nem a aplicação Web nem o aplicativo Mobile acessam diretamente o banco.&lt;/p&gt;

&lt;p&gt;Toda operação passa primeiro pela API.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Por que utilizar uma API centralizada?
&lt;/h2&gt;

&lt;p&gt;Durante o desenvolvimento de aplicações que possuem diferentes interfaces, uma questão importante é definir onde as regras de negócio serão executadas.&lt;/p&gt;

&lt;p&gt;Uma possibilidade seria implementar parte dessas regras na aplicação Web e outra parte no aplicativo Mobile.&lt;/p&gt;

&lt;p&gt;Apesar de essa abordagem funcionar em projetos menores, ela pode gerar problemas conforme o sistema cresce.&lt;/p&gt;

&lt;p&gt;Imagine uma regra relacionada aos possíveis status de uma Ordem de Serviço.&lt;/p&gt;

&lt;p&gt;Caso essa regra estivesse implementada separadamente nas duas aplicações, qualquer modificação futura teria que ser feita nos dois projetos.&lt;/p&gt;

&lt;p&gt;Isso aumentaria a chance de inconsistências.&lt;/p&gt;

&lt;p&gt;Ao centralizar essas regras na API, o fluxo fica diferente:&lt;/p&gt;

&lt;p&gt;Aplicação&lt;br&gt;
    |&lt;br&gt;
    v&lt;br&gt;
Requisição HTTP&lt;br&gt;
    |&lt;br&gt;
    v&lt;br&gt;
TechServiceApi&lt;br&gt;
    |&lt;br&gt;
    v&lt;br&gt;
Validação&lt;br&gt;
    |&lt;br&gt;
    v&lt;br&gt;
Banco de Dados&lt;/p&gt;

&lt;p&gt;A aplicação solicita determinada operação, mas é a API que realiza as validações necessárias antes de alterar os dados.&lt;/p&gt;

&lt;p&gt;Dessa forma, independentemente de a requisição ter partido da aplicação Web ou do aplicativo Mobile, as mesmas regras são aplicadas.&lt;/p&gt;

&lt;p&gt;Outro benefício é a possibilidade de adicionar novos sistemas no futuro.&lt;/p&gt;

&lt;p&gt;Caso seja necessário criar uma nova aplicação, integração externa ou outro tipo de interface, ela também poderá utilizar a API já existente.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Desenvolvimento da API com .NET 8
&lt;/h2&gt;

&lt;p&gt;A API representa o núcleo da arquitetura do TechService.&lt;/p&gt;

&lt;p&gt;Ela foi desenvolvida utilizando .NET 8 e segue princípios utilizados em APIs REST.&lt;/p&gt;

&lt;p&gt;Uma API REST disponibiliza recursos através de endereços HTTP conhecidos como endpoints.&lt;/p&gt;

&lt;p&gt;Alguns exemplos simplificados seriam:&lt;/p&gt;

&lt;p&gt;GET /api/clientes&lt;/p&gt;

&lt;p&gt;GET /api/tecnicos&lt;/p&gt;

&lt;p&gt;GET /api/ordens&lt;/p&gt;

&lt;p&gt;POST /api/ordens&lt;/p&gt;

&lt;p&gt;PUT /api/ordens/{id}&lt;/p&gt;

&lt;p&gt;Cada método HTTP possui uma finalidade.&lt;/p&gt;

&lt;p&gt;O GET é utilizado principalmente para consulta de dados.&lt;/p&gt;

&lt;p&gt;O POST é utilizado para criação de novos recursos.&lt;/p&gt;

&lt;p&gt;O PUT pode ser utilizado para alteração de recursos existentes.&lt;/p&gt;

&lt;p&gt;Já o DELETE, quando necessário, permite representar operações de exclusão.&lt;/p&gt;

&lt;p&gt;Esse padrão facilita a organização da API e torna sua utilização mais previsível por outras aplicações.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Comunicação utilizando JSON
&lt;/h2&gt;

&lt;p&gt;Para que aplicações desenvolvidas com tecnologias diferentes consigam trocar informações, é necessário utilizar um formato comum.&lt;/p&gt;

&lt;p&gt;No TechService, a comunicação com a API é realizada utilizando JSON.&lt;/p&gt;

&lt;p&gt;Uma representação simplificada de uma Ordem de Serviço poderia ser:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "id": 125,&lt;br&gt;
  "cliente": "Empresa Exemplo",&lt;br&gt;
  "tecnico": "Carlos Silva",&lt;br&gt;
  "descricao": "Verificação de equipamento",&lt;br&gt;
  "status": "Em Atendimento"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;O JSON possui uma estrutura simples, legível e amplamente utilizada em APIs.&lt;/p&gt;

&lt;p&gt;A aplicação Web não precisa conhecer diretamente a estrutura física das tabelas existentes no MySQL.&lt;/p&gt;

&lt;p&gt;Ela precisa conhecer apenas os dados que a API disponibiliza.&lt;/p&gt;

&lt;p&gt;O mesmo princípio é aplicado ao aplicativo Mobile.&lt;/p&gt;

&lt;p&gt;Essa separação reduz o nível de dependência entre a interface e o banco de dados.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Utilização de DTOs
&lt;/h2&gt;

&lt;p&gt;Durante o desenvolvimento de APIs, nem sempre é adequado retornar diretamente todas as informações armazenadas nas entidades internas da aplicação.&lt;/p&gt;

&lt;p&gt;Para isso podem ser utilizados DTOs — Data Transfer Objects.&lt;/p&gt;

&lt;p&gt;Um DTO representa apenas os dados necessários para uma determinada operação.&lt;/p&gt;

&lt;p&gt;Imagine uma entidade de usuário que possua informações relacionadas à autenticação e ao funcionamento interno da aplicação.&lt;/p&gt;

&lt;p&gt;Nem todas essas informações devem ser retornadas quando o sistema simplesmente solicita uma listagem de usuários.&lt;/p&gt;

&lt;p&gt;Um DTO pode, por exemplo, disponibilizar apenas:&lt;/p&gt;

&lt;p&gt;Id&lt;br&gt;
Nome&lt;br&gt;
E-mail&lt;br&gt;
Perfil&lt;/p&gt;

&lt;p&gt;Isso melhora a organização da aplicação e evita a exposição desnecessária de dados.&lt;/p&gt;

&lt;p&gt;Também facilita futuras alterações internas, pois o formato utilizado pela API pode permanecer estável mesmo que a implementação do banco sofra modificações.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Autenticação utilizando JWT
&lt;/h2&gt;

&lt;p&gt;Como o TechService trabalha com informações administrativas e operacionais, determinados endpoints precisam ser protegidos.&lt;/p&gt;

&lt;p&gt;Para isso foi utilizado o padrão JWT — JSON Web Token.&lt;/p&gt;

&lt;p&gt;O processo começa quando o usuário informa suas credenciais.&lt;/p&gt;

&lt;p&gt;De maneira simplificada:&lt;/p&gt;

&lt;p&gt;Usuário&lt;br&gt;
   |&lt;br&gt;
   | Login e senha&lt;br&gt;
   v&lt;br&gt;
TechServiceApi&lt;br&gt;
   |&lt;br&gt;
   | Validação&lt;br&gt;
   v&lt;br&gt;
Banco de Dados&lt;/p&gt;

&lt;p&gt;Caso as credenciais sejam válidas, a API gera um token JWT.&lt;/p&gt;

&lt;p&gt;Esse token é devolvido para a aplicação.&lt;/p&gt;

&lt;p&gt;Nas próximas requisições, a aplicação envia o token juntamente com a solicitação.&lt;br&gt;
Aplicação&lt;br&gt;
   |&lt;br&gt;
   | Requisição + JWT&lt;br&gt;
   v&lt;br&gt;
TechServiceApi&lt;br&gt;
   |&lt;br&gt;
   | Token válido?&lt;br&gt;
   v&lt;br&gt;
Endpoint protegido&lt;/p&gt;

&lt;p&gt;Isso permite proteger recursos que não devem estar disponíveis para usuários não autenticados.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Autenticação e autorização
&lt;/h2&gt;

&lt;p&gt;Autenticação e autorização são conceitos relacionados, porém possuem responsabilidades diferentes.&lt;/p&gt;

&lt;p&gt;A autenticação responde à pergunta:&lt;/p&gt;

&lt;p&gt;Quem é este usuário?&lt;/p&gt;

&lt;p&gt;Já a autorização responde:&lt;/p&gt;

&lt;p&gt;O que este usuário está autorizado a fazer?&lt;/p&gt;

&lt;p&gt;No TechService, um técnico autenticado pode utilizar funções relacionadas ao seu atendimento.&lt;/p&gt;

&lt;p&gt;Já um usuário administrativo pode possuir acesso a funcionalidades de gerenciamento.&lt;/p&gt;

&lt;p&gt;Essa separação é importante porque estar autenticado não deve significar possuir acesso irrestrito a todas as funções do sistema.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Persistência com Entity Framework Core
&lt;/h2&gt;

&lt;p&gt;Para realizar a comunicação entre a API e o banco de dados foi utilizado o Entity Framework Core.&lt;/p&gt;

&lt;p&gt;O Entity Framework funciona como uma camada de mapeamento entre objetos existentes na aplicação e registros existentes no banco.&lt;/p&gt;

&lt;p&gt;Uma entidade relacionada a uma Ordem de Serviço poderia possuir propriedades como:&lt;/p&gt;

&lt;p&gt;Id&lt;br&gt;
ClienteId&lt;br&gt;
TecnicoId&lt;br&gt;
Descricao&lt;br&gt;
Status&lt;br&gt;
DataCriacao&lt;/p&gt;

&lt;p&gt;Através do Entity Framework, essas estruturas podem ser manipuladas pelo código C#.&lt;/p&gt;

&lt;p&gt;Isso reduz a necessidade de escrever consultas SQL manualmente para todas as operações.&lt;/p&gt;

&lt;p&gt;O uso de um ORM não elimina a necessidade de entender SQL e modelagem relacional, porém facilita a comunicação entre o código da aplicação e o banco.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Modelagem relacional no MySQL
&lt;/h2&gt;

&lt;p&gt;O banco de dados do TechService foi criado utilizando MySQL.&lt;/p&gt;

&lt;p&gt;A base foi estruturada para representar as principais informações utilizadas pelo sistema, como usuários, técnicos, clientes, Ordens de Serviço, itens de serviço e histórico das alterações.&lt;/p&gt;

&lt;p&gt;Um exemplo simplificado de relacionamento seria:&lt;/p&gt;

&lt;p&gt;CLIENTES&lt;br&gt;
   |&lt;br&gt;
   | 1&lt;br&gt;
   |&lt;br&gt;
   | N&lt;br&gt;
ORDENS_SERVICO&lt;br&gt;
   |&lt;br&gt;
   | N&lt;br&gt;
   |&lt;br&gt;
   | 1&lt;br&gt;
TECNICOS&lt;/p&gt;

&lt;p&gt;Uma Ordem de Serviço está associada a um cliente e pode ser atribuída a um técnico.&lt;/p&gt;

&lt;p&gt;Em vez de armazenar repetidamente todas as informações de clientes e técnicos em cada Ordem de Serviço, são utilizados relacionamentos entre as tabelas.&lt;/p&gt;

&lt;p&gt;Isso reduz duplicidade e melhora a organização das informações.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Integridade referencial
&lt;/h2&gt;

&lt;p&gt;O banco de dados não deve funcionar apenas como um local para armazenar registros.&lt;/p&gt;

&lt;p&gt;Ele também possui um papel importante na manutenção da consistência das informações.&lt;/p&gt;

&lt;p&gt;Imagine que determinada Ordem de Serviço esteja relacionada a um cliente.&lt;/p&gt;

&lt;p&gt;Se o sistema permitisse excluir esse cliente sem considerar as Ordens relacionadas, poderiam surgir registros inconsistentes.&lt;/p&gt;

&lt;p&gt;Por isso, relacionamentos e restrições de integridade referencial são importantes.&lt;/p&gt;

&lt;p&gt;Essa preocupação se torna ainda maior quando diferentes aplicações utilizam o mesmo conjunto de dados.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. Histórico das Ordens de Serviço
&lt;/h2&gt;

&lt;p&gt;Em um sistema de atendimento técnico, saber apenas o status atual de uma Ordem de Serviço pode não ser suficiente.&lt;/p&gt;

&lt;p&gt;Também pode ser necessário acompanhar sua evolução.&lt;/p&gt;

&lt;p&gt;Um fluxo de atendimento poderia ser:&lt;/p&gt;

&lt;p&gt;Aberta&lt;br&gt;
   ↓&lt;br&gt;
Atribuída&lt;br&gt;
   ↓&lt;br&gt;
Em Atendimento&lt;br&gt;
   ↓&lt;br&gt;
Concluída&lt;/p&gt;

&lt;p&gt;Por esse motivo, o TechService mantém informações relacionadas ao histórico das alterações.&lt;/p&gt;

&lt;p&gt;Esse histórico ajuda no acompanhamento do atendimento e também pode ser utilizado para fins de auditoria.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. Utilização de Triggers
&lt;/h2&gt;

&lt;p&gt;Um dos recursos utilizados no banco de dados foi o uso de Triggers.&lt;/p&gt;

&lt;p&gt;Triggers são ações executadas automaticamente pelo banco quando determinados eventos acontecem.&lt;/p&gt;

&lt;p&gt;No TechService, uma Trigger pode ser utilizada para registrar alterações relacionadas ao status de uma Ordem de Serviço.&lt;/p&gt;

&lt;p&gt;O funcionamento pode ser representado da seguinte maneira:&lt;/p&gt;

&lt;p&gt;Atualização da OS&lt;br&gt;
      |&lt;br&gt;
      v&lt;br&gt;
Mudança de Status&lt;br&gt;
      |&lt;br&gt;
      v&lt;br&gt;
Trigger&lt;br&gt;
      |&lt;br&gt;
      v&lt;br&gt;
Registro no Histórico&lt;/p&gt;

&lt;p&gt;Uma vantagem dessa abordagem é que o histórico fica associado à alteração ocorrida no banco.&lt;/p&gt;

&lt;p&gt;Independentemente de a modificação ter sido iniciada pelo sistema Web ou pelo aplicativo Mobile, o registro pode ser realizado de forma centralizada.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. Stored Procedures
&lt;/h2&gt;

&lt;p&gt;Outro recurso relacionado ao banco de dados é a utilização de Stored Procedures.&lt;/p&gt;

&lt;p&gt;Uma Stored Procedure permite armazenar conjuntos de comandos SQL no próprio banco e executá-los quando necessário.&lt;/p&gt;

&lt;p&gt;Esse recurso pode ser útil em operações específicas ou consultas que exigem maior processamento.&lt;/p&gt;

&lt;p&gt;Entretanto, também é importante equilibrar as responsabilidades da aplicação e do banco.&lt;/p&gt;

&lt;p&gt;Nem toda regra precisa estar armazenada dentro do SGBD.&lt;/p&gt;

&lt;p&gt;Parte do trabalho de arquitetura consiste justamente em definir em qual camada cada responsabilidade deve permanecer.&lt;/p&gt;

&lt;h2&gt;
  
  
  16. Aplicação administrativa com ASP.NET Core MVC
&lt;/h2&gt;

&lt;p&gt;A aplicação Web foi desenvolvida utilizando ASP.NET Core MVC.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2mee004o5n8txjtr2eav.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2mee004o5n8txjtr2eav.png" alt="Aplicação administrativa com ASP.NET Core MVC" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O padrão MVC divide a aplicação em três conceitos principais: Model, View e Controller.&lt;/p&gt;

&lt;p&gt;O Model representa os dados e estruturas utilizadas pelo sistema.&lt;/p&gt;

&lt;p&gt;A View representa aquilo que será apresentado ao usuário.&lt;/p&gt;

&lt;p&gt;O Controller recebe ações realizadas pelo usuário e coordena o fluxo da aplicação.&lt;/p&gt;

&lt;p&gt;No TechService, essa aplicação possui foco administrativo.&lt;/p&gt;

&lt;p&gt;Ela permite realizar operações relacionadas a clientes, técnicos, Ordens de Serviço e acompanhamento dos atendimentos.&lt;/p&gt;

&lt;p&gt;Entretanto, a aplicação Web não acessa diretamente o banco de dados.&lt;/p&gt;

&lt;p&gt;Quando precisa consultar ou alterar informações, ela utiliza a API.&lt;/p&gt;

&lt;h2&gt;
  
  
  17. Fluxo de uma operação Web
&lt;/h2&gt;

&lt;p&gt;Considere como exemplo a criação de uma nova Ordem de Serviço.&lt;/p&gt;

&lt;p&gt;O usuário preenche as informações através da aplicação administrativa.&lt;/p&gt;

&lt;p&gt;Depois disso, o fluxo pode ocorrer da seguinte forma:&lt;/p&gt;

&lt;p&gt;Usuário&lt;br&gt;
   |&lt;br&gt;
   v&lt;br&gt;
TechServiceWeb&lt;br&gt;
   |&lt;br&gt;
   | POST&lt;br&gt;
   v&lt;br&gt;
TechServiceApi&lt;br&gt;
   |&lt;br&gt;
   | Validação&lt;br&gt;
   v&lt;br&gt;
MySQL&lt;/p&gt;

&lt;p&gt;Após o processamento, a API retorna uma resposta HTTP.&lt;/p&gt;

&lt;p&gt;Caso o recurso tenha sido criado corretamente:&lt;/p&gt;

&lt;p&gt;201 Created&lt;br&gt;
Caso o usuário não possua autenticação válida:&lt;br&gt;
401 Unauthorized&lt;br&gt;
Se determinado recurso não for encontrado:&lt;br&gt;
404 Not Found&lt;/p&gt;

&lt;p&gt;Esse padrão facilita o tratamento das situações pela aplicação cliente.&lt;/p&gt;

&lt;h2&gt;
  
  
  18. Aplicação Mobile com .NET MAUI
&lt;/h2&gt;

&lt;p&gt;O aplicativo destinado aos técnicos foi desenvolvido utilizando .NET MAUI.&lt;/p&gt;

&lt;p&gt;O .NET MAUI permite desenvolver aplicações multiplataforma utilizando o ecossistema .NET.&lt;/p&gt;

&lt;p&gt;No TechService, o aplicativo possui uma finalidade diferente do sistema administrativo.&lt;/p&gt;

&lt;p&gt;O técnico não precisa acessar todas as funções disponíveis para o gestor.&lt;/p&gt;

&lt;p&gt;Seu foco é o atendimento operacional.&lt;/p&gt;

&lt;p&gt;Entre as funcionalidades estão autenticação, consulta das Ordens de Serviço, visualização de detalhes e atualização do status dos atendimentos.&lt;/p&gt;

&lt;p&gt;Isso permite desenvolver uma interface mais adequada à utilização em dispositivos móveis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn24hmss8sexg3tpspeac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn24hmss8sexg3tpspeac.png" alt="Aplicação Mobile com .NET MAUI" width="355" height="755"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  19. Consumo da API pelo Mobile
&lt;/h2&gt;

&lt;p&gt;Assim como o sistema Web, o aplicativo também utiliza requisições HTTP.&lt;/p&gt;

&lt;p&gt;Após o login, o aplicativo recebe o token JWT.&lt;/p&gt;

&lt;p&gt;Esse token passa a ser utilizado nas requisições protegidas.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
TechServiceMaui&lt;br&gt;
       |&lt;br&gt;
       | GET /api/ordens&lt;br&gt;
       | Authorization: Bearer TOKEN&lt;br&gt;
       v&lt;br&gt;
TechServiceApi&lt;/p&gt;

&lt;p&gt;A API valida o token antes de devolver os dados.&lt;/p&gt;

&lt;p&gt;Esse modelo evita a necessidade de enviar login e senha novamente em cada requisição.&lt;/p&gt;

&lt;h2&gt;
  
  
  20. Uma API para diferentes aplicações
&lt;/h2&gt;

&lt;p&gt;Um dos principais benefícios observados durante o desenvolvimento foi a possibilidade de reutilizar a mesma camada de serviços.&lt;/p&gt;

&lt;p&gt;De maneira simplificada:&lt;/p&gt;

&lt;p&gt;WEB&lt;br&gt;
 |&lt;br&gt;
 +------&amp;gt; API ------&amp;gt; MySQL&lt;br&gt;
 |&lt;br&gt;
MOBILE&lt;/p&gt;

&lt;p&gt;Apesar de as interfaces serem diferentes, ambas trabalham com as mesmas regras e informações.&lt;/p&gt;

&lt;p&gt;Uma Ordem de Serviço criada pelo sistema administrativo pode posteriormente aparecer no aplicativo utilizado pelo técnico.&lt;/p&gt;

&lt;p&gt;Depois que o técnico atualiza o atendimento, essa mudança pode ser visualizada pelo gestor.&lt;/p&gt;

&lt;p&gt;Esse comportamento é possível porque ambas as aplicações utilizam a mesma API.&lt;/p&gt;

&lt;h2&gt;
  
  
  21. Documentação com Swagger/OpenAPI
&lt;/h2&gt;

&lt;p&gt;Durante o desenvolvimento de uma API é importante conseguir visualizar e testar os endpoints existentes.&lt;/p&gt;

&lt;p&gt;Para isso foi utilizado Swagger/OpenAPI.&lt;/p&gt;

&lt;p&gt;A ferramenta permite visualizar rotas como:&lt;/p&gt;

&lt;p&gt;GET    /api/clientes&lt;br&gt;
POST   /api/clientes&lt;/p&gt;

&lt;p&gt;GET    /api/tecnicos&lt;br&gt;
POST   /api/tecnicos&lt;/p&gt;

&lt;p&gt;GET    /api/ordens&lt;br&gt;
POST   /api/ordens&lt;br&gt;
PUT    /api/ordens/{id}&lt;/p&gt;

&lt;p&gt;Além de atuar como documentação, o Swagger ajuda durante os testes.&lt;/p&gt;

&lt;p&gt;É possível enviar requisições e verificar as respostas retornadas pela API.&lt;/p&gt;

&lt;p&gt;Isso foi útil especialmente durante a integração com as aplicações Web e Mobile.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F98f3r1rrpjpz27l4zd01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F98f3r1rrpjpz27l4zd01.png" alt="Swagger/OpenAPI" width="800" height="697"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  22. Importância dos códigos HTTP
&lt;/h2&gt;

&lt;p&gt;Uma API precisa informar corretamente o resultado de uma operação.&lt;/p&gt;

&lt;p&gt;Alguns dos principais códigos utilizados são:&lt;/p&gt;

&lt;p&gt;200 OK indica que a requisição foi processada corretamente.&lt;/p&gt;

&lt;p&gt;201 Created indica a criação de um novo recurso.&lt;/p&gt;

&lt;p&gt;400 Bad Request pode indicar que os dados enviados são inválidos.&lt;/p&gt;

&lt;p&gt;401 Unauthorized indica ausência de autenticação válida.&lt;/p&gt;

&lt;p&gt;404 Not Found indica que o recurso solicitado não foi localizado.&lt;/p&gt;

&lt;p&gt;500 Internal Server Error representa uma falha ocorrida durante o processamento no servidor.&lt;/p&gt;

&lt;p&gt;O tratamento correto desses códigos melhora a comunicação entre API e aplicações clientes.&lt;/p&gt;

&lt;h2&gt;
  
  
  23. Segurança em uma arquitetura distribuída
&lt;/h2&gt;

&lt;p&gt;Ao separar o sistema em diferentes componentes, a segurança passa a ter ainda mais importância.&lt;/p&gt;

&lt;p&gt;A segurança não deve existir apenas na tela de login.&lt;/p&gt;

&lt;p&gt;Ela precisa estar presente em diferentes partes da arquitetura.&lt;/p&gt;

&lt;p&gt;No TechService, alguns dos principais cuidados são evitar o acesso direto ao banco pelas aplicações clientes, proteger endpoints, validar os dados recebidos, controlar permissões, evitar retorno desnecessário de informações sensíveis e utilizar mecanismos adequados de autenticação.&lt;/p&gt;

&lt;p&gt;Em um ambiente produtivo, outros recursos também seriam importantes, como HTTPS, gerenciamento seguro de credenciais e monitoramento.&lt;/p&gt;

&lt;h2&gt;
  
  
  24. Benefícios do desacoplamento
&lt;/h2&gt;

&lt;p&gt;Um dos principais conceitos observados durante o projeto foi o desacoplamento.&lt;/p&gt;

&lt;p&gt;A aplicação Mobile não precisa saber como a aplicação Web foi desenvolvida.&lt;/p&gt;

&lt;p&gt;Da mesma maneira, o sistema Web não precisa conhecer detalhes internos do aplicativo Mobile.&lt;/p&gt;

&lt;p&gt;Ambos precisam apenas conhecer os contratos disponibilizados pela API.&lt;/p&gt;

&lt;p&gt;Isso facilita manutenção e evolução.&lt;/p&gt;

&lt;p&gt;Caso a interface Web seja modificada futuramente, a API pode continuar funcionando normalmente.&lt;/p&gt;

&lt;p&gt;O mesmo vale para a aplicação Mobile.&lt;/p&gt;

&lt;p&gt;Esse modelo também facilita a criação de novas aplicações no futuro.&lt;/p&gt;

&lt;h2&gt;
  
  
  25. Desafios encontrados durante o desenvolvimento
&lt;/h2&gt;

&lt;p&gt;A integração entre diferentes tecnologias também apresenta dificuldades.&lt;/p&gt;

&lt;p&gt;Um dos desafios é manter os modelos utilizados pelas aplicações compatíveis com aquilo que a API disponibiliza.&lt;/p&gt;

&lt;p&gt;Uma alteração realizada em determinado DTO pode exigir mudanças nos clientes que utilizam esse endpoint.&lt;/p&gt;

&lt;p&gt;Outro ponto importante é a autenticação.&lt;/p&gt;

&lt;p&gt;Não basta simplesmente gerar um token JWT.&lt;/p&gt;

&lt;p&gt;As aplicações precisam armazená-lo e enviá-lo corretamente nas requisições protegidas.&lt;/p&gt;

&lt;p&gt;Também é necessário considerar falhas de comunicação.&lt;/p&gt;

&lt;p&gt;Uma aplicação Mobile pode ser utilizada em uma conexão instável.&lt;/p&gt;

&lt;p&gt;Por isso, uma requisição pode falhar e o sistema precisa estar preparado para tratar essa situação adequadamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  26. Organização e manutenção do código
&lt;/h2&gt;

&lt;p&gt;À medida que um sistema cresce, a organização do código passa a ter impacto direto na manutenção.&lt;/p&gt;

&lt;p&gt;Separar responsabilidades ajuda a evitar que uma única classe concentre funções demais.&lt;/p&gt;

&lt;p&gt;Controllers devem atuar principalmente no tratamento das requisições e encaminhamento das operações.&lt;/p&gt;

&lt;p&gt;DTOs podem ser utilizados para organizar as informações enviadas e recebidas.&lt;/p&gt;

&lt;p&gt;O acesso ao banco também deve seguir uma estrutura definida.&lt;/p&gt;

&lt;p&gt;Essa preocupação é importante inclusive em projetos acadêmicos, pois permite aplicar conceitos próximos aos utilizados em projetos corporativos.&lt;/p&gt;

&lt;h2&gt;
  
  
  27. Possíveis evoluções do TechService
&lt;/h2&gt;

&lt;p&gt;A arquitetura criada também possibilita futuras melhorias.&lt;/p&gt;

&lt;p&gt;O sistema poderia receber funcionalidades como anexos nas Ordens de Serviço, fotografias dos atendimentos, geolocalização, indicadores de SLA, novos dashboards, notificações e relatórios.&lt;/p&gt;

&lt;p&gt;Outra possibilidade seria realizar integração com sistemas externos.&lt;/p&gt;

&lt;p&gt;Como existe uma API centralizada, novas aplicações podem consumir os recursos já disponíveis sem precisar acessar diretamente o banco.&lt;/p&gt;

&lt;p&gt;Esse é um dos benefícios de projetar a arquitetura pensando não apenas no funcionamento atual, mas também em possíveis evoluções.&lt;/p&gt;

&lt;h2&gt;
  
  
  28. Computação em nuvem
&lt;/h2&gt;

&lt;p&gt;Outro assunto abordado durante o PIM IV foi a utilização de infraestrutura em nuvem.&lt;/p&gt;

&lt;p&gt;Uma solução como o TechService poderia ser hospedada em uma plataforma como o Google Cloud Platform (GCP).&lt;/p&gt;

&lt;p&gt;Em um cenário de produção, recursos diferentes poderiam ser utilizados para executar aplicações, disponibilizar serviços, armazenar dados e realizar monitoramento.&lt;/p&gt;

&lt;p&gt;Entretanto, é importante diferenciar arquitetura da aplicação de ambiente de hospedagem.&lt;/p&gt;

&lt;p&gt;A arquitetura Web + API + Mobile + banco de dados não depende obrigatoriamente de uma infraestrutura em nuvem para funcionar.&lt;/p&gt;

&lt;p&gt;A cloud representa uma possibilidade de implantação e evolução da solução.&lt;/p&gt;

&lt;h2&gt;
  
  
  29. Principais aprendizados
&lt;/h2&gt;

&lt;p&gt;O desenvolvimento do TechService permitiu observar na prática como diferentes conceitos estudados durante o curso podem trabalhar em conjunto.&lt;/p&gt;

&lt;p&gt;Entre os principais pontos aplicados estiveram API REST, comunicação JSON, autenticação JWT, Entity Framework Core, banco de dados relacional, ASP.NET Core MVC, .NET MAUI, Swagger, integridade dos dados e separação de responsabilidades.&lt;/p&gt;

&lt;p&gt;Também foi possível compreender melhor a importância de manter as aplicações desacopladas.&lt;/p&gt;

&lt;p&gt;ASP.NET Core MVC, .NET MAUI, Web API e MySQL possuem funções diferentes, mas conseguem trabalhar dentro da mesma solução.&lt;/p&gt;

&lt;p&gt;A experiência de integrar essas tecnologias foi uma das partes mais relevantes do projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  30. Conclusão
&lt;/h2&gt;

&lt;p&gt;O desenvolvimento de uma aplicação multiplataforma envolve mais do que simplesmente criar interfaces diferentes.&lt;/p&gt;

&lt;p&gt;Também é necessário definir como essas aplicações irão compartilhar informações, onde as regras de negócio serão executadas e como os dados serão protegidos.&lt;/p&gt;

&lt;p&gt;No TechService, a utilização de uma API REST desenvolvida em .NET 8 permitiu criar uma camada intermediária entre as aplicações Web e Mobile e o banco de dados MySQL.&lt;/p&gt;

&lt;p&gt;A aplicação administrativa em ASP.NET Core MVC e o aplicativo desenvolvido com .NET MAUI possuem finalidades diferentes, porém utilizam a mesma camada de serviços.&lt;/p&gt;

&lt;p&gt;A autenticação utilizando JWT auxilia na proteção dos endpoints, enquanto o Entity Framework Core realiza a integração entre a aplicação e o banco de dados.&lt;/p&gt;

&lt;p&gt;Ferramentas como Swagger/OpenAPI também contribuíram para a documentação e realização de testes.&lt;/p&gt;

&lt;p&gt;Além disso, recursos do banco de dados, como Triggers e Stored Procedures, foram utilizados para auxiliar no controle e na consistência das informações.&lt;/p&gt;

&lt;p&gt;Durante o desenvolvimento, ficou evidente que uma arquitetura organizada facilita não apenas a implementação inicial, mas também a manutenção e a evolução futura do sistema.&lt;/p&gt;

&lt;p&gt;Mais do que desenvolver aplicações independentes, o principal desafio do projeto foi fazer com que diferentes componentes trabalhassem de forma integrada.&lt;/p&gt;

&lt;p&gt;O TechService serviu, portanto, como uma aplicação prática de diversos conceitos estudados ao longo do curso de Análise e Desenvolvimento de Sistemas, permitindo compreender melhor a relação entre desenvolvimento Web, desenvolvimento Mobile, APIs, segurança e bancos de dados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;p&gt;MICROSOFT. .NET 8 Documentation. Microsoft Learn.&lt;/p&gt;

&lt;p&gt;MICROSOFT. ASP.NET Core Web API Documentation. Microsoft Learn.&lt;/p&gt;

&lt;p&gt;MICROSOFT. ASP.NET Core MVC Documentation. Microsoft Learn.&lt;/p&gt;

&lt;p&gt;MICROSOFT. .NET MAUI Documentation. Microsoft Learn.&lt;/p&gt;

&lt;p&gt;MICROSOFT. Entity Framework Core Documentation. Microsoft Learn.&lt;/p&gt;

&lt;p&gt;MYSQL. MySQL Reference Manual.&lt;/p&gt;

&lt;p&gt;OPENAPI INITIATIVE. OpenAPI Specification.&lt;/p&gt;

&lt;p&gt;IETF. JSON Web Token (JWT) — RFC 7519.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>aspnetcore</category>
      <category>webapi</category>
      <category>maui</category>
    </item>
  </channel>
</rss>
