REST e a evolução da arquitetura de software

[Atualizado em 2008-10-18.]

Já ouviu falar em REST?

É o acrônimo para o termo em inglês Representational State Transfer, ou Transferência de Estado Representacional. O termo foi introduzido por Roy Thomas Fielding — um dos principais autores da especificação HTTP e autoridade em arquitetura de redes de computadores — no ano de 2000, em sua tese de doutorado (Ph.D.): Architectural Styles and the Design of Network-based Software Architectures, Universidade da Califórnia, Irvine, EUA. O capítulo 5 da tese versa sobre Representational State Transfer (REST).

De 2000 até agora, o conceito vem se difundido e se popularizando como um estilo de arquitetura de software moderno para sistemas hipermídia distribuídos, em especial as aplicações na World Wide Web (WWW, ou simplesmente web “para os íntimos”).

O conceito de REST e os sistemas RESTful (aderentes aos princípios de REST) refletem, em minha opinião, uma das muitas facetas do aumento da abstração e complexidade na arquitetura das aplicações via Internet.

Desde que a web surgiu no início da década de 1990 — criada por Tim Berners-Lee no CERN — até hoje, acompanhamos seu aumento de abrangência e complexidade. Surgiu como um meio simples e prático de disponibilização de conteúdo hipermídia na Internet.

Ao longo dos anos, por um lado o conteúdo da web se tornou mais rico e multimídia com a introdução de imagem, animações, áudio e vídeo etc. Por outro, sua interatividade cresce em ritmo acelerado, tornando a web um canal de interação, aplicações e serviços cada vez mais amplo.

As aplicações na web também deram os primeiros passos com o protocolo Common Gateway Interface (CGI) até chegarem à era atual dos Web Services (WS), da Arquitetura Orientada a Serviços (Service-Oriented Architecture – SOA) e seu uso nos sistemas de Gerenciamento de Processos de Negócio (Business Process Management – BPM).

Assim, a web deixa de ser a camada de mais alto nível de abstração na pilha das aplicações Internet (WWW → HTTP → TCP/IP). Acima dela se posicionam sistemas complexos que tem a web como “mera” base de infraestrutura. Neste topo entram princípios e mecanismos como REST, WS, SOA e AJAX, bem como os frameworks de aplicação web de alto nível — baseados em componentes — como Java EE (JSF → JSP → Servlets), Microsoft .NET Framework e o Zend Framework do PHP 5.

Isso me traz à mente a comparação com o que li tempos atrás. A constatação — que então me impressionou — de que os mecanismos de Mapeamento Objeto-Relacional e frameworks de persistência como o Hibernate estavam fazendo a linguagem SQL se tornar commodity, vista como uma camada de “baixo nível” na interação com bancos de dados. Concordo. Eis aí mais um exemplo do aumento no nível de abstração e complexidade dos sistemas.

Para saber mais:

REST em Java

Para intergrar a futura plataforma Java EE 6, em fevereiro de 2007 foi proposta a nova especificação JSR 311 – JAX-RS: The Java API for RESTful Web Services, Java Community Process (JCP). A JSR 311 teve sua versão final lançada em 2008-10-10.

Implementações de Web Services RESTful em Java:

Para saber mais (todos em inglês):

Arquiteto de software

Yuri Gitahy de Oliveira, em seu blog Mundo IT, iniciou em março uma série de artigos sobre Carreiras em TI. Muito instrutivo.

O mais recente, do início de junho, é sobre Arquitetura de Software. Fruto da evolução e aumento da complexidade no desenvolvimento de software, como resume bem Yuri em seu artigo, a carreira de arquiteto de software está em alta — e tende a continuar. Requer, contudo, um profissional sênior de informática, com uma visão abrangente e atual do amplo mundo do desenvolvimento de software.

A formação do arquiteto de software é um desafio, pois nada substituirá a experiência para o bom desempenho profissional nessa área.

Um curso inovador que recomendo ao profissional que quer se aperfeiçoar e se atualizar, para atuar como arquiteto de software, gerente de projetos ou gestor de TI, é a especialização Estratégias em Arquiteturas de Sistemas. Desenvolvido recentemente pelo IEC PUC Minas em parceria com a empresa Archware, em Belo Horizonte, MG, o curso aborda temas amplos e atuais em arquitetura de sistema, partindo dos fundamentos para segmentos específicos: Web, Computação Móvel, Integração, Informação e Dados, e Segurança.

Para saber mais:

Por que modelar com UML

Muito interessante o artigo Why Model With UML? (em inglês), contribuído para a base de conhecimento do NetBeans 5.5 por Kris Richards e Cindy Castillo, atualizado em 11 de junho de 2007.

Como diz o resumo (abstract):

Este artigo foi escrito para aqueles engenheiros de software que nunca têm tempo para modelar um projeto antes de começar a codificar, e para aqueles que ainda sequer consideraram criar modelos de seus sistemas antes de codificá-los. O artigo apresenta alguns métodos e estratégias para ajudar você a ser mais eficiente e possivelmente ganhar tempo. A informação neste guia deve inclusive permitir que você desafie o argumento “Nós nunca temos tempo para fazer o certo, mas sempre temos tempo para fazer de novo.”

