Web das Coisas – WoT Software: APIs para IoT
WoT
● Um novo paradigma para desenvolvimento de
aplicações inspirado na ideia do IOT;
● Utiliza protocolos e padrões amplamente
aceitos na internet como HTTP e URI;
● O objetivo é fazer com que a internet também
possa englobar os objetos do dia-a-dia
(geladeira, ar-condicionado, tv, carro, etc.)
WoT - Protocolos
● HTTP
● Além de transportar os dados, também é usado para
manipular os objetos através dos métodos HTTP tais como GET, POST, PUT e DELETE;
● Através destes métodos é possível expor as
funcionalidades de um dado objeto na internet;
● URI (Uniform Resource Identifier)
HTTP
● Hypertext Transfer Protocol
● Implementa o serviço web arquitetura TCP/IP; ● Baseado no modelo Cliente-Servidor;
● Utiliza os serviços de transporte orientado a
conexão na porta 80/TCP;
HTTP: Teste
# telnet www.terra.com.br 80 Connected to www.terra.com.br. Escape character is '^]'. GET /index.html HTTP/1.1 host: www.terra.com.br User-Agent: Mozilla/4.0 HTTP/1.1 200 OK C: S: DIGITE Digite <enter>HTTP: Sessão
● Uma sequência de transações de requisição
resposta usando a mesma conexão TCP;
● O cliente inicia a comunicação estabelecendo
uma conexão TCP para uma porta do servidor, por omissão a porta 80;
● O servidor escutando naquele IP e naquela
porta, retorna com “HTTP/1.1 200 OK”,
juntamente com o resultado da requisição ou erro informado;
HTTP: URI
● Em TI, um Identificador Uniforme de Recursos
(URI) - Uniform Resource Identifier (em inglês) é uma cadeia de carateres compacta usada
para identificar ou denominar um recurso na Internet (wikipedia).
<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ]
HTTP: Métodos
● Também chamados de verbos
● Usados para indicar a ação desejada sob o
recurso
● O Recurso é indicado pela URI ● Principais métodos utilizados
● HTTP 1.0 → GET, POST e HEAD
HTTP: Métodos
● GET: Usado para solicitar um recurso do servidor;
● HEAD: É idêntico ao GET mas só vem o cabeçalho da resposta a requisição; ● POST: O método post é usado para solicitar ao servidor o processamento de
informações enviadas no corpo da requisição. É maneira padrão usada para processar formulários web;
● PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a
URI fornecida. Se o recurso não existe ele é criado, se existe ele é modificado.
● DELETE: Pode ser usado para remover um recurso específico.
● TRACE: Ecoa o pedido recebido de modo que o cliente pode ver as
mudanças ou adições (se houver) foram feitas por servidores intermediários.
● OPTIONS: Retorna os métodos http que o servidor suporta para determinada
HTTP: GET x POST
● É possível usar o método GET para enviar dados de
formulários do servidor, porém não é aconselhável, pois os dados serão passados na URL, e podem ser facilmente reproduzidos numa tentiva de fraude no sistema. O método correto para envio do formulário é o metodo POST.
● Entrada no html para o método GET:
● <FORM action=form.php method=GET> ● Entrada no html para o método POST:
● <FORM action=form.php method=POST> ● Exemplos:
HTTP: Códigos de Retorno
● 200 OK ● 400 Bad Request ● 401 Unauthorized ● 403 Forbidden ● 404 Not FoundAPI - Aplication Programing
Interface
é um conjunto de rotinas e padrões estabelecidos por um software para a utilização das suas funcionalidades por aplicativos que não pretendem envolver-se em detalhes da
implementação do software, mas apenas usar
seus serviços.
“How to design a good API and why it matters”
API – Comunicação “S2S”
● As APIs permitem que software fale com
software. Para fornecer um serviço o
“elemento de software” deve possuir uma interface de programação de aplicativo ou API.
● O Sistema operacional tem uma API (SPI)
● Muitos Protocolos de Aplicação fazem uso de
Exemplo API TTS google
● TTS: Text to Speak (Texto para fala)
● curl 'http://translate.google.com/translate_tts? ie=UTF-8&tl=pt&q=Tecnologias %20Inovadoras&tl=en&client=t' -H 'Referer: http://translate.google.com/' -H 'User-Agent: stagefright/1.2 (Linux;Android 5.0)' > google_tts.mp3
Características de uma boa
API
● Fácil de Aprender e usar, mesmo sem
documentação;
● Fácil leitura e manutenção de código que a
usa;
● Fácil de estender;
Componentes de uma API
● Funções
● Parâmetros ● Retorno
O grandes “players” da
internet possuem APIs
● Google ● Facebook ● Ebay ● Twiter ● Amazon ● Youtube
API para APIs - Temboo
● Biblioteca de Processos de Programação ● Virtualiza os uso das APIs dos principais
players de internet.
● Gera códigos que podem ser colados direto na
aplicação.
● Conceito: Coreografia (Service choreography)
● Uma forma de composição de serviço na qual um
protocolo de interação entre diversos serviços é definido de uma perspectiva global.
API para APIs - Temboo
Meu Software API do Player 1 . . . COREOGRAFIA API do Player 2 API do Player n API do Player 1Temboo
Hora da Prática
(caderno de práticas: Pratica 1)
Aplicações RESTful e Arquitetura Orientada Recursos (ROA)
Midleware para Desenv. de
aplicações distribuídas
● RPC, RMI, CORBA ● SOAP e WSDL ● REST ● CoAPREST
● REST – Representative State Transfer; ● Transferência de Estado Representativo;
● Definido por Roy T. Fielding em sua tese de
PhD;
● Estabelece um conjunto de princípios para
Princípios de REST
● A interface da aplicação deve ser uniforme;
● Stateless: Uma requisição não depende de outra anterior,
Toda informação necessária ao processamento deve está na própria requisição;
● Cacheable: O resultado das requisições podem ser
armazenadas em cache;
● Client-Server: A comunicação deve ser cliente-servidor; ● Layered System (Camadas): O cliente não deve
enxergar além das camadas adjacentes
● Code-on-Denand: A aplicação pode opcionalmente
gerar código para que o cliente execute. Ex: Javascript;
Interface Uniforme ou API
Uniforme
● Definição de uma interface entre clientes e servidores. Desacopla os diferentes
elementos da arquitetura. Princípios para uma interface uniforme:
● Baseada em recursos: Recursos são identificados individualmente através de URIs.
Os recursos são separados de suas representações, que são enviadas ao cliente. A representação do recurso pode ser HTML, JSON ou XML.
● Manipulação dos Recursos através de Representações: Quando um cliente tem
uma representação de um recurso, incluindo quaisquer metadados anexado, tem informações suficientes para modificar ou excluir o recurso no servidor, desde que tenha permissão para fazê-lo.
● Mensagens auto-descritivas: Cada mensagem inclui informações suficientes para
descrever como processar a mensagem. Por exemplo, qual parser para invocar pode ser especificado por um tipo de mídia Internet (anteriormente conhecido como um
Aplicações RESTful
(De uma outra forma)
● Todas as coisas deve ter pelo menos um identificador ● Vincule as coisas
● Utilize métodos padronizados
● Recursos com múltiplas representações
● Comunique sem estado
1) Dê a todas as coisas um
Identificador
● Use URIs para identificar tudo o que precisar
ser identificado, especifique todos os recursos de "alto nível" que seu aplicativo oferece, se eles representam itens individuais, conjuntos de itens, objetos virtuais e físicos, ou
2) Vincule as coisas
● Use links para referenciar coisas que possam
ser identificadas (recursos) sempre que for possível.
● A resposta a uma requisição pode conter links
3) Utilize os métodos
padrão
● Os clientes para interagir com os seus recursos
devem implementar o protocolo de aplicação padrão (HTTP) corretamente, isto é, utilizar os métodos padrão: GET, PUT, POST DELETE e OPTIONS;
● O cliente em sistema distribuído pode solicitar:
Leitura (Consulta), Escrita (Nova entrada), Alteração, Exclusão;
3) Utilize os métodos
padrão
4) Recursos com múltiplas
representações
● O cliente pode querer escolher a forma que
deseja receber as informações. Ex.:
5) Comunique sem Estado
● Uma requisição do cliente para o servidor não
deve depender de requisições anteriores;
● REST exige que o estado seja transformado no
estado do recurso. O estado deve ser transformado em algo que possa ser consultado;
● Ou o estado do recurso é enviado ao cliente e
Hora da Prática
(caderno de práticas: Pratica 2)
ROA – Arquitetura
Orientada a Recursos
● URIs deve possuir correspondência com o recurso:
● http://www.fac.br/aluno/pedro
● Endereçabilidade: Todo recurso deve possuir pelo menos
um endereço
● Sem estado: Requisições deve ser auto contidas ● Representações (JSON, XML, CSV, RSS)
● Cliente -> Servidor: Criação ou modificação ● Servidor -> Cliente: Requisição
ROA – Interface Uniforme
● GET: Usado para recuperar um recurso
● A resposta deve incluir em seu corpo a representação
do recurso
● DELETE: Usado para apagar um recurso
● A resposta deve ter o status HTTP correspondente
● POST e PUT: Criação de Recursos
● A resposta deve ter o status HTTP correspondente ● PUT: Atualização de Recursos
● A resposta deve ter o status HTTP correspondente ● OPTIONS: Informa quais métodos o recurso suporta
Desenvolvimento de
serviços - RESTful
● Passos:
● 1 - Levantamento de requisito ● 2 - Identificação de recursos
● 3 - Definição de representação de recursos ● 4. Definição de URIs
Exemplo: Sistema de
Climatização
Sensor de Temperatura + Sistema de Refrigeração Interface IPExemplo: Sistema de
Climatização
● 1 - Levantamento Requisitos
● Incluir um comodo
● Conhecer a temperatura do comodo
● Ajustar a temperatura do comodo
● 2 - Identificação dos Recursos
Exemplo: Sistema de
Climatização
● 3 – Definição da Representação dos Recursos
● JSON : { “temp”, “valor” } ● JSON : { “Endereço IP” }
– Inclusão de um cômodo (nome do comodo na URI )
● 4 – Definição da URI
● Cômodo: /comodo Exemplo
– /quarto , /cozinha , /banheiro, etc...
● Temperatura
– /comodo/temperatura
– Ex: /cozinha/temperatura
Resultado da requisição
Exemplo: Sistema de
Climatização
Temperatura GATEWAY Sistema De Refrigeração ProtocolosZigbee, blutooth, usb, serial, IR INTERNET 1
2 3
1 – GET /quarto/temperatura (host: www.x.com) 2 – 200 OK
4 5 6
Formatos para transferencia
de recursos
● RFC 4627 (JSON)
● Representa estruturas de dados em texto ● “ XXX “ - String
● [ 1, 2, 3 ] - Lista
● { “A” : “B” } - Par: Chave-valor (key-value pair)
● XML (W3C) ● CSV
Hora da Prática
(caderno de práticas: Pratica 3)
Segurança da Web da
Coisas
● HTTP Auth ● SSL ● OpenID ● OAuthConclusões
● Uma boa API pode determinar o sucesso do
negócio
● A Web das coisas expande o domínio da
internet para objetos do nosso dia a dia.
● HTTP é usado como protocolo base para a
Web das Coisas