Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto...

48
Web das Coisas – WoT Software: APIs para IoT Prof. João Bosco Teixeira Junior

Transcript of Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto...

Page 1: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Web das Coisas – WoT

Software: APIs para IoT

Prof. João Bosco Teixeira Junior

Page 2: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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.)

Fonte: http://www.nce.ufrj.br/labnet/pesquisa/cidadesinteligentes/minicurso-wot-final.pdf

Page 3: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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)● Fornecem endereços únicos e globais para

identificação dos recursos;● REST

● Estilo arquitetural para desenvolvimento de aplicações distribuídas ROA (Resource Oriented Architeture);

Page 4: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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;● Envio e recebimento de mensagens;

Page 5: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

HTTP: Teste

# telnet www.terra.com.br 80Connected to www.terra.com.br.Escape character is '^]'.GET /index.html HTTP/1.1host: www.terra.com.brUser-Agent: Mozilla/4.0

HTTP/1.1 200 OKServer: nginxDate: Thu, 07 Aug 2014 15:25:31 GMTContent-Type: text/html...Connection: keep-alive

C:

S:

DIGITE

Digite <enter>

Page 6: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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;

Page 7: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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://www.boscojr.com/protcomseg/form.php?qualquer=algo#Cap1

Page 8: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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 1.1 → OPTIONS, PUT, DELETE, TRACE and CONNECT

Page 9: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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

URL. Isso pode ser usada para checar a funcionalidade do servidor. ● CONNECT: Converte o pedido de conexão em um túnel TCP/IP transparente,

geralmente para facilitar a comunicação criptografada com SSL (HTTPS) através de um proxy HTTP não criptografado.

● PATCH: Aplica modificações parciais para um determinado recurso.● Um servidor web mínimo deve ter pelo menos os métodos GET e HEAD

Page 10: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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:

● : www.boscojr.com/protcomseg/form.php

Page 11: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

HTTP: Códigos de Retorno

● 200 OK● 400 Bad Request● 401 Unauthorized● 403 Forbidden● 404 Not Found● 405 Method Not Allowed● 500 Internal Server Error● 503 Service Unavailable

Page 12: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Fonte: http://www.restapitutorial.com/httpstatuscodes.html

Page 13: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Comunicação “S2S”

Page 14: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

API - 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” Joshua Block - Google

Page 15: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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

uma API.

Page 16: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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

Page 17: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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;● Apropriada a para o público alvo;

Page 18: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Componentes de uma API

● Funções● Parâmetros● Retorno● Status

Page 19: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

O grandes “players” da internet possuem APIs● Google● Facebook● Ebay● Twiter● Amazon● Youtube

Page 20: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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.

Page 21: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

API para APIs - Temboo

MeuSoftware

API do Player 1

.

.

.

MeuSoftware

.

.

.

TEMBOO

COREOGRAFIA

API do Player 2

API do Player n

API do Player 1

API do Player 2

API do Player n

Page 22: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Temboo

Hora da Prática(caderno de práticas: Pratica 1)

Atualizando uma planilha no Google Drive

Page 23: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Aplicações RESTful e Arquitetura Orientada Recursos (ROA)

Page 24: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Midleware para Desenv. de aplicações distribuídas● RPC, RMI, CORBA● SOAP e WSDL● REST● CoAP

Paradigmas para WoT

Page 25: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

REST

● 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

aplicações web distribuídas.● Diz-se RESTful as aplicações que seguem

esses princípios

Page 26: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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;

Fonte: http://whatisrest.com/rest_constraints/layered_system_profile

Page 27: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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 tipo de MIME). As respostas também indicam explicitamente o seu cache de capacidade.

● Hipermídia como o motor da Estado da Aplicação: Clientes podem passar o seu estado via corpo da mensagem, Cabeçalhos ou URI. Já o servidor pode passar o estado para cliente via corpo da mensagem, códigos de retorno e cabeçalho.

Page 28: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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

Fonte: http://www.infoq.com/br/articles/rest-introduction

Page 29: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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 resultados de computação.

“Coisas” individuais

Conjuntos de “Coisas”

Page 30: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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 para outros recursos

Page 31: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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;

● REST não te diz quais métodos usar, isso depende da aplicação. Se precisar algum método para tratar um recurso use os do HTTP

Page 32: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

3) Utilize os métodos padrão

Page 33: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

4) Recursos com múltiplas representações● O cliente pode querer escolher a forma que

deseja receber as informações. Ex.:

XML

Vcard (vcf)

Page 34: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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 lá deve ser mantido.

Page 35: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

REST

Page 36: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Hora da Prática(caderno de práticas: Pratica 2)

Ajustando o Apache para Tratar as URIs

Page 37: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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

● Links e conectividade: As representações de um recurso podem fornecer links para outros recursos

● Interface Uniforme

Page 38: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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

Page 39: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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

Page 40: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Exemplo: Sistema de Climatização

Sensor de Temperatura+

Sistema de Refrigeração

Interface IP

Page 41: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Exemplo: 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● Cômodos● Sistema de Refrigeração● Sensor de Temperatura

Page 42: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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

Enviado na requisição de inclusão

Page 43: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Exemplo: Sistema de Climatização

Temperatura

GATEWAY

SistemaDe

Refrigeração

ProtocolosZigbee, blutooth, usb, serial, IR INTERNET

1

2

3

1 – GET /quarto/temperatura (host: www.x.com)2 – 200 OKData: { “temp” , “21” }3 – PUT /quarto/temperatura (host www.x.com)Data: { “temp” : “21” }4 – 200 OK5 – POST /cozinha (host www.x.com)Data: “192.168.0.10”6 – 200 OK

4

56

Page 44: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

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

Page 45: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Hora da Prática(caderno de práticas: Pratica 3)

Construindo uma Aplicação RESTful para IoT

Page 46: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Segurança da Web da Coisas● HTTP Auth● SSL● OpenID● OAuth

Page 47: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

Conclusõ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

● REST e ROA são os padrões arquiteturais básicos para web das coisas

● Os objetos expostos na web devem possuir algum nível de segurança

Page 48: Web das Coisas – WoT Software: APIs para IoT Prof. João ... · PUT: Solicita que o objeto enviado junto a requisição, seja armazenada sob a URI fornecida. Se o recurso não existe

FIM