Prefácio
Escrito por Jim McKeeth
Chief Developer Advocate & Engineer
Embarcadero Technologies
Todos conhecem que Delphi é a melhor solução para conexões de banco de dados e construir aplicações móveis e desktop. O Delphi MVC Framework (DMVCFramework) traz a incrível produtividade do Delphi para a web!
O DMVCFramework é baseado no módulo WebBroker do Delphi, que foi introduzido no Delphi 3 em 1997. Muita coisa mudou desde que o WebBroker apareceu pela primeira vez, tanto no Delphi quanto na web.
A Primeira Guerra dos Navegadores da Web começou em 1997. A Microsoft acaba de lançar o Internet Explorer versão 4 deixando um logotipo com a letra “e” de três metros de altura no gramado da frente da Netscape, com um cartaz “Da equipe do IE … Nós Amamos Você”. Depois que os funcionários da Netscape o derrubaram, eles retribuíram o favor com um mascote do dinossauro Mozilla segurando uma placa que dizia “Netscape 72, Microsoft 18”, a participação no mercado de navegadores na época. Opera, Cyberdog da Apple, Lynx o navegador somente texto e outros representavam os 10% restantes.
Conforme a evolução da web, vemos o surgimento de serviços da web XML e SOAP. Tanto o XML (Extensible Markup Language) como o HTML (HyperText Markup Language) são baseados na Standard General Markup Language (SGML), que é a origem dos colchetes angulares. SOAP é o protocolo de acesso à objetos simples que permitia chamadas de procedimento remoto (RPC) e prometia uma coleção descentralizada de serviços remotos facilmente invocados por meio de solicitações da web.
Delphi obteve seus serviços da Web SOAP baseados em XML no Delphi 6 de 2001. Ele adicionou a capacidade de construir servidores XML SOAP e consumir serviços XML SOAP existentes, mesmo aqueles construídos com outras ferramentas. Contribuí com um capítulo para um livro sobre a construção de um cliente SOAP baseado na web que consumia um .NET SOAP Services. Era usado o Kylix para implantar o servidor web Delphi no Linux.
O SOAP nunca realizou seu sonho de revolucionar a forma como os serviços eram chamados, recebendo apenas adoção limitada. As coisas mudaram novamente quando Roy Fielding introduziu o termo transferência de estado representacional (REST) em sua dissertação de doutorado. Onde o XML SOAP era um protocolo oficialmente adotado de peso, o novo desafiante REST era leve e vago. Realmente mais uma recomendação descritiva.
REST é construído na simplicidade do protocolo HTTP. Isso permite que um navegador da web comum visualize um endpoint REST simples. Os dados resultantes são tipicamente em JSON (JavaScript Object Notation composto de chaves), tendo os dados retornados.
Mais adiante, um serviço é considerado RESTful se este encontra a seguinte restrições de
- Interface uniforme - REST faz uso dos Locadores de Recursos Uniforme (URL) padrão da web para definir endpoints como a interface REST.
- Cliente–servidor - Este é a respeito da separação de todos interesses e escalabilidade melhorada que vem junto. O armazenamento de dados e a interface de usuário são desacopladas e permitem evolução independente.
- Sem estado - Isso requer que cada solicitação deve conter todas as informações necessárias e não pode tirar proveito de qualquer estado armazenado. Portanto, duas solicitações idênticas produzirão a mesma resposta idêntica. Isso permite maior escalabilidade horizontal do servidor. Muitas implementações de descanso permitem que um token de autenticação mantenha uma sessão, mas além disso, é importante que a ordem das solicitações não afete os resultados.
- Cacheável - Como não possui estado, é facilmente armazenável em cache. Se você solicitar uma página específica de dados, a mesma solicitação sempre retornará os mesmos resultados (até que os dados sejam alterados). Um sistema não-cacheável pode fornecer automaticamente a próxima página em solicitações futuras, mas também não seria sem estado.
- Sistema de camadas - É daí que vem o termo popular “microsserviços”, com a ideia de que uma arquitetura de serviço RESTful é feita de várias camadas de serviços REST, cada uma ciente apenas de suas camadas vizinhas.
Finalmente, com REST, vemos a realização de uma arquitetura de serviços da web distribuída e aberta. Quase todo site que oferece um serviço o torna disponível por meio de uma API RESTful.
O que é Delphi MVC Framework, e por que isso importa?
MVC é um padrão de design sobre desacoplamento do Modelo, View, Controller para tornar mais fácil construir um aplicativo onde a interface do usuário (view) é independente dos dados (model) e funcionalidade (controller). Isso torna mais fácil criar um aplicativo multicamadas com várias interfaces de usuário: web, móvel, desktop, etc.; que todos usam o mesmo back-end. O usuário observa a view, interage com o controller, que manipula o modelo, atualizando a view.(Veja a figura 1)
Com o DMVCFramework, isso é expresso como um serviço da web baseado em REST. O controller é composto de endpoints REST que fornece a funcionalidade para manipular o modelo ou dados (geralmente um banco de dados, mas nem sempre), então a view são os endpoints REST que fornecem os dados ao usuário. A vantagem desse padrão desacoplado é que a view é implementada tão facilmente por meio de uma página da web quanto por meio de um aplicativo móvel ou desktop. Todos eles apenas chamam os endpoints REST.
DMVCFramework é um dos frameworks mais populares para construir aplicações web com Delphi. Inclui suporte total de APIs RESTful (RMM Nível 3) JSON-RPC 2.0 tornando a construção e publicação o mais simples e flexível possível. Não é a única solução de servidor REST para Delphi e isso é uma das coisas que amo no Delphi: a variedade e opções disponíveis para o usuário final.
Se alguém me perguntasse qual REST Framework escolher, eu sempre diria que depende de sua implementação e requisitos, mas se você é novo na construção de uma solução de servidor REST, o DMVCFramework é um ótimo lugar para começar. Como um projeto de código aberto, a barreira de entrada não poderia ser menor, especialmente com a disponibilidade deste livro. Você pode descobrir que é a solução perfeita para você.
-Jim McKeeth
Chief Developer Advocate & Engineer
Embarcadero Technologies
jim.mckeeth@embarcadero.com
[^Figure 1]: RegisFrey; Own work, Public Domain; https://commons.wikimedia.org/wiki/File:MVC-Process.svg