# Mashup (aplicação web)

Um mashup é um site personalizado ou uma aplicação web que usa conteúdo de mais de uma fonte para criar um novo serviço completo.
O conteúdo usado em mashups é tipicamente código de terceiros através de uma interface pública ou de uma API. Outros métodos de codificação de conteúdo para mashups incluem Web feeds (exemplo: RSS ou Atom), Javascript e widgets que podem ser entendidas como mini aplicações web, disponíveis para serem incorporadas a outros sites.
Assim como os blogs revolucionaram a publicação online, os mashups estão revolucionando o desenvolvimento web possibilitando a qualquer um combinar dados de fontes como o eBay, Amazon.com, Google, Windows Live e Yahoo! de maneiras inovadoras. Uma maior disponibilidade de APIs leves e simples tem possibilitado mashups relativamente simples de projetar. Requerem um conhecimento técnico mínimo e os mashups feitos sob encomenda muitas vezes apresentam inovações que eram consideradas improváveis, combinando uma nova disponibilidade pública de dados e novos caminhos criativos.
Algumas vezes encontrou-se também referências aos termos aplicação situacional ou ad hoc sites, referindo-se aos mashups.

## Contexto

Em 2004, o termo Web 2.0 foi cunhado em uma conferência da O’Reilly Media, referindo-se a uma assim chamada “segunda geração” de aplicações web, caracterizadas por um grau maior de interação e colaboração entre usuários. De lá para cá, o termo passou a ser constantemente utilizado pelo mercado, na esteira do rápido crescimento de um número significativo de blogs, comunidades virtuais, wikis e outras aplicações.
Em "What is the Web 2.0", Tim O’Reilly menciona que o conceito da Web 2.0 não possui fronteiras rígidas. Mas, de uma forma geral, pode-se entendê-la como um conjunto de princípios e práticas.
Alguns desses princípios são:
* Web como plataforma (de serviços): O’Reilly menciona duas aplicações surgidas antes da criação do termo Web 2.0, como exemplos de utilização da web como uma plataforma de serviços: DoubleClick (propaganda) e Akamai (serviços de caching de informação).
* Oferta de serviços e não pacotes de software.
* Arquitetura focada em participação.
* Escalabilidade.
* Mistura de fontes de dados e de transformação de dados.
* Software utilizável em vários tipos de dispositivos.
* Aplicações que atuam como potencializadores da inteligência coletiva.
É neste contexto em que os mashups se inserem, pois podem ser considerados um dos tipos de aplicação da chamada Web 2.0. E não seria exagero dizer que eles sejam, talvez, o tipo que mais se adere aos princípios da Web 2.0.

## Arquitetura de um Mashup

Em Mashups: The New Breed of Web Applications , Duane Merrill propõe que, em termos de arquitetura, uma aplicação mashup é constituída pelos seguintes elementos:
* Provedores de conteúdo (ou de APIs),
* o mashup site,
* a aplicação cliente (tipicamente, um navegador).
Os provedores de conteúdo normalmente publicam seu conteúdo através de APIs, que implementam protocolos ou paradigmas de interação baseados nos princípios REST, tais como RSS, Atom ou SOAP. Em alguns casos, o provedor de conteúdo não foi necessariamente preparado para ser utilizado por outra aplicação. Ou seja, seu conteúdo é utilizado na composição de um mashup, sem que o criador do site ou aplicação o tenha concebido para tal tipo de interação. Nestes casos, como não há uma API previamente definida, os construtores de mashup podem utilizar uma técnica chamada de screen scrapping para obter conteúdo desses sites.
Uma outra forma de publicar conteúdo para a construção de mashups é através de widgets, que são pedaços de códigos que podem ser incorporados pelas aplicações mashup.
O mashup site é onde reside a lógica da aplicação. Não necessariamente a execução da aplicação (ou de parte dela) ocorrerá no servidor do mashup site. Isto porque várias partes da aplicação poderão ser executadas no provedor de conteúdo ou na aplicação cliente (browser).
Um dos principais exemplos de mashup site é o . Neste caso, Google Maps (fornecendo os mapas) e o Departamento de Polícia de Chicago (fornecendo os dados das ocorrências de crime) são os fornecedores de conteúdo.
De fato, pode-se entender que o grande diferencial desse tipo de aplicação está na possibilidade de combinar dados resultantes de computação em vários pontos (nos três elementos da arquitetura) para obter o resultado final do mashup.
A aplicação cliente tipicamente é um navegador sendo executado no computador do usuário. Nele executa-se a lógica para a apresentação do conteúdo. Muitas vezes, utiliza-se alguma lógica rodando no cliente para compor e agregar o conteúdo, além da apresentação propriamente.

## Tecnologia e padrões que suportam os Mashups

Ao analisar a arquitetura proposta, percebe-se que essa baseia-se num paradigma que, de certa forma, já era utilizado pelos protocolos e padrões da web. Ao utilizar pequenos “pedaços” de software, como os antigos contadores de acesso, ou mesmo pedaços de client-side code (como os códigos em JavaScript), os criadores de sites já estavam, de certa forma, montando mashup applications.
Assim, não seria errado entender que os mashups são, na verdade, uma natural evolução dos paradigmas anteriores, com a possibilidade de agregar conteúdo mais dinâmico (extraídos de bases de dados), e de apresentá-los em formatos distintos, combinados com outras informações.
Neste ponto, é interessante apresentar algumas das tecnologias e padrões que suportam o conceito de mashups. Tome-se como base os três elementos considerados os componentes de uma aplicação mashup.
Os provedores de conteúdo publicam serviços ou APIs para que outras aplicações obtenham informações de seus sites. De maneira ideal, esses serviços ou APIs devem funcionar de acordo com os princípios de arquitetura conhecidos como REST.
REST é definido por Roy Thomas Fielding como “um estilo de arquitetura para sistemas distribuídos de hipermídia”. REST define um conjunto de propriedades com ênfase na escalabilidade, uso de interfaces genéricas, implantação de componentes independentes, além do uso de componentes intermediários para reduzir latência, prover segurança e encapsular sistemas legados.
Mas, além dessas tecnologias básicas da web, pode-se identificar outras tecnologias mais recentes (ou seria melhor dizer, modelos de aplicações), cuja evolução permitiu o surgimento e a disseminação dos mashups. Não se pretende que a lista a seguir seja extensiva, dada a diversidade e o dinamismo da web, mas podemos citar Web feeds, Ajax, Web Services (SOAP), Screen Scrapping e Web semântica (RDF).

## Classificação dos mashups

Considerando-se a natureza dinâmica e, até certo ponto, anárquica da web, seria de certa forma até arriscado propor algum tipo de classificação dos mashups. Porém, como há algumas propostas diferentes de classificação, entende-se que é interessante mostrar essas possibilidades, a título de informação.
No artigo da Wikipedia (Mashup (web application hybrid)) em inglês, os mashups são classificados, conforme a sua destinação, como consumer mashups, data mashups e enterprise mashups. Mas esta classificação pode ser melhorada, pois um dos tipos mencionados (data mashups) poderia pertencer a uma dimensão de classificação diferente de dos outros dois. Ou seja, pode-se entender que um data mashup pode ser também classificado como um consumer mashup, por exemplo.
David Linthicum em "Critical Business Data for Mashups, SOAs, and Enterprise Applications"(http://www.kapowtech.com/pdf/A%20Primer%20on%20Enterprise%20Mashups.pdf), por sua vez, classifica-os em dois tipos: centrados em apresentação (presentation-centric) e centrados em dados (data-centric). Estes, por sua vez, podem ser classificados em agregação de conteúdo, fluxos automatizados de dados, dados compostos e migração de conteúdos.
Já Duane Merrill em "Mashups: The New Breed of Web Applications"(http://www.ibm.com/developerworks/xml/library/x-mashups.html), propõe uma classificação baseada no tipo de aplicação em que um mashup é utilizado. Assim, eles podem ser classificados em mashups de mapas (mapping mashups), de vídeo e fotos, de busca e compras, e de notícias.
Considerando-se as possibilidades acima, parece fazer sentido classificar os mashups em mais de uma dimensão: conforme a origem e composição das informações (seguindo a proposta de David Linthicum, por exemplo); conforme o público-alvo; conforme seu objetivo ou utilização.