Desmistificando REST com Java por Emílio Dias
|
|
|
- Brenda Rico Batista
- 8 Há anos
- Visualizações:
Transcrição
1
2
3 Desmistificando REST com Java por Emílio Dias 1ª Edição, 11/02/ AlgaWorks Softwares, Treinamentos e Serviços Ltda. Todos os direitos reservados. Nenhuma parte deste livreto pode ser reproduzida ou transmitida em qualquer forma, seja por meio eletrônico ou mecânico, sem permissão por escrito da AlgaWorks, exceto para resumos breves em revisões e análises. AlgaWorks Softwares, Treinamentos e Serviços Ltda [email protected] +55 (11) Siga-nos nas redes sociais e fique por dentro de tudo!
4
5 Sobre o autor Emílio Dias Instrutor da AlgaWorks, formado em Ciência da Computação, Especialista em Segurança da Informação e detentor das certificações SCJP e LPIC-1. Palestrante de fóruns internacionais de Software Livre e congressos de Engenharia de Software. Atua também como Professor nos cursos de Ciência da Computação e Sistemas de Informação da Unitri em Uberlândia. LinkedIn:
6 Antes de começar... Antes que você comece a ler esse livro, eu gostaria de combinar algumas coisas com você, para que tenha um excelente aproveitamento do conteúdo. Vamos lá? Como obter ajuda? Durante os estudos, é muito comum surgir várias dúvidas. Eu gostaria muito de te ajudar pessoalmente nesses problemas, mas infelizmente não consigo fazer isso com todos os leitores do livreto, afinal, ocupo grande parte do dia ajudando os alunos de cursos online na AlgaWorks. Então, quando você tiver alguma dúvida e não conseguir encontrar a solução no Google ou com seu próprio conhecimento, minha recomendação é que você poste na nossa Comunidade Java no Facebook. É só acessar: Como sugerir melhorias ou reportar erros sobre este livreto? Se você encontrar algum erro no conteúdo desse livreto ou se tiver alguma sugestão para melhorar a próxima edição, vou ficar muito feliz se você puder me dizer. Envie um para [email protected].
7 Ajude na continuidade desse trabalho Escrever um livro (mesmo que pequeno, como esse) dá muito trabalho, por isso, esse projeto só faz sentido se muitas pessoas tiverem acesso a ele. Ajude a divulgar esse livreto para seus amigos que também se interessam por programação Java. Compartilhe no Facebook e Twitter!
8
9 Sumário 1 2 Introdução REST Cliente-servidor Stateless Cache Interface uniforme Sistema em camadas Código sob demanda É REST ou RESTful? Sendo RESTful com HTTP Recursos Métodos REST versus SOAP Modelo de maturidade Richardson Nível 0 - POX Nível 1 - Recursos Nível 2 - Verbos HTTP Nível 3 - HATEOAS... 37
10 6 Conclusão 6.1 Próximos passos... 43
11 Capítulo 1 Introdução Você certamente já deve ter ouvido falar em Web Services RESTful, não é mesmo? Muito tem se falado a respeito sobre formas de integração de sistemas comerciais, aplicativos móveis e tantos outros. Mas qual a melhor forma de realizar esta integração? Nesse livreto, vamos apresentar vários conceitos e tirar uma série de dúvidas sobre como podemos implementar um Web Service RESTful e como o Java pode te ajudar nessa caminhada. Você já se perguntou por que precisamos de Web Services? Essa é uma questão que podemos avaliar sob vários pontos de vista, mas eu quero te apresentar dois. Primeiramente, muitas empresas adquirem software de vários fornecedores e precisam de alguma forma fazer todos eles se comunicarem. Neste sentido, os Web Services ajudam como uma ponte de ligação entre os mesmos. O segundo aspecto é até um pouco mais interessante, e pra falar sobre ele, vou te contar uma pequena história. A forma na qual interagimos com meios computacionais vem evoluindo consideravelmente com o passar do tempo. Nos últimos anos, temos acompanhado o surgimento de Smart TVs, Smartphones, Tablets, Internet das Coisas, dentre tantos outros. O aparecimento de tais dispositivos e tecnologias, impactam diretamente o nosso dia a dia. 11
12 O mercado de tecnologia passa constantemente por desafios, para de alguma forma, atender as necessidades de todos os consumidores, e nem sempre é simples modelar uma solução adequada para tantos cenários complexos. Atualmente é difícil imaginarmos um mercado sem vendas pela Web e também a execução de atividades corriqueiras a partir de um smartphone. Consumidores modernos exigem cada vez mais uma experiência de uso avançada, o que permite, por exemplo, a compra de um produto em um e- commerce e a possível troca do mesmo em uma loja física, de forma totalmente transparente para vendedores e consumidores. Esse novo tipo de experiência é o que o mercado vem dando o nome de multicanalidade e omnichannel. Com a convergência de tantos meios tecnológicos, nós desenvolvedores nos vemos à frente da necessidade de encontrar soluções para integrar todas essas ferramentas. Além disso, APIs (Application Programming Interface) que eram antes artigos de luxo discutidos e abordados apenas por nós programadores, passaram a ter muito valor para altos executivos no mundo dos negócios. Grandes empresas como Twillo, Twitter, Google e Facebook dependem fortemente de um modelo computacional aberto que permita que seus produtos interajam com aplicações de toda a Web. Ou seja, eles precisam de alguma forma (via Web Services), disponibilizar meios para que outros sistemas se integrem com seus serviços. Dizendo isso, fica mais fácil entender que a escolha de uso por uma tecnologia de Web Services não está associada apenas a um fator técnico, e sim também ao fato que precisamos desenvolver sistemas de forma que o usuário tenha uma experiência de uso cada vez melhor. Além disso, a quantidade de usuários que utilizam a Web e algum meio computacional aumenta a cada dia, projetos de inclusão são frequentemente noticiados e precisamos de alguma forma desenvolver sistemas que sejam capazes de suportar tudo isso. Arquiteturas monolíticas e camadas acopladas podem não ser adequadas para a modelagem de um sistema que precisa cada vez mais interagir com tantos outros. Por que então não construirmos APIs baseadas na Web? Ela possui várias 12
13 características que nos permitem criar APIs que suportam tudo aquilo que eu disse anteriormente. Apenas para citar algumas, vejamos: Simples Extensível Escalável Incremental Global E muito mais Perceba que possuímos uma grande plataforma em mãos. Exato, podemos passar a enxergar a Web não apenas como um lugar onde um conjunto enorme de informações são encontradas ou páginas Web são disponibilizadas, podemos começar a tratá-la como uma plataforma e usar dos seus benefícios para criar aplicações cada vez melhores. Baseado nisso, nesse livreto nós vamos discutir como o modelo arquitetural REST e o Java podem nos ajudar na implementação de soluções que atendam essa quantidade de requisitos. Vamos falar também sobre a origem do REST, apresentar e tirar algumas dúvidas e confusões que sempre aparecem quando esse assunto é discutido. 13
14 Capítulo 2 REST Apesar de aparentemente ser uma proposta nova, REST surgiu no início dos anos 2000, a partir da tese de Ph.D de um cientista chamado Roy Fielding 1. O intuito geral era a formalização de um conjunto de melhores práticas denominadas constraints. Essas constraints tinham como objetivo determinar a forma na qual padrões como HTTP e URI deveriam ser modelados, aproveitando de fato todos os recursos oferecidos pelos mesmos. Vamos conhecer um pouco melhor essas contraints? 2.1. Cliente-servidor A principal característica dessa constraint é separar as responsabilidades de diferentes partes de um sistema. Essa divisão pode se dar de diversas formas, iniciando por exemplo com uma separação entre mecanismos de armazenamento de dados e o back-end da aplicação. Outra divisão muito comum se dá entre a interface do usuário e back-end. Isso nos permite a evolução e escalabilidade destas responsabilidades de forma independente. Atualmente várias ferramentas seguem este modelo, frameworks como AngularJS e APIs RESTful permitem o isolamento de forma elegante para cada uma dessas funcionalidades
15 2.2. Stateless Essa característica propõe que cada requisição ao servidor não deve ter ligação com requisições anteriores ou futuras, ou seja, cada requisição deve conter todas as informações necessárias para que ela seja tratada com sucesso pelo servidor. O protocolo HTTP segue esse modelo, porém, é muito comum o uso de cookies para armazenamento de sessões do lado do servidor. Essa abordagem deve ser usada com cautela, visto os inconvenientes que a mesma carrega. Um dos principais inconvenientes no uso de cookies é que sua utilização diminui de forma drástica a forma na qual podemos escalar nossas aplicações. A figura abaixo ilustra um pouco melhor essa situação. Perceba que o cliente precisa sempre ser redirecionado para o mesmo servidor, limitando assim questões de alta disponibilidade, escalabilidade e etc. Existem várias maneiras de tratar essa questão, por exemplo, podemos usar o modelo Sticky Session 2 ou em um cenário melhor, devemos sempre que possível, transferir a responsabilidade de armazenamento de informações para os clientes
16 Segundo Fielding, utilizando um modelo de comunicação stateless, sua API passa a ter características como visibilidade, confiabilidade e escalabilidade. Tenha em mente que, sempre que possível, o ideal é o desenvolvimento de sistemas que não dependam da manutenção de estado Cache Para uma melhor performance, um sistema REST deve permitir que suas respostas sejam passíveis de cache. Cada resposta deve de alguma maneira informar para clientes ou elementos intermediários (proxies, gateways e/ou balanceadores de carga) qual a política de cache mais adequada. O protocolo HTTP permite o funcionamento adequado dessa constraint a partir da adição dos headers expires (versão 1.0 do HTTP) e/ou cache-control (versão 1.1 do HTTP). Veja que em situações onde o cliente local ou o balanceador possui cache, não temos a necessidade de requisitar ao servidor o processamento de uma nova 16
17 requisição. Esse modelo permite que o servidor execute apenas tarefas que realmente são necessárias Interface uniforme Como temos discutido até agora, podemos ver que REST possui uma série de características, e certamente a interface uniforme é uma das mais importantes. Bastante esforço deve ser feito para que o sistema possua uma interface modelada seguindo alguns padrões importantes. Quando se fala sobre uma interface, os elementos abaixo devem ser considerados: Recursos Mensagens autodescritivas Hypermedia Quando implementada utilizando HTTP, uma API deve levar em consideração também a correta utilização dos métodos e códigos de retorno. Nós vamos discutir isso melhor em sessões futuras. Para ficar um pouco mais claro o que de fato vem a ser essa interface, podemos pensar por exemplo como podemos manipular vendas em um e-commerce. Uma loja virtual possui diversas entidades, como por exemplo produto, cliente, pedido e etc. Devemos pensar em criar uma interface que permita a manipulação desses conceitos. Abaixo um exemplo: Veja que a figura modela o recurso cliente e uma série de operações que podem ser executadas sob o mesmo. Futuramente vamos discutir como implementar essa interface e você irá perceber que cada uma das operações reflete sob um método do protocolo HTTP. 17
18 2.5. Sistema em camadas Com o intuito de permitir a escalabilidade necessária para grandes sistemas distribuídos, um sistema REST deve ter a capacidade de adicionar elementos intermediários e que sejam totalmente transparentes para seus clientes. Tais elementos intermediários são utilizados de forma transparente para o cliente. Isso é algo de bastante valor, imagine se você tivesse que acessar o site do Google sem um mecanismo de DNS, ou se em cada acesso você precisasse informar se deseja ou não fazer um cache. Talvez dessa maneira a Web não seria o sucesso que é hoje. Perceba que nos tópicos que discutimos sobre stateless e cache, foi utilizado um elemento que demos o nome de balanceador. Esse balanceador é um dos elementos que podemos usar e que permite adicionarmos mais servidores para uma aplicação, sem que o cliente note sua presença Código sob demanda Você certamente já deve ter estudado uma série de artigos e livros sobre boas práticas de desenvolvimento de software e orientação a objetos. A maioria desses artigos e livros falam sobre a questão de extensibilidade, que é a capacidade que um software possui de evoluir sem a necessidade de quebra do mesmo. Código sob demanda permite algo semelhante, ele possibilita adaptar o cliente de acordo com novos requisitos e funcionalidades. Exemplos disso são o JavaScript e Applets. 18
19 Capítulo 3 É REST ou RESTful? Você já deve ter se perguntado sobre a diferença dos termos REST e RESTful, não é? Não se preocupe, uma confusão muito comum é o uso intercambiável desses termos. Mas de fato, uma API ou aplicação deve receber o nome REST ou RESTful? De forma bem direta, o correto é você dizer API RESTful. Além disso, é importante você entender o porquê dessa nomenclatura e qual o momento certo de usar cada uma. Quando estamos discutindo sobre o modelo e sobre as características que nós vimos anteriormente, você deve utilizar o termo REST, já no momento em que você estiver falando de uma implementação que usa essas mesmas características, você deve usar RESTful. Apesar de não ser algo tão relevante, achei interessante lhe dizer isso para que você sempre utilize as nomenclaturas corretas. Isso também nos ajuda a deixar claro que REST nada mais é que um conjunto de boas práticas Sendo RESTful com HTTP Até agora, nós discutimos as características de uma forma bastante conceitual e abstrata. Apesar dessa discussão nos permitir uma visualização adequada dos conceitos, precisamos entender isso de uma forma mais prática. 19
20 Vamos discutir agora a forma mais utilizada de implementação de REST: o protocolo HTTP. Vamos falar também sobre os principais conceitos envolvidos na criação de uma API RESTful. O objetivo não é listar todas as funcionalidades possíveis, mas iremos navegar pelas características principais que você deve conhecer para implementar um Web Service RESTful Recursos Um recurso é utilizado para identificar de forma única um objeto abstrato ou físico. A RFC 3986 especifica detalhadamente todas as características que uma URI deve seguir. Basicamente, temos a modelagem de um recurso sob um substantivo, ao invés de verbos, como é usualmente utilizado em APIs. Exemplos: /cliente/1 /produto/1 /cliente/1/notificacao Uma URI deve ser visualizada como um recurso, e não como uma ação a ser executada sob um servidor. Alguns autores e literaturas defendem a utilização de verbos em casos específicos, porém, isso não é totalmente aceitável e você deve usar com cautela. Para que fique mais claro pra você, vamos dar uma olhada em como isso pode ser construído usando o Spring. Não vou entrar em muitos detalhes do framework, minha ideia aqui é lhe mostrar o quão simples pode ser uma public class ClienteResource = "/{id}", method = RequestMethod.GET, produces = "application/json") public ClienteRepresentation buscar(@pathvariable("id") Integer id) { System.out.println("Retornando cliente..."); return new ClienteRepresentation("João da Silva"); 20
21 } } Apesar de simples, esse código nos permite visualizar algumas características para a criação de um recurso. O principal que devemos analisar é: A informa que essa classe deve disponibilizar um controlador com características de um Web Service REST. A na classe ClienteResource informa ao Spring qual será o nome do nosso recurso. É nesse momento que devemos conseguir modelar quais os recursos necessários em um sistema. Já na do método buscar, podemos ver algumas coisas interessantes. A primeira é o mapeamento do parametro {id}. Se juntarmos o valor do atribuído value ao recurso mapado na classe, teremos como possibilidade o acesso ao mesmo a partir da URI /cliente/{id}. É interessante notar também a presença do atributo produces, que informa que a representação retornada ao cliente deve ser em formato JSON. Executando esse Web Service, podemos ter um resultado semelhante a: { } "nome": "Joao da Silva" Perceba que é uma simples informação em formato JSON (falaremos sobre JSON a seguir), mas que já podemos começar a evoluir. Você deve ter reparado que usei a palavra representação para me referir a mensagem de retorno do Web Service. É importante você sempre usar essa nomenclatura para que fique claro o que você deseja informar. Quando um recurso é solicitado por um cliente (ex: browser), o servidor executa uma série de atividades e retorna uma mensagem ao solicitante. Essa mensagem é de fato uma representação de um determinado recurso. A mesma não necessariamente precisa estar ligada a alguma parte concreta de um sistema, como por exemplo, uma tabela de banco de dados. 21
22 Representações As representações podem ser modeladas em vários formatos, como XML, JSON, HTML e etc. Você deve apenas levar em consideração que esse formato deve suportar a utilização de hypermedia (posteriormente nós vamos discutir os seus conceitos). Para ficar um pouco mais claro, imagine por exemplo o recurso /cliente/1, que discutimos anteriormente. Naquele caso, nós usamos uma representação em formato JSON, mas nós poderíamos também querer representá-lo a partir de uma imagem. Isso pode ser feito devido a capacidade de múltiplas representações (mais conhecido como negociação de conteúdo) que o HTTP possui. Para que isso seja possível, você pode usar o header Accept para especificar qual é o tipo de representação mais adequada. A figura abaixo deixa isso um pouco mais claro. Note que para cada tipo de formato requisitado, o servidor retornou uma resposta com uma representação adequada. Agora vamos fazer uma rápida revisão sobre os formatos JSON e XML, que são os mais utilizados em APIs na atualidade, para caso você ainda tenha alguma dúvida sobre eles. 22
23 XML O XML (extended Markup Language) é uma linguagem de marcação recomendada pelo W3C (World Web Consortium) e tem como objetivo a descrição de qualquer tipo de dados. Ele é utilizado como uma forma padrão para troca de informações entre sistemas ou até mesmo para armazenamento dos mesmos. Abaixo, podemos ver a estrutura de um documento XML: <cliente> <id>10</id> <nome>alan Turing</nome> <nascimento>23/06/1912</nascimento> <profissao>matemático</profissao> <endereco> <cidade>manchester</cidade> <pais>inglaterra</pais> </endereco> </cliente> Note que a marcação XML é baseada em um formato hierárquico, o que permite que possamos trabalhar de uma forma muito semelhante a que trabalhamos com objetos em Java. Um dos inconvenientes encontrados no XML é sua verbosidade. Perceba que para representação da informação, precisamos adicionar várias tags, o que as vezes pode gerar um overhead desnecessário. Baseado nisso, podemos utilizar uma solução mais enxuta, que iremos discutir a seguir. JSON O JSON (JavaScript Object Notation) surgiu como uma alternativa para representação de dados de uma forma mais simples e leve. 23
24 Como você deve ter percebido, JSON está relacionado à linguagem JavaScript, porém, esse formato de dados pode ser utilizado independente da tecnologia que você estiver usando. Veja abaixo um exemplo: { } "id": 10, "nome": "Alan Turing", "nascimento": "23/06/1912", "profissao": "Matemático", "endereco": { "cidade": "Manchester", "pais": "Inglaterra" } Perceba que os dados descritos nesse JSON são os mesmos que nós discutimos anteriormente quando falávamos sobre o XML. Note que a representação é muito mais simples. Dentre algumas características que o JSON possui, vale apena citar: Leitura simplificada Analisador mais simples Suporte de vários frameworks atuais (principalmente frameworks JavaScript) Tamanho reduzido Por esses e mais vários outros fatores, o JSON está cada dia mais disseminado na comunidade. De forma resumida, perceba que tanto XML quanto JSON, são formatos que utilizamos para descrever os dados de nossas aplicações, e que para cada cenário devemos verificar qual se encaixa de forma mais adequada. Principalmente pela sua simplicidade, o JSON vem ganhando mais seguidores. 24
25 3.3. Métodos A RFC especifica um conjunto de 8 métodos os quais podemos utilizar para a criação de uma API RESTful. Esse conjunto de métodos possui a semântica de operações possíveis de serem efetuadas sob um determinado recurso. Dentre esses 8 métodos, abaixo segue um detalhamento dos 4 mais conhecidos. GET O método GET é utilizado quando existe a necessidade de se obter um recurso. Ele é considerado idempotente, ou seja, independente da quantidade de vezes que é executado sob um recurso, o resultado sempre será o mesmo. Exemplo: GET /cliente/1 HTTP/1.1 Essa chamada irá retornar uma representação para o recurso /cliente/1. POST Utilizado para a criação de um recurso a partir do uso de uma representação. Exemplo: POST /cliente HTTP/1.1 <Cliente> <Nome>João da Silva</Nome>... </Cliente> PUT O método PUT é utilizado como forma de atualizar um determinado recurso. Em alguns cenários muitos específicos, ele também pode ser utilizado como forma de criação, por exemplo quando o cliente tem a liberdade de decidir a URI a ser utilizada
26 DELETE O delete tem como finalidade a remoção de um determinado recurso. Exemplo: DELETE /cliente/1 HTTP/1.1 Apesar de aparentemente os métodos disponibilizarem uma interface CRUD (Create, Read, Update e Delete) para manipulação de recursos, alguns autores não concordam muito com esse ponto de vista e defendem a ideia que esses métodos podem possuir também uma outra representação semântica um pouco mais abstrata. Para tornar nossa vida um pouco mais simples, o Spring nos ajuda a desenvolver essas operações de forma bem tranquila. Vamos dar uma olhada em como isso pode ser = "/{id}", method = RequestMethod.DELETE, produces = "application/json") public void excluir(@pathvariable("id") Integer id) { System.out.println("Excluindo o cliente..."); } Se compararmos o código acima com o exemplo demonstrado na sessão sobre recursos, vamos perceber que pouca coisa precisou ser alterada. Basicamente informamos ao Spring, por intermédio do atributo method, qual operação HTTP queremos permitir para executar a exclusão de um determinado recurso. Desta forma, toda requisição DELETE HTTP que chegar ao servidor será encaminhada ao método excluir. Além dos métodos, ao se processar uma determinada requisição, o servidor deve retornar uma resposta adequada para cada situação. Veja abaixo um resumo dos tipos de retornos suportados pelo HTTP. 1xx - Informações 2xx - Sucesso 3xx - Redirecionamento 4xx - Erro no cliente 5xx - Erro no servidor 26
27 Para cada um dos tipos acima, existem códigos específicos que podem ser aplicados em cada uma das situações encontradas na manipulação de recursos. O Spring nos fornece uma série de medidas para trabalharmos de forma adequada o código de retorno. Uma dessas formas é a criação de uma RuntimeException, informando que tipo de código ela representa através de uma anotação. Veja um = HttpStatus.NOT_FOUND) public class ResourceNotFoundException extends RuntimeException { } Perceba a presença da anotação ResponseStatus. Ela nos permite informar qual o tipo de código deve ser enviado caso essa exceção seja lançada. Nesse caso, um código 404 (Not Found) será retornado, informando que o recurso solicitado não foi encontrado. Você deve estar perguntando a forma na qual devemos lançar essa exceção. Então veja um código de exemplo = "/{id}", method = RequestMethod.GET, produces = "application/json") public ClienteRepresentation buscar(httpservletresponse Integer id) { System.out.println("Cliente não encontrado..."); throw new ResourceNotFoundException(); } Perceba que a utilização da exceção funciona da mesma forma que você já deve estar habituado a trabalhar. Apesar de termos utilizado códigos bem simples, meu intuito aqui é lhe demonstrar que é necessária pouca codificação para o desenvolvimento de um Web Service RESTful. Obviamente, existem inúmeras outras possibilidades, mas você já deve estar começando a visualizar o caminho a ser seguido. Além dos itens que discutimos até aqui, o HTTP possui suporte a diversos outros recursos que podem ser muito úteis na modelagem de uma API RESTful. Dentre eles, pode-se citar web linking, negociação de conteúdo, queries, caching, 27
28 requisições condicionais e segurança. Com o Spring podemos trabalhar com todas essas características. Apesar de estarmos focados na implementação do Spring, outros inúmeros frameworks podem ser utilizados. Se você já trabalha com Java EE e gostaria de seguir essa linha, você pode também criar seu Web Service usando a especificação JAX-RS. Ela possui basicamente as mesmas funcionalidades que encontramos no Spring, deixando a desejar apenas em pouquíssimos aspectos. 28
29 Capítulo 4 REST versus SOAP Agora que você já deve estar um pouco familiarizado com REST, eu quero te mostrar algumas discussões que estão sempre presentes no dia a dia de desenvolvedores. Talvez você já tenha desenvolvido ou pelo menos tenha ouvido falar em Web Services SOAP, e sempre há uma discussão sobre qual é a melhor abordagem (REST ou SOAP). De um lado os eternos defensores do SOAP (Simple Object Access Protocol) e do outro os amantes do REST. Diante disso, como escolher entre esses dois protocolos? A verdade é que essa comparação, muitas vezes, é feita de forma bastante equivocada, visto que REST, como discutido anteriormente, é um modelo arquitetural e apenas SOAP, de fato, é um protocolo. Por que então existe essa confusão? Muitos sistemas, na verdade, são modelados em um formato conhecido como POX (Plain Old XML), que basicamente consiste na passagem de uma mensagem XML utilizando como transporte o protocolo HTTP. Esse modelo é baseado em uma arquitetura totalmente RPC (Remote Procedure Call) e muito pouco tem de ligação com REST, retirando talvez o fato das duas abordagens serem cliente-servidor. 29
30 A confusão é ainda maior quando o formato da mensagem utiliza JSON. Nesse caso, temos um mesmo modelo arquitetural (RPC), usando apenas um formato de mensagem diferente. Talvez agora você esteja com dúvidas sobre o que é esse tal de RPC. O RPC é um modelo que permite que façamos a disponibilização de métodos para execução de forma remota. Imagine por exemplo, uma classe Java e seus diversos métodos, o RPC é um modelo que visa a disponibilização desses métodos para execução de forma remota (a partir de outro computador) 4. O SOAP é baseado nesse formato, ou seja, ele expõe uma série de métodos Java (ou outra linguagem), para que eles possam ser executados sob mensagens em formato XML. Diante disso, é necessário ficar claro que a escolha entre REST e SOAP vai muito além do formato de mensagens que são trocadas entre sistemas. Essas abordagens devem ser elevadas a um patamar de modelo arquitetural. É necessário a utilização de um modelo com as características providas por REST? O modelo RPC, implementado pelo SOAP e enriquecido com uma série de outras especificações conhecidas como WS-*, é o mais adequado? O que deve ser levado em consideração são as características do sistema a ser construído. A verdade é que o modelo REST se encaixa adequadamente em muitos cenários e deve ser sempre levado em consideração. Lembre-se apenas que não existe um modelo One size fits all, ou seja, REST ou SOAP não é a bala de prata para a resolução de todos os problemas. Muito dessa confusão se dá pelo fato de APIs ditas como RESTful receberem esse título sem nenhuma credibilidade, ou seja, elas tem muito poucas características necessárias para serem realmente RESTful. 4. Sistemas Distribuídos, princípios e paradigmas. Andrew S. Tanenbaum 30
31 Com o intuito de desmistificar um pouco dessa confusão, vamos discutir sobre o Modelo de Maturidade Richardson 5 no próximo capítulo, que tem como propósito mapear em que nível uma API se apresenta e se de fato ela realmente pode ser considerada RESTful
32 Capítulo 5 Modelo de maturidade Richardson Apesar de Roy Fielding deixar bastante claro que para uma API ser considerada RESTful ela precisa obrigatoriamente seguir todas as constraints definidas em seu trabalho 6, e o mais importante, fazer uso de hypermedia, na prática, muitas vezes precisamos de uma abordagem um pouco mais simples. Entusiastas conhecidos como RESTfarians, consideram inapropriado a nomeação de uma API RESTful se ela realmente não segue todas as constraints definadas por Fielding. Apesar de tudo isso, o mercado tem uma outra realidade, e com o intuito de mapear e clarear os pensamentos, um modelo de maturidade foi criado. O modelo proposto por Leonard Richardson 7 possui basicamente 4 níveis e tenta mapear as características de APIs que podem ser encontradas espalhadas hoje em sistemas de todo o mundo. Os níveis 0, 1 e 2 talvez sejam mais familiares pra você, e de fato são mais fáceis de implementar, porém, deve ficar claro pra você que os mesmos não são considerados RESTful. Na figura abaixo podemos ver quais são esses níveis:
33 Modelo de maturidade Richardson Fonte: Nível 0 - POX Você certamente já deve ter desenvolvido ou visto em algum lugar uma API que segue esse modelo de design. Apesar de ser o nível mais distante do que de fato REST propõe, muitas APIs ditas como RESTful se encontram neste nível de maturidade. Neste cenário, o protocolo HTTP é utilizado apenas como mecanismo de transporte e o que se vê é um modelo arquitetural fortemente baseado em RPC. Neste nível, as mensagens podem ser serializadas em formatos como XML, JSON ou outros. É importante lembrar, como dito anteriormente, que não é o formato da mensagem que define ou não um sistema REST. Veja abaixo um exemplo de API em nível 0: POST /salvarcliente HTTP/1.1 <Cliente> <Nome>João da Silva</Nome>... </Cliente> Apesar da utilização aparentemente correta do verbo POST HTTP na criação de um recurso, a URI não está modelada da forma correta. Como já apresentado, 33
34 URIs devem ser modeladas com o uso de substantivos. Veja abaixo uma tabela com URIs mapeadas no formato RPC e no formato REST. RPC (POX) Verbo HTTP URI Ação GET /buscarcliente/1 Visualizar POST /salvarcliente Criar POST /alterarcliente/1 Alterar GET/POST /deletarcliente/1 Remover REST Verbo HTTP URI Ação GET /cliente/1 Visualizar POST /cliente Criar PUT /cliente/1 Alterar DELETE /cliente/1 Remover Nessas tabelas conseguimos visualizar a diferença na modelagem dos recursos e como os verbos HTTP devem ser utilizados de forma correta. Um outro problema constantemente encontrado, é a manipulação incorreta dos códigos de resposta do HTTP. Códigos e mensagens de erros são frequentemente manipuladas nas mensagens geradas pela aplicação, o que impede que elementos de gateway e proxy trabalhem de forma adequada. Veja um exemplo: GET /buscarcliente/1 HTTP/1.1 HTTP/ OK <buscarcliente> 34
35 <status>cliente NÃO ENCONTRADO</status> <codigo>404</codigo> <buscarcliente> Apesar da mensagem sugerir que o cliente solicitado não foi encontrado, a resposta HTTP apresenta uma informação totalmente diferente (200 OK), ou seja, existe uma diferença semântica entre o procolo HTTP e a representação gerada pela aplicação Nível 1 - Recursos Modelos como o POX basicamente expõem funcionalidades a partir de métodos remotos (RPC). Esse modelo muitas vezes é considerado um ponto forte de geração de acoplamento entre clientes e servidores, visto que o cliente deve conhecer previamente a funcionalidade de cada um destes métodos e saber corretamente quando invocá-los. Um primeiro passo em direção a REST é a modelagem adequada de recursos e utilização dos mesmos para interação com uma API. Um exemplo de chamada adequada nesse nível de maturidade pode ser: POST /cliente HTTP/1.1 <Cliente> <Nome>João da Silva</Nome>... </Cliente> Este código é muito semelhante ao demonstrado na sessão anterior, porem é importante notar a modelagem correta do recurso Cliente. Modelando corretamente os recursos, precisamos usar os métodos HTTP da forma certa, para que a gente possa criar todas as interações necessárias sob um recurso. É o que vamos discutir na próxima sessão. 35
36 5.3. Nível 2 - Verbos HTTP Nesse nível, o HTTP deixa de exercer um papel apenas de transporte e passa a exercer um papel semântico na API, ou seja, seus verbos passam a ser utilizados com o propósito no qual foram criados. A utilização do métodos mais conhecidos (GET, POST, PUT e DELETE), bem como a tratativa correta dos códigos de resposta, permitem a modelagem e interação com os recursos presentes em uma API. Considerando o recurso cliente dos exemplos anteriores, abaixo segue a modelagem de uma API seguindo o nível 3 de maturidade. Criando um cliente: POST /cliente HTTP/1.1 <Cliente> <Nome>João da Silva</Nome>... </Cliente> Você deve estar pensando: A mensagem acima não é igual a encontrada na sessão anterior? Sendo assim, qual a diferença? Apesar da mensagem de requisição seguir o modelo apresentado anteriormente, o servidor deverá também agora retornar uma mensagem que reflete o uso adequado do protocolo HTTP, como segue abaixo: HTTP/ Created Location: /cliente/1 É importante notar 2 aspectos nessa resposta: O primeiro é a utilização correta da resposta 201 Created. Como foi solicitado a criação de um recurso, nada mais adequado que uma resposta que informe que o recuso foi criado com sucesso. Além disso, um importante aspecto é a presença do header Location. Esse header informa em qual endereço o recurso criado se encontra disponível. Com o endereço fornecido no header Location (/cliente/1), nós podemos agora fazer a busca por esse recurso: 36
37 GET /cliente/1 HTTP/1.1 HTTP/ OK <Cliente> <Id>1</Id> <Nome>João da Silva</Nome>... </Cliente> Com o intuito de buscar o recurso /cliente/1, foi utilizado o verbo mais adequado (GET) e uma resposta 200 OK informa que o recurso foi encontrado com sucesso e o mesmo pode ser obtido no corpo da mensagem. Caso seja necessário a remoção desse recurso, você pode utilizar o método DELETE, como mostrado abaixo: DELETE /cliente/1 HTTP/1.1 Ao receber essa mensagem, o servidor irá prosseguir com o processamento e retornar a mensagem mais adequada Nível 3 - HATEOAS Este nível é certamente a maior dúvida quando se fala sobre REST. Existe uma série de perguntas sobre o que realmente significa HATEOAS (Hypermedia as the Engine of Application State) e qual o papel disso em uma API. Em seu blog pessoal, Fielding deixa muito claro que APIs que não utilizam HATEOAS não podem ser consideradas RESTful, mesmo assim, você vai encontrar muitos conteúdos sobre REST que nem ao menos cita essa característica. Apesar de aparentemente ser algo não muito familiar, HATEOAS é um conceito presente no dia a dia de todos os usuários da Web. Ele tem como elemento principal uma representação hypermedia, que permite um documento descrever seu estado atual e quais os seus relacionamentos com outros futuros estados. A figura abaixo nos ajuda a entender um pouco melhor o que isso significa. 37
38 Perceba que a figura nos mostra uma série de estados e que a ligação entre os mesmos se dá a partir de uma URI. O termo estado é utilizado para denominar cada representação que o servidor responde quando um recurso é solicitado (ex: uma página HTML). A imagem pode ser traduzida em um código HTML (Hypermedia Text Markup Language), para que fique ainda mais claro. Por exemplo, veja como seria o conteúdo de index.html: <html> <body> <a href="produtos.html">produtos</a> <a href="clientes.html">clientes</a> <a href="contato.html">contato</a> <a href="carrinho.html">carrinho</a> </body> </html> No código HTML acima, podemos notar a presença da tag <a>, que diz ao cliente HTML (normalmente um browser) que ele deve executar um GET sob cada um dos recursos contidos no atributo href. 38
39 Como eu posso garantir que sempre que uma tag <a> aparecer, o browser irá fazer um GET? Isso se dá pelo fato da especificação do HTML nos dizer que toda vez que uma tag <a> estiver presente, uma mensagem GET deve ser enviada à URI descrita no atributo href, ou seja, existe um pré-contrato entre browsers e servidores. Começamos então a entender um pouco melhor o significado de HATEOAS. Como o próprio nome sugere, a representação hypermedia trabalha como um motor de estado, permitindo que clientes naveguem nos mesmos. Cada estado é um documento (uma página HTML) e possui referências para futuros estados (a partir de links). Dito tudo isso, agora conseguimos entender de forma mais clara a própria origem do nome Web (no português, teia ). O mesmo se dá pelo fato de links interligarem um conjunto de recursos, formando assim uma enorme teia. Resumindo, podemos ver que o HTML é uma linguagem que permite que aplicações sejam construídas seguindo o modelo HATEOAS. Porém, como deve ser feita a modelagem de uma API para que ela siga o mesmo formato? E qual o benefício dessa abordagem? Se analisarmos a forma na qual sistemas Web podem ser construídos ou remodelados, nós podemos perceber que isso se dá sem a necessidade de atualização nos clientes (browsers). O contrato inicialmente conhecido, a linguagem de hypermedia HTML, em conjunto com o protocolo HTTP, abstrai qualquer acoplamento direto entre o conteúdo e o que deve ser interpretado pelo navegador, ou seja, todos os dias são adicionadas, removidas e alteradas centenas de páginas Web sem que isso tenha impacto direto em cada um dos elementos envolvidos, como o browser, proxies, gateways, balanceadores de carga e etc. Considerando a mesma abordagem para APIs, isso significa que você pode criar APIs totalmente desacopladas e que podem evoluir sem a necessidade de atualizações do lado dos clientes. Você já se imaginou criando sistemas que podem evoluir sem que haja um impacto dentro de vários sistemas da organização? Já pensou em criar sistemas que possam atender milhares de usuários, assim como serviços que funcionam hoje na Internet? 39
40 Criar APIs RESTful significa criar APIs que seguem cada uma das constraints descritas nesse livro e suportar HATEOAS. Com isso, você terá a possibilidade de alcançar os benefícios que te mostrei, criando APIs realmente escaláveis, extensíveis e com todas as outras características que a Web possui. Criar APIs que seguem essa abordagem e programar clientes que usem deste benefício é um enorme desafio, visto que o modelo mental utilizado em aplicações atuais são fortemente baseadas no modelo RPC. Neste livro, não vou entrar em detalhes sobre como proceder com a criação de clientes de APIs RESTful, mas já deixe em mente que precisamos trabalhar uma forma de criar clientes que usufruam de todos esses benefícios. Para exemplificar, veja abaixo uma pequena representação de uma API que utiliza hypermedia: GET /cliente/1 HTTP/1.1 HTTP/ OK <Cliente> <Id>1</Id> <Nome>João da Silva</Nome> <link rel="deletar" href="/cliente/1" /> <link rel="notificar" href="/cliente/1/notificacao" /> </Cliente> No exemplo acima, podemos ver a chamada ao recurso /cliente/1. O retorno evidenciado demonstra a representação do estado e quais as possíveis ações a serem realizadas. É interessante notar que a URI para deletar e buscar o cliente, aparentemente são iguais (/cliente/1), porém, o atributo rel com o valor deletar, demonstra uma semântica diferente, neste caso, o cliente deve utilizar o método DELETE sob a URI. Como discutimos, o cliente da API deverá entender o significado dos relacionamentos deletar e notificar para que ele consiga de fato consumir de forma adequada esses links. 40
41 A modelagem de uma API baseada em hypermedia passa pelo processo de definição sobre qual a melhor linguagem utilizada. Cada API possui características isoladas e precisa ser pensada de forma particular, porém, alguns padrões podem ser utilizados, como o próprio HTML, ATOM PUB ou até mesmo a criação de uma linguagem própria. Se compararmos a representação do exemplo anterior com um modelo RPC, podemos verificar que conseguimos ir navegando pela API e ela vai nos mostrando quais as possíveis opções, diferente de um sistema RPC como SOAP, que você deve conhecer previamente todas as operações e qual o momento correto de invocar cada uma delas. De fato, o entendimento e a criação de APIs que seguem esse modelo não é uma tarefa tão trivial, e sugiro que você continue seus estudos a respeito do tema. Acompanhe a AlgaWorks por e redes sociais, porque ainda vamos falar muito sobre esse assunto. 41
42 Capítulo 6 Conclusão Chegamos no final do livreto e estou muito feliz por você ter me acompanhado! Talvez você tenha se surpreendido com uma série de coisas que você aprendeu por aqui. Realmente, existem vários materiais na Web que não condizem ou simplificam muito toda a história por trás do REST. Por isso, é importante você selecionar os materiais confiáveis. Minha ideia foi realmente abrir um pouco das cortinas e lhe mostrar o que acontece de fato por trás dos palcos deste vasto mundo de APIs RESTful. De forma resumida, você aprendeu aqui: Como o mundo vem mudando e o impacto disso no nosso trabalho Como a Web pode nos ajudar a construir sistemas cada vez melhores Características de aplicações Web Simples Extensível Escalável Etc Diferenças entre REST e RESTful O que de fato difere uma API RESTful de outras APIs Diferença entre as abordagens SOAP e REST E muito mais 42
43 6.1. Próximos passos Agora que você já sabe o que é REST, eu recomendo que você aprenda na prática como implementar Web Services RESTful com Spring (Java). Eu desenvolvi um workshop online com videoaulas sobre esse assunto, e você pode continuar seus estudos agora mesmo. Acesse:
44
45
46
Arquitecturas de Software Enunciado de Projecto 2007 2008
UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO Arquitecturas de Software Enunciado de Projecto 2007 2008 1 Introdução Na primeira metade da década de 90 começaram a ser desenvolvidas as primeiras
CRIAÇÃO DE TABELAS NO ACCESS. Criação de Tabelas no Access
CRIAÇÃO DE TABELAS NO ACCESS Criação de Tabelas no Access Sumário Conceitos / Autores chave... 3 1. Introdução... 4 2. Criação de um Banco de Dados... 4 3. Criação de Tabelas... 6 4. Vinculação de tabelas...
Cadeira de Tecnologias de Informação. Ano lectivo 2009/2010. Sites dinâmicos. Com Expression Web TI2009/10 EWD_1. Filipa Pires da Silva (2009)
Cadeira de Tecnologias de Informação Ano lectivo 2009/2010 Sites dinâmicos Com Expression Web TI2009/10 EWD_1 .ASPX vs.html HTML: HTML é uma linguagem para descrever páginas web HTML significa Hyper Text
Parabéns por você ter chegado até aqui isso mostra o seu real interesse em aprender como se ganhar dinheiro na internet logo abaixo te darei algumas
Parabéns por você ter chegado até aqui isso mostra o seu real interesse em aprender como se ganhar dinheiro na internet logo abaixo te darei algumas dicas! Dica 1 para Ganhar Dinheiro na Internet Com Crie
Engenharia de Software II
Engenharia de Software II Aula 26 http://www.ic.uff.br/~bianca/engsoft2/ Aula 26-21/07/2006 1 Ementa Processos de desenvolvimento de software Estratégias e técnicas de teste de software Métricas para software
Configuração para Uso do Tablet no GigaChef e Outros Dispositivos
Configuração para Uso do Tablet no GigaChef e Outros Dispositivos Birigui SP Setembro - 2013 1. Configurando o Ambiente. Este documento mostra como configurar o ambiente do GigaChef para usar o Tablet
Introdução à orientação a objetos
Universidade Federal de Juiz de Fora PET Elétrica Introdução à orientação a objetos Tutor: Francisco José Gomes Aluno: João Tito Almeida Vianna 18/05/2013 1 Programação Estruturada x Orientação a objetos
LEUCOTRON EQUIPAMENTOS LTDA ROTEIRO DE INTERLIGAÇÃO SIP ACTIVE IP COM REGISTRO
LEUCOTRON EQUIPAMENTOS LTDA PÓS-VENDAS LEUCOTRON ROTEIRO DE INTERLIGAÇÃO SIP ACTIVE IP COM REGISTRO SANTA RITA DO SAPUCAÍ MINAS GERAIS 2012 PÓS VENDAS LEUCOTRON ROTEIRO DE INTERLIGAÇÃO SIP ACTIVE IP COM
Implementação de um serviço de correio eletrônico na Intranet do Pólo de Touros utilizando o ambiente SQUIRELMAIL e POSTFIX em um Servidor Linux
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ - EAJ CURSO TÉCNICO DE INFORMÁTICA Projeto das Disciplinas de Sistemas Operacionais de Redes e Projeto de Redes Implementação de um
SISTEMA OPERACIONAL - ANDROID
Manual do Usuário SISTEMA OPERACIONAL - ANDROID 1 1 Índice 1 Índice... 2 2 Introdução Protegido... 3 3 Instalação do APLICATIVO DOS PAIS... 4 3.1 Local de instalação do Filho Protegido... 5 3.2 Tela de
Tutorial do aluno Ambiente Virtual de Aprendizagem (AVA) Rede e-tec Brasil
Instituto Federal de Educação, Ciência e Tecnologia do Pará Tutorial do aluno Ambiente Virtual de Aprendizagem (AVA) Rede e-tec Brasil 2015 I F P A 1 0 5 a n o s SUMÁRIO APRESENTAÇÃO... 2 1 CALENDÁRIO
O que é um banco de dados? Banco de Dados. Banco de dados
COLÉGIO EST. JOÃO MANOEL MONDRONE - ENS. FUNDAMENTAL, MÉDIO, PROFISSIONAL E NORMAL Rua Mato Grosso n.2233 - Fone/Fax (045) 3264-1749-3264-1507 Banco de Dados O que é um banco de dados? Um conjunto de informações
Fundamentos de Teste de Software
Núcleo de Excelência em Testes de Sistemas Fundamentos de Teste de Software Módulo 1- Visão Geral de Testes de Software Aula 2 Estrutura para o Teste de Software SUMÁRIO 1. Introdução... 3 2. Vertentes
Indíce. Indice... 1. 1) Identificar a sua persona (Cliente ideal)...erro! Indicador não definido. Exemplo... 4
Indíce Sumário Indice... 1 1) Identificar a sua persona (Cliente ideal)...erro! Indicador não definido. Exemplo... 4 2) Gerar relacionamento / lista de emails... 5 Exemplo... 6 3)Faça a oferta... 7 Exemplo...
Aula 11: Desvios e Laços
Aula 11: Desvios e Laços Nesta aula explicaremos alguns comandos que podem alterar o fluxo dos seus programas em JavaScript. Você aprenderá a estrutura dos comandos de desvios e laços. Entenderá como funcionam
Análise de Requisitos
Análise de Requisitos Análise de Requisitos O tratamento da informação é um requisito que fundamenta o processo de desenvolvimento de software antes da solução de tecnologia a ser aplicada. Cada projeto
E-Learning Uma estratégia para a qualidade do ensino/aprendizagem. Ensino a Distância
E-Learning Uma estratégia para a qualidade do ensino/aprendizagem (num contexto académico) Vou dividir a minha apresentação sobre... em 3 partes: Conceito de e-learning Apresentar a intranet dos alunos
Banco de Dados I. Prof. Edson Thizon [email protected]
Banco de Dados I Prof. Edson Thizon [email protected] Conceitos Dados Fatos conhecidos que podem ser registrados e que possuem significado implícito Banco de dados (BD) Conjunto de dados interrelacionados
FACULDADE MULTIVIX CURSO DE ENGENHARIA DE PRODUÇÃO 2º PERÍODO MARIANA DE OLIVEIRA BERGAMIN MONIQUE MATIELLO GOMES THANIELE ALMEIDA ALVES
FACULDADE MULTIVIX CURSO DE ENGENHARIA DE PRODUÇÃO 2º PERÍODO MARIANA DE OLIVEIRA BERGAMIN MONIQUE MATIELLO GOMES THANIELE ALMEIDA ALVES COMPUTAÇÃO EM NUVEM CACHOEIRO DE ITAPEMIRIM 2015 MARIANA DE OLIVEIRA
Manual Mobuss Construção - Móvel
Manual Mobuss Construção - Móvel VISTORIA & ENTREGA - MÓVEL Versão 1.0 Data 22/04/2014 Mobuss Construção - Vistoria & Entrega Documento: v1.0 Blumenau SC 2 Histórico de Revisão Versão Data Descrição 1.0
Sumário. CEAD - FACEL Manual do Aluno, 02
Manual CEAD - FACEL Sumário 03... Acesso ao Ambiente Virtual de Aprendizagem Atualizando seu perfil Esqueceu sua senha de acesso 09... O meu AVA Conhecendo meu AVA Navegando na disciplina Barra de navegação
Manual Geral de Aplicação Universal Entrada 2008
Universal Entrada 2008 Programa Programa - Manual do Aplicador Teste Universal - 2008 Teste Cognitivo Leitura/Escrita e Matemática Caro alfabetizador(a): Se você está recebendo este material, é porque
ÁREA DO PROFESSOR (TUTOR)
ÁREA DO PROFESSOR (TUTOR) O MOODLE (Modular Object Oriented Dynamic Learning Environment) é um Ambiente Virtual de Ensino-Aprendizagem (AVEA) de código aberto, livre e gratuito que se mantém em desenvolvimento
Gerenciador de Ambiente Laboratorial - GAL Manual do Usuário Módulo Controle de Qualidade Analítico
Ministério da Saúde Secretaria Executiva Departamento de Informática do SUS DATASUS Gerenciador de Ambiente Laboratorial GAL Manual do Usuário Módulo Laboratório Manual de Operação_Módulo Laboratório_Controle
www.sysdevsolutions.com Driver Next Versão 1.0 de 07-03-2011 Português
Driver Next Versão 1.0 de 07-03-2011 Português Índice Configuração dos documentos no Backofficce... 3 O Driver ERP Next... 6 Configurações principais... 6 Configurações do vendedor... 7 Configurações do
Métricas de Software
Métricas de Software Plácido Antônio de Souza Neto 1 1 Gerência Educacional de Tecnologia da Informação Centro Federal de Educação Tecnologia do Rio Grande do Norte 2006.1 - Planejamento e Gerência de
LOGOTIPO OU LOGOMARCA?
E-book para Empreendedores LOGOTIPO OU LOGOMARCA? Dicas para criar um( a ) logo de sucesso www.logovia.com.br A equipe do Logovia deseja que a leitura deste e-book seja agravável e que expanda seu entendimento
Para usar com Impressoras multifuncionais (MFPs) ativadas para a Tecnologia Xerox ConnectKey
Aplicativo Xerox App Gallery Guia de Utilização Rápida 702P03997 Para usar com Impressoras multifuncionais (MFPs) ativadas para a Tecnologia Xerox ConnectKey Use o Aplicativo Xerox App Gallery para localizar
Apontamento técnico No. 5, Fevereiro de 2014 Como pedir apoio através do Ajuda Online do CAICC
Apontamento técnico No. 5, Fevereiro de 2014 Como pedir apoio através do Ajuda Online do CAICC Sumário Enquadramento... 1 1. Introdução... 1 1º Passo: Como aceder o Ajuda Online?... 2 2º Passo: Página
ENGENHARIA DE SOFTWARE
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE Curso Técnico em Informática : ENGENHARIA DE SOFTWARE Prof.: Clayton Maciel Costa [email protected] Um conjunto estruturado
Análise e Projeto Orientado a Objetos. Nazareno Andrade Baseado no material dos profs. Hyggo Almeida e Jacques Sauvé
Análise e Projeto Orientado a Objetos Nazareno Andrade Baseado no material dos profs. Hyggo Almeida e Jacques Sauvé O que veremos hoje? Análise e Projeto Definição Comparação Análise e Projeto OO Definição
OI CLOUD SEJA BEM-VINDO!
OI CLOUD SEJA BEM-VINDO! O QUE É O OI CLOUD? O Oi Cloud é um serviço de armazenamento, compartilhamento e sincronização de arquivos. Esses arquivos ficarão acessíveis a partir de qualquer dispositivo,
Drone2Map: o software que transforma imagens de drones em mapas 2D e 3D
Drone2Map: o software que transforma imagens de drones em mapas 2D e 3D Por Régis Soares Os veículos aéreos não tripulados são novidade no Brasil e seguem cada vez mais em ascensão, mas esse nome ainda
Auxílio Estudantil Fase de análise
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DIRETORIA DE GESTÃO DE TECNOLOGIA DA INFORMAÇÃO ASSESSORIA DE AUXÍLIO ESTUDANTIL PR UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ Auxílio Estudantil Fase de análise
Treinamento sobre Progress Report.
Treinamento sobre Progress Report. Objetivo O foco aqui é trabalhar o desenvolvimento pessoal de cada aluno. O instrutor irá analisar cada um e pensar em suas dificuldades e barreiras de aprendizado e,
Programação para Web HTML - Parte 2
Programação para Web HTML - Parte 2 Professor: Harlley Lima E-mail: [email protected] Departamento de Computação Centro Federal de Educação Tecnológica de Minas Gerais Belo Horizonte, 2 de março
Dicas de Segurança sobre Virus
Dicas de Segurança sobre Virus Utilize uma boa aplicação antivírus e actualizea regularmente Comprove que o seu programa antivírus possui os seguintes serviços: suporte técnico, resposta de emergência
DIMENSÕES DE PESQUISA EM ENGENHARIA DE SOFTWARE
ESPECIAL Engenharia de Software DIMENSÕES DE PESQUISA EM ENGENHARIA DE SOFTWARE por Paulo Borba DECISÕES IMPORTANTES A SEREM TOMADAS NOS PROJETOS E NA CARREIRA DE UM PESQUISADOR EM ENGENHARIA DE SOFTWARE.
Modelagem De Sistemas
Modelagem De Sistemas UNIP Tatuapé - SP Aplicações em Linguagem de Programação Prof.Marcelo Nogueira Uma empresa de software de sucesso é aquela que consistentemente produz software de qualidade que vai
Treinamento de e-commerce
Treinamento de e-commerce Bem vindo ao treinamento de e commerce mais rápido e direto de todos! Utilize este documento para se orientar sempre que necessário e não se preocupe, em caso de necessidade,
2ª edição. Daniel Adorno Gomes. Novatec
2ª edição Daniel Adorno Gomes Novatec Copyright 2010, 2014 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial,
Módulo e-rede Magento v1.0. Manual de. Instalação do Módulo. estamos todos ligados
Módulo e-rede Magento v1.0 Manual de Instalação do Módulo estamos todos ligados 01 02 03 04 Introdução 3 Versão 3 Requerimentos 3 Manual de instalação 4 05 06 4.1 Instruções iniciais 4 4.2 Instalação e
AULA 1 INTRODUÇÃO A BANCO DE DADOS E VISÃO GERAL DO SQL CONCEITUANDO BANCO DE DADOS MODELO RELACIONAL
BANCO DE DADOS GERENCIAL 1 AULA 1 INTRODUÇÃO A BANCO DE DADOS E VISÃO GERAL DO SQL CONCEITUANDO BANCO DE DADOS Um banco de dados é uma coleção de dados (ou informações) organizadas de forma lógica, e que
Metodologias de PETI. Prof. Marlon Marcon
Metodologias de PETI Prof. Marlon Marcon PETI O PETI é composto de: Planejamento Estratégico da organização, que combina os objetivos e recursos da organização com seus mercados em processo de transformação
CONSELHO REGIONAL DE ENFERMAGEM DE SÃO PAULO. Resposta aos questionamentos efetuados pela empresa TOTVS, temos a informar conforme segue:
Resposta aos questionamentos efetuados pela empresa TOTVS, temos a informar conforme segue: Questionamento 1: Tomando como base a definição de que os Conselhos o Federal e os Regionais foram criados por
Os salários de 15 áreas de TI nas cinco regiões do Brasil
Os salários de 15 áreas de TI nas cinco regiões do Brasil Entre 2011 e 2012, os salários na área de tecnologia da informação (TI) cresceram em média 10,78% um número animador, que pode motivar jovens estudantes
Software PHC com MapPoint 2007
Software PHC com MapPoint 2007 Descritivo completo A integração entre o Software PHC e o Microsoft MapPoint permite a análise de informação geográfica (mapas, rotas e análise de dispersão), baseada em
Gestão Documental. Gestão Documental
Alcides Marques, 2007 Actualizado por Ricardo Matos em Junho de 2009 Neste capítulo pretende-se analisar a temática da, começando por apresentar um breve resumo dos conceitos subjacentes e apresentando
DOCUMENTO DE REQUISITO DE SOFTWARE
DOCUMENTO DE REQUISITO DE SOFTWARE PARTICIPANTES Belo Horizonte - 1
Experiência 04: Comandos para testes e identificação do computador na rede.
( ) Prova ( ) Prova Semestral ( ) Exercícios ( ) Prova Modular ( ) Segunda Chamada ( ) Exame Final ( ) Prática de Laboratório ( ) Aproveitamento Extraordinário de Estudos Nota: Disciplina: Turma: Aluno
Desenvolvimento de Software
PODER JUDICIÁRIO JUSTIÇA DO TRABALHO TRIBUNAL REGIONAL DO TRABALHO DA 15ª REGIÃO Secretaria de Tecnologia da Informação e Comunicações Total de Páginas:16 Versão: 1.0 Última Atualização: 26/07/2013 Índice
Objetivo do Portal da Gestão Escolar
Antes de Iniciar Ambiente de Produção: É o sistema que contem os dados reais e atuais, é nele que se trabalha no dia a dia. Neste ambiente deve-se evitar fazer testes e alterações de dados sem a certeza
SEO sem Limites - 3 Passos Básicos de SEO
SEO sem Limites - 3 Passos Básicos de SEO Por Paulo A. Corrêa - Primer Página 1 Obrigado! Por baixar meu E-book! Espero que esse conteúdo possa ser um divisor de águas na sua carreira no Marketing Digital!
MANUAL DO PUBLICADOR
MANUAL DO PUBLICADOR Brasília 2010/2013 1 SUMÁRIO 1 Introdução... 5 2 O Sistema... 5 2.1 Módulos do Sistema... 6 2.2 Perfis do Sistema... 6 2.2.1 Perfil Publicador... 7 3 Publicar Documentos - Publicador...
Treinando Tubarões. Fabiano Britto Co-Fundador da Ouro Moderno Professor de Cursos Avançados em Animação Pioneiro em Cursos de Desenvolvedor de Games
Treinando Tubarões Fabiano Britto Co-Fundador da Ouro Moderno Professor de Cursos Avançados em Animação Pioneiro em Cursos de Desenvolvedor de Games Treinamento A ideia Do atendimento ao fechamento Sugestão
NOVA VERSÃO SAFE DOC MANUAL
NOVA VERSÃO SAFE DOC MANUAL COMO ACESSAR O APLICATIVO SAFE DOC CAPTURE Acesse o aplicativo SAFE-DOC CAPTURE clicando no ícone na sua área de trabalho: SAFE-DOC Capture Digite o endereço do portal que é
2 Passos para Ganhar dinheiro com o Google Exatamente isso que você leu no texto acima! É possível ganhar dinheiro online utilizando uma ferramenta
Teste 2 Passos para Ganhar dinheiro com o Google Exatamente isso que você leu no texto acima! É possível ganhar dinheiro online utilizando uma ferramenta chamada google adsense. Se você ainda não conhece
CIBERESPAÇO E O ENSINO: ANÁLISE DAS REDES SOCIAIS NO ENSINO FUNDAMENTAL II NA ESCOLA ESTADUAL PROFESSOR VIANA
203 CIBERESPAÇO E O ENSINO: ANÁLISE DAS REDES SOCIAIS NO ENSINO FUNDAMENTAL II NA ESCOLA ESTADUAL PROFESSOR VIANA INTRODUÇÃO ¹ Elias Barbosa de Lima filho ² Dr. Flamarion Dutra Alves ¹ [email protected]
PODER JUDICIÁRIO JUSTIÇA DO TRABALHO CONSELHO SUPERIOR DA JUSTIÇA DO TRABALHO
CONSELHO SUPERIOR DA RELATÓRIO DE DIAGNÓSTICO DA QUALIDADE NO USO DO SISTEMA PROCESSO JUDICIAL ELETRÔNICO DA Fase 1 (magistrados e servidores da Justiça do Trabalho) Secretaria de Tecnologia da Informação
T.I. para o DealerSuite: Servidores Versão: 1.1
T.I. para o DealerSuite: Servidores Versão: 1.1 Lista de Figuras T.I. para o Dealer Suite: Servidores Figura 1 Tela Principal do ESXi...4 Figura 2 Tela VMware Player...5 Figura 3 Arquivo /etc/exports do
Aula 03. Processadores. Prof. Ricardo Palma
Aula 03 Processadores Prof. Ricardo Palma Definição O processador é a parte mais fundamental para o funcionamento de um computador. Processadores são circuitos digitais que realizam operações como: cópia
Introdução de XML. Dados da Web. Gerência de Dados da Web. A Web representa, nos dias de hoje, um repositório universal de dados, onde:
Dados da Web Introdução de XML Banco de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM
Como gerir um espaço de conversa (chat) ou uma vídeo-conferência e participar num fórum de debate (Google Hangouts)
Como gerir um espaço de conversa (chat) ou uma vídeo-conferência e participar num fórum de debate (Google Hangouts) Este módulo irá ensinar-lhe como gerir um espaço de conversa (chat) ou uma videoconferência
Programação Orientada a Objetos SANTOS, Rafael
Programação Orientada a Objetos SANTOS, Rafael É parte do software, e deve atender os requisitos do usuário Controla o hardware, incluindo periféricos de entrada e saída Usa um conjunto de comandos e regras:
MDS II Aula 04. Concepção Requisitos Diagrama de Casos de Uso (Use Cases)
MDS II Aula 04 Concepção Requisitos Diagrama de Casos de Uso (Use Cases) 55 DIAGRAMA DE CASOS DE USO BENEFÍCIOS DOS CASOS DE USO ILUSTRAR POR QUE O SISTEMA É NECESSÁRIO OS REQUISITOS DO SISTEMA SÃO COLOCADOS
Sistemas Distribuídos
Comunicação em Grupo Referência Sistemas operacionais modernos Andrew S. TANENBAUM Prentice-Hall, 1995 Seção 10.4 pág. 304-311 2 Comunicação em Grupo Suponha que se deseja um serviço de arquivos único
UTILIZAÇÃO DE RECURSOS AVANÇADOS DO EXCEL EM FINANÇAS (PARTE III): GERENCIAMENTO DE CENÁRIOS
UTILIZAÇÃO DE RECURSOS AVANÇADOS DO EXCEL EM FINANÇAS (PARTE III): GERENCIAMENTO DE CENÁRIOS! Criando cenários a partir do Solver! Planilha entregue para a resolução de exercícios! Como alterar rapidamente
Análise de Sistemas 3º Bimestre (material 2)
Análise de Sistemas 3º Bimestre (material 2) Professor: José Ronaldo Leles Júnior Turma: 2º ano do curso de Sistemas de Informação UEG Universidade Estadual de Goiás Campus Posse POO Paradigma Orientado
CASOS DE TESTE PALESTRANTE: MARCIA SILVA [email protected] WWW.EMERSONRIOS.ETI.BR
CASOS DE TESTE PALESTRANTE: MARCIA SILVA [email protected] WWW.EMERSONRIOS.ETI.BR CONCEITOS BÁSICOS - TESTES O que é Teste de Software? Teste é o processo de executar um programa com o objetivo
Programação WEB. Prof. André Gustavo Duarte de Almeida [email protected] www3.ifrn.edu.br/~andrealmeida. Aula II jquery UI
Prof. André Gustavo Duarte de Almeida [email protected] www3.ifrn.edu.br/~andrealmeida Aula II jquery UI Introdução O que é jquery UI? Biblioteca que fornece maior nível de abstração para interação
Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:
Introdução a Orientação a Objetos com Java Autor: Professor Victor Augusto Zago Menegusso. Orientação a Objetos É um paradigma de programação que define a estrutura de um programa baseado nos conceitos
Portal de Sistemas Integrados. Manual do Usuário. Versão: 1.0
Portal de Sistemas Integrados Manual do Usuário Versão: 1.0 Página: 1/33 Índice 1. Apresentação... 3 2. Descrição do Sistema... 3 3. Orientações Gerais ao Usuário...4 3.1. Senhas de Acesso... 4 4. Funcionalidades
APOSTILA DE INFORMÁTICA INTERNET E E-MAIL
APOSTILA DE INFORMÁTICA INTERNET E E-MAIL Profa Responsável Fabiana P. Masson Caravieri Colaboração Empresa Júnior da Fatec Jales Monitora: Ângela Lopes Manente SUMÁRIO 1. INTERNET... 3 2. ACESSANDO A
Manual SAGe Versão 1.2
Manual SAGe Versão 1.2 Equipe de Pesquisadores do Projeto Conteúdo 1. Introdução... 2 2. Criação da Equipe do Projeto (Proposta Inicial)... 3 2.1. Inclusão e configuração do Pesquisador Responsável (PR)...
UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO UNIVASF SECRETARIA DE TECNOLOGIA DA INFORMAÇÃO STI DEPARTAMENTO DE SISTEMAS DE INFORMAÇÕES
UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO UNIVASF SECRETARIA DE TECNOLOGIA DA INFORMAÇÃO STI DEPARTAMENTO DE SISTEMAS DE INFORMAÇÕES MANUAL DO USUÁRIO SISTEMA DE TRAMITAÇÃO DE DOCUMENTOS Versão 3.0
Vamos dar uma olhada nos Processos de Produção Musical mas, antes, começaremos com alguns Conceitos Básicos.
Vamos dar uma olhada nos Processos de Produção Musical mas, antes, começaremos com alguns Conceitos Básicos. O processo da produção musical tem sete pontos bem distintos. Antes de entender melhor os sete
MÓDULO 2 Topologias de Redes
MÓDULO 2 Topologias de Redes As redes de computadores de modo geral estão presentes em nosso dia adia, estamos tão acostumados a utilizá las que não nos damos conta da sofisticação e complexidade da estrutura,
OBJETIVO GERAL DA DISCIPLINA
BANCO DE DADOS Universidade do Estado de Santa Catarina Centro de Ciências Tecnológicas Departamento de Ciência da Computação Prof. Alexandre Veloso de Matos [email protected] OBJETIVO GERAL DA
CATÁLOGO DE APLICAÇÕES Rateio CC Contas a Pagar
CATÁLOGO DE APLICAÇÕES Rateio CC Contas a Pagar Objetivo do projeto Possibilitar fazer lançamentos no Contas a Pagar, rateando por várias contas e/ou vários centros de custos. Escopo Este projeto englobará
1 Visão Geral. 2 Instalação e Primeira Utilização. Manual de Instalação do Gold Pedido
Manual de Instalação do Gold Pedido 1 Visão Geral Programa completo para enviar pedidos e ficha cadastral de clientes pela internet sem usar fax e interurbano. Reduz a conta telefônica e tempo. Importa
LOGO DO WEBSITE DA FUTURA APP
LOGO DO WEBSITE DA FUTURA APP LexiZi é uma aplicação mobile e web que é simultaneamente uma ferramenta e um serviço. a) Ferramenta É uma ferramenta porque permite a criação de Notas em cada um dos artigos
HEMOVIDA (CICLO DO SANGUE - Gerenciamento de estoque para grandes eventos)
Ministério da Saúde Secretaria Executiva Departamento de Informática do SUS HEMOVIDA (CICLO DO SANGUE - Gerenciamento de estoque para grandes eventos) Manual do Usuário Versão 1.0 Fevereiro, 2014 Índice
Modelo Lógico: Tabelas, Chaves Primárias e Estrangeiras
Modelo Lógico: Tabelas, Chaves Primárias e Estrangeiras Apresentar a próxima etapa da modelagem de dados: o modelo lógico e os conceitos de tabelas, chaves primárias e estrangeiras e como o banco de dados
Sefaz Virtual Ambiente Nacional Projeto Nota Fiscal Eletrônica
Projeto Nota Fiscal Eletrônica Orientações de Utilização do Sefaz Virtual Ambiente Nacional para as Empresas Versão 1.0 Fevereiro 2008 1 Sumário: 1. Introdução... 3 2. O que é o Sefaz Virtual... 4 3. Benefícios
Google compra empresa de segurança VirusTotal
Google compra empresa de segurança VirusTotal A Google confirmou neste sábado (8) a aquisição da empresa VirusTotal, uma companhia ainda em fase inicial de trabalhos e com pouca experiência de mercado.
1.0 Informações de hardware
1.0 Informações de hardware 1.1 Botões e ligações 6 1 7 2 8 3 9 4 5 6 10 1 Ligar / Desligar 2 Conetor Micro USB 3 Botão Voltar 4 Conetor Mini HDMI 5 Microfone 6 Webcam 7 Entrada para fone de ouvido 8 Botão
Manual Instalação Web Services Client Web.NewHotel
Web.NewHotel Versão: 2008-07-10 Rev. 2008-12-04 Versão de WSServer: 2008.10.27.0 Versão de WSClient: 2008.11.03.0 Versão de NewHotel: 2008.09.13 Av. Almirante Gago Coutinho, 70 1700-031 Lisboa PORTUGAL
Gestão da Qualidade. Aula 13. Prof. Pablo
Gestão da Qualidade Aula 13 Prof. Pablo Proposito da Aula 1. Conhecer as normas da família ISO 9000. Família da norma ISO 9000 Família ISO 9000 As normas ISO da família 9000 formam um conjunto genérico
Como remover vírus do celular
Como remover vírus do celular Os usuários já estão acostumados a encontrar malwares no computador, mas na hora de perceber como remover vírus do celular, se complicam. E na medida em que se tornam mais
CATÁLOGO DE CUSTOMIZAÇÕES Conferência com Coletores (WEB)
CATÁLOGO DE CUSTOMIZAÇÕES Conferência com Coletores (WEB) Índice ÍNDICE... 2 CONSIDERAÇÕES INICIAIS... 3 DADOS DO PROJETO... 4 OBJETIVO(S) DO PROJETO... 4 ESCOPO... 4 CONFERÊNCIA DE ITENS... 4 PARAMETRIZAÇÃO
e Autorizador Odontológico
1 CONTROLE DE DOCUMENTO Revisor Versão Data Publicação Diego Ortiz Costa 1.0 08/08/2010 Diego Ortiz Costa 1.1 09/06/2011 Diego Ortiz Costa 1.2 07/07/2011 2 Sumário CONTROLE DE DOCUMENTO... 2 1. Informações
Profa. Cleide de Freitas. Unidade II PLANO DE NEGÓCIOS
Profa. Cleide de Freitas Unidade II PLANO DE NEGÓCIOS O que vimos na aula anterior Ideias e Oportunidades Oportunidades x Experiência de mercado O que é um plano de negócios? Identificação e análise de
Registro de Retenções Tributárias e Pagamentos
SISTEMA DE GESTÃO DE PRESTAÇÃO DE CONTAS (SiGPC) CONTAS ONLINE Registro de Retenções Tributárias e Pagamentos Atualização: 20/12/2012 A necessidade de registrar despesas em que há retenção tributária é