O propósito da Linguagem de Modelagem Unificada (Unified Modeling Language – UML) é prover uma notação de modelagem independente de linguagem de programação e de plataforma. Ferramentas UML são tão versáteis quanto os fundamentos de UML. Este artigo serve como uma introdução aos conceitos básicos de de UML enquanto provê uma compreensão dos propósitos da modelagem. Ele não é um manual como-fazer, mas fornece referências, quando apropriado, para tutoriais ilustrando os passos de como usar os recursos de UML inclusos no IDE NetBeans.

Para saber mais:

Referências sobre engenharia e arquitetura de software

Uma extensa página em meu site de referências em TI mantinha com o singelo nome de “Engenharia de Software” uma variedade de tópicos. Pois bem, hoje a página “cresceu e se multiplicou”. Em uma profunda reestruturação e ampliação, a página se tornou uma nova seção Programação: Software, que contém os tópicos:

  • Engenharia de Software
  • Arquitetura de Software
  • Usabilidade e Acessibilidade
  • Livros relacionados

A página de Usabilidade ficava diretamente dentro da seção de Programação e, por coesão, foi movida para esta nova sub-seção. Os demais três tópicos foram originados da divisão e expansão da antiga página de Engenharia de Software. Confira o resultado!

Boas blogadas do dia

Em minhas visitas freqüentes ao InfoBlogs, tem se tornado um hábito fácil achar ótimos artigos e blogs e de tecnologia. E um bom blog puxa outro. Eis minhas recomendações de hoje:

Novo impulso ao JavaScript

Há poucos anos atrás, JavaScript era um das linguagens de programação mais criticadas e detestadas. Os mais radicais inclusive questionariam chamá-la de linguagem de programação. Programadores e desenvolvedores “de verdade” gostavam de linguagens “de verdade”, como C, Java, Pascal, C#, Fortran… tudo menos JavaScript, que nem tipagem forte tinha e ainda se dizia uma linguagem orientada a objetos.

Nos navegadores web, principal ambiente operacional do JavaScript, existiam entre Firefox/Mozilla e Internet Explorer muitas diferenças nas suas implementações da linguagem e, principalmente, no modelo de objetos de documento (DOM) utilizado para se manipular a estrutura da página web com JavaScript.

O Mozilla (de Netscape a Firefox) foi quem lançou e evoluiu várias versões da linguagem JavaScript, mas a correspondente JScript implementada pelo Internet Explorer tinha uma série de diferenças e de adições proprietárias da Microsoft. Lidar com essas diversidades realmente enlouquecia qualquer programador.

Fazer uma aplicação DHTML (HTML com JavaScript) multi-browser era uma tarefa difícil, às vezes inviável. Em 2003 e 2004, eu mesmo tive que estudar um bocado para fazer Validação de formulários HTML, Tratamento de CPF e CNPJ e Eventos multi-plataforma em JavaScript.

Essa realidade foi bastante amenizada à medida que se consolidou padronização da linguagem JavaScript pela ECMA (ECMASCript) e do Document Object Model (DOM) pelo W3C. O Firefox sempre foi bem aderente a estes padrões, e as novas versões do Internet Explorer têm gradativamente aprimorado esta compatibilidade.

E eis que a era Web 2.0 e o desenvolvimento AJAX deram novo impulso ao JavaScript. Como o próprio HTML e o ambiente HTTP não têm evoluído com a rapidez exigida pelo aumento de demanda por recursos nos serviços através da web, quem deu uma luz no fim do túnel para uma explosão de interatividade na web foi o bom e velho JavaScript. A linguagem é o próprio componente “J” em AJAX: Asynchronous Javascript And XML.

Por bem ou por mal, os desenvolvedores de aplicações e serviços interativos para web têm sido obrigados a dar mais atenção ao JavaScript e, com isso, a linguagem tem perdido seu mito de endemoniada para se tornar um ambiente de programação viável, com riqueza de recursos e grande flexibilidade. Ou, na excelente definição do artigo JavaScript – Nem Java, nem Script – Uma Interessante Linguagem Orientada a Objetos (sem classes), por Leonel Togniolli:

[JavaScript] é uma linguagem dinâmica, fracamente tipada, com orientação a objetos baseada em prototipos.

Se quiser entender melhor o que significa essa definição, leia o artigo citado, que é bem interessante.

Na esteira da Web 2.0, explodiu o desenvolvimento de componentes Ajax e, por conseqüência, despontaram os magos do JavaScript, e recursos e ferramentas cada vez mais interessantes e poderosos estão surgindo, baseados em JavaScript.

Vários IDEs de desenvolvimento para web oferecem suporte a edição e validação de sintaxe Javascript. Além disso, um excelente ambiente para monitorar, inspecionar e depurar JavaScript em ação — assim como CSS, HTML, DOM, tempo de carga de páginas e Ajax — é o Firebug, uma poderosa extensão para o navegador Firefox. Recomendo a leitura do artigo Puxão de orelha faz bem, JavaScript também. Apresento o Firebug!, por Giovane Roslindo Kuhn.

Também existem bibliotecas que, a partir dos pobres componentes padrão atualmente existentes de estrutura de página e formulários do HTML, criam componentes de interface mais sofisticados, há muito já disponíveis em ambientes de programação gráfica desktop, como árvores, tabelas etc.

Existe o popular Dojo Toolkit, um framework DHTML/AJAX de código aberto escrito em JavaScript. Outro exemplo é a biblioteca JavaScript Qooxdoo. Sua lista de componentes é bem rica, como se pode ver no showcase. Conheci esta biblioteca por outro artigo também de Leonel Togniolli: Clientes Ricos Ajax na Web com Qooxdoo.

document.write("Hello world, again, JavaScript!") 🙂

Para saber mais:

Apresentação de Arquitetura da Informação

Seguindo uma dica do grande Felipe Memória (designer e professor) em seu blog ExperiênciaPerfeita.org, conheci a apresentação da Laura Lessa para o Curso de Especialização – Arquitetura de Informação em websites, de Guilhermo Reis, e adorei. Recomendo a todos que gostam de projeto, desenvolvimento e design para web:

Arquitetura de Informação na construção de um portal de notícias“, por Laura Lessa, reproduzido em SlideShare por Samuel Viani (PDF original não mais disponível).

Laura Lessa é Gerente de Arquitetura da Informação da Globo.com. O material disponibilizado por ela apresenta o case de AI do portal de notícias G1.

Rico material sobre Java por Argonavis

Um artigo no blog de Dyego Souza Dantas Leal (que se intula com muito humor “Sun Certified Java Comediant”) em 23 de fevereiro deu a dica sobre uma palestra (PDF) sobre gerenciamento de memória em Java 5, disponibilizada pela empresa Argonavis Consultoria e Treinamento, por Helder da Rocha, Setembro 2005.

Fui conferir e tive uma feliz surpresa: a Argonavis na verdade disponibiliza um vasto e rico material sobre Java para baixar, em formato PDF, de autoria de Helder da Rocha: palestras, slides dos cursos ministrados na Argonavis, tutoriais, livros e apostilas.

A apresentação sobre gerenciamento de memória indicado pelo Dyego, por exemplo, faz parte do material adicional do curso completo J100: Programação Orientada a Objetos usando Java, onde além dos arquivos dos 20 módulos/tópicos do curso, há a seção de material adicional em Tópicos Selecionados de Programação em Java 5.

Parabéns e obrigado à Argonavis e Helder da Rocha por disponibilizar material tão útil à comunidade Java e TI. Achei uma maneira fantástica da empresa buscar com isso visibilidade, reconhecimento e retorno no mercado.

MDE e DDD

Expandi minha página de referências sobre Engenharia de Software para incluir também os tópicos de Engenharia Dirigida a Modelo (Model-Driven Engineering – MDE) e Desenho Dirigido a Domínio (Domain-Driven Design – DDD).

Estes tópicos estão cada vez mais quentes em engenharia e arquitetura de software.

Recomendo aos projetistas de software o livro (em inglês, ainda sem tradução) Domain-Driven Design: Tackling Complexity in the Heart of Software, por Eric Evans, publicado pela Addison-Wesley Professional em agosto de 2003, ISBN 0-321-12521-5, 560 pp.

BPM para leigos

[Atualizado em 2007-12-02.]

O recente artigo de Marco Aurélio Mendes, BPM — Business Process Management — para Leigos, postado em seu blog de 29 de janeiro, é excelente. Objetivo, claro e direto, o texto não só explica BPM (Gerenciamento de Processos de Negócio), mas contextualiza a aplicação de tecnologia da informação (TI) à luz dos processos de negócio.

A definição de [Jeston & Nelis, 2006], extraída do artigo O que é o que é (2007-09-03) do consultor Gart Capote, no blog Mundo BPM, diz:

BPM é a realização dos objetivos de uma organização através da melhoria, do gerenciamento e controle dos seus processos de negócio essenciais.

Para mim, BPM é uma reencarnação atualizada do bom e velho conceito de O&M — Organização e Métodos. A atual popularização e expansão dos conceitos e do uso de BPM em TI é o reflexo da grande onda do setor tecnológico em todo mundo: o alinhamento estratégico da área de tecnologia com a gestão estratégica de uma instituição ou negócio.

Creio que o grande diferencial, e ao mesmo tempo grande desafio, dos CTO‘s e analistas de TI é: aproveitar sua visão sistematizada dos cenários, das atividades e das informações e não apenas prover tecnologia, mas melhorar processos de negócio. Isso porque, como bem colocou Marco, “a TI não tem fim em si mesma”. E complemento: TI sozinha não realiza nada nem integra nada.

Modernização competitiva em qualquer negócio requer três pilares fundamentais e indissociáveis entre si: pessoas, processos/métodos e tecnologia.

Parabéns pelo artigo, Marco Aurélio! Continue assim.

Para saber mais:

BPM

Pessoas e Processos

Notação de Modelagem – BPMN

Linguagem de Execução – BPEL