• Nenhum resultado encontrado

3-REST

N/A
N/A
Protected

Academic year: 2021

Share "3-REST"

Copied!
58
0
0

Texto

(1)

Sumário

Telecomunicações

Sistemas Distribuídos

SOA / Web Services

REST Web Services

(2)

REST

O que é REST e pra que serve?

 REST (Representational State Transfer) foi feito para permitir a

comunicação entre duas aplicações quaisquer, independente de sua plataforma/linguagem de desenvolvimento;

 Surgiu a partir de uma tese de doutorado de Roy Fielding, um dos principais autores da especificação do protocolo HTTP;

 Sistemas que seguem os princípios do REST são chamados de RESTful, ou seja, REST e RESTful são a mesma coisa;

(3)

REST

O que é REST e pra que serve?

 Por usar o protocolo HTTP, usa além dos métodos POST e GET, o

PUT e o DELETE, que em uma analogia com CRUD seria: UPDATE, READ, CREATE, DELETE;

 REST não é um padrão, é um modelo de arquitetura;

(4)

REST

O que é REST e pra que serve?

 A Web é o maior modelo de um sistema REST;

(5)

REST

(6)

REST

Recursos com múltiplas representações

 Retorna um XML num formato específico.

 Retorna uma informação no formato vCard (ex.: endereço do cliente)

(7)

REST

REST é um estilo de se projetar aplicativos da Web

fracamente acoplados que contam com recursos nomeados

— em forma de URL, URI e URN, por exemplo — e não com

mensagens. Engenhosamente, o REST transporta a

infraestrutura já validada e bem-sucedida da Web — HTTP.

URL: Uniform Resource Locator URI: Uniform resource identifier URN: Uniform Resource Name

(8)

REST

REST substitui a dobradinha SOAP+WSDL?

 Não substitui! Pelo menos por enquanto....;

REST é Web Services assim como existem Web Services baseados

no padrão SOAP, mas REST por exemplo não possui um contrato formal, como SOAP possui, no caso o WSDL;

REST não tem estado (stateless), WS-SOAP podem possuir estado

(stateful);

 REST não possui suporte a requisição assíncrona, SOAP possui;

SOAP é mais consolidado, portanto possui ferramentas de suporte e

(9)

REST

Vantagens e Desvantagens no uso de REST

Vantagens

REST usa o padrão Web (HTTP) para troca de dados, SOAP envolve uma

série de padrões (WSDL, WS-Security, WS-Addressing, WS-Coordination, WS-ReliableMessaging);

 REST é mais leve, tem melhor performance para troca de dados, pois os

request/response são muito menores;

REST é mais humano, pois usa de recursos já conhecidos, o que o torna

mais fácil de usar;

 Com REST é possível fazer CACHE das requisições/respostas;

É possível ter N camadas intermediárias, como: proxys, gateways, cache

(10)

REST

Vantagens e Desvantagens no uso de REST

Vantagens

É mais seguro do que SOAP, já que existe a possibilidade de usar

REST sobre HTTPS, usar os próprios recursos de segurança do padrão HTTP, além do uso de firewall e outros recursos;

 Por ser mais leve, é viável utilizar REST em aplicativos móveis como

celulares, smartphones, PDA’s, etc;

(11)

REST

Vantagens e Desvantagens no uso de REST

Desvantagens

 Não possui um contrato para definir a interface dos seus serviços;

 Não possui ferramentas de apoio ao desenvolvimento;

(12)

Programação de Sockets

O que é um Socket

Uma interface

local

criada e

mantida pelas aplicações,

controlada pelo SO

, através

da qual os processos de

aplicação podem tanto

enviar

quanto

receber

mensagens

de outro processo de

aplicação, local ou remoto.

De acordo com James F Kurose:

“socket é a interface entre a camada de aplicação e a de transporte

(13)

Programação de Sockets

API de Sockets:

introduzida no UNIX BSD 4.1,1981

explicitamente criados, usados e

liberados pelas aplicações

paradigma cliente/servidor

dois tipos de serviço de transporte via

sockets:

datagrama não confiável (UDP)

confiável, orientado a cadeias de bytes / stream (TCP)

(14)

Programação de Sockets

ARP

ARP Hardware

Interface Hardware

Interface RARPRARP

ICMP

ICMP IPIP IGMPIGMP

UDP UDP TCP TCP FTP FTP HTTP HTTP ... DNSDNS RPCRPC ... Enlace Rede Transporte Aplicação Usuário Núcleo do SO Protocolos de Internet

(15)

Programação de Sockets

TCP

Orientado a conexão Controle de erro Garantia de entrega Entrega ordenada

TCP

Orientado a conexão Controle de erro Garantia de entrega Entrega ordenada

UDP

Não necessita de conexão Sem controle de erro Mais simples e mais rápido

UDP

Não necessita de conexão Sem controle de erro Mais simples e mais rápido

(16)

Programação de Sockets

Tipos de Sockets:

• Serviço com conexão

 Implementa um stream de dados (SOCK_STREAM)  Protocolo TCP (tipicamente)

• Serviço sem conexão

 Implementa um serviço de datagramas (SOCK_DGRAM)  Protocolo UDP (tipicamente)

(17)

Programação de Sockets

socket Cria um novo descritor para comunicação

connect Iniciar conexão com servidor

write Escreve dados em uma conexão

read Lê dados de uma conexão

close Fecha a conexão

bind Atribui um endereço IP e uma porta a um socket

listen Coloca o socket em modo passivo, para “escutar” portas

accept Bloqueia o servidor até chegada de requisição de conexão

recvfrom Recebe um datagrama e guarda o endereço do emissor

sendto Envia um datagrama especificando o endereço Principais funções da API

(18)

Programação de Sockets

Números de portas:

• 1-255 reservadas para serviços padrão portas “bem conhecidas”

• 256-1023 reservado para serviços Unix

• 1-1023 Somente podem ser usadas por usuários privilegiados (super-usuário)

• 1024-4999 Usadas por processos de sistema e de usuário • 5000- Usadas somente por processos de usuário

(19)

Programação de Sockets

Uma analogia

Socket: telefone

Bind: número de telefone atribuído a um telefone

Listen: ligar a campainha para que você possa ouvir o telefonema Connet: discar um número de telefone

Accept: atender o telefone Read/Write: falar / conversar Close: despedir e desligar

(20)

Programação de Sockets

Para Cliente contatar o servidor: • processo servidor já deve estar

executando antes de ser contatado

• servidor deve ter criado socket (porta) que aceita o contato do Cliente

Quando o cliente cria o socket: cliente TCP estabelece conexão com o servidor

Quando contatado pelo cliente, o servidor cria um novo socket para comunicar-se com o cliente

• permite que o servidor converse com múltiplos clientes

Ponto de vista da aplicação

TCP fornece uma transferência confiável, em ordem de bytes

(“pipe”), entre o cliente e o servidor

Ponto de vista da aplicação

TCP fornece uma transferência confiável, em ordem de bytes

(“pipe”), entre o cliente e o servidor

Cliente contata o servidor:

• criando um socket TCP local • especificando endereço IP e

número da porta do processo servidor

(21)

Programação de Sockets

close () listen () bind () socket () accept () read () write () Servidor socket () Cliente connect () bloqueado Estabelecimento de conexão

write () read () close () Dados (pedido) Dados resposta) ter telefone associar número ao telefone ligar campainha atender chamada desligar conversar fazer chamada desligar conversar

(22)

Programação de Sockets

In

te

ra

çã

o

C

li

en

te

/S

er

vi

d

o

r:

T

C

P

(23)

Programação de Sockets

E

x

em

p

lo

:

C

li

en

te

J

av

a

(T

C

P

)

(24)

Programação de Sockets

E

x

em

p

lo

:

C

li

en

te

J

av

a

(T

C

P

)

(25)

Programação de Sockets

E

x

em

p

lo

:

S

er

v

id

o

r

Ja

va

(T

C

P

)

(26)

Programação de Sockets

E

x

em

p

lo

:

S

er

v

id

o

r

Ja

va

(T

C

P

)

(27)

Programação de Sockets

Programação de Sockets com UDP

• UDP: não há conexão entre o cliente e o servidor

• não existe apresentação

• transmissor envia explicitamente endereço IP e porta de destino em cada mensagem • servidor deve extrair o endereço IP e porta

do transmissor de cada datagrama recebido

• UDP: dados transmitidos podem ser recebidos fora de ordem ou perdidos

Ponto de vista da aplicação UDP fornece uma transferência

não confiável de grupos de bytes (“datagramas”) entre o

cliente e o servidor. Ponto de vista da aplicação UDP fornece uma transferência

não confiável de grupos de bytes (“datagramas”) entre o

(28)

Programação de Sockets

sendto () bind () socket () recvfrom () Servidor socket () Cliente bloqueado sendto () recvfrom () Dados (pedido) Dados resposta) close () close ()

(29)

Programação de Sockets

In

te

ra

çã

o

C

li

en

te

/S

er

vi

d

o

r:

U

D

P

(30)

Programação de Sockets

E

x

em

p

lo

:

C

li

en

te

J

av

a

(U

D

P

)

(31)

Programação de Sockets

E

x

em

p

lo

:

C

li

en

te

J

av

a

(U

D

P

)

(32)

Programação de Sockets

E

x

em

p

lo

:

S

er

v

id

o

r

Ja

va

(

U

D

P

)

(33)

Programação de Sockets

E

x

em

p

lo

:

S

er

v

id

o

r

Ja

va

(

U

D

P

)

(34)

Programação de Sockets

Sockets em Java

Java modernizou a API para trabalhar com sockets

O programador não precisa chamar todas as

funções, algumas chamadas são automáticas

Exemplos

Socket: equivalente a socket e bind

ServerSocket: equivalente a socket, bind e listen

Sockets são implementados no pacote java.net

A transmissão e o envio de dados são feitos através

de classes do pacote java.io de maneira semelhante

à escrita e leitura em arquivos

(35)

Programação de Sockets

Sockets em C/C++

Sockets em Java

(36)

Programação de Sockets

Sockets em C/C++

C é a linguagem “básica” para programação

com sockets

De maneira diferente de Java, programar

com sockets em C/C++ envolve utilizar todas

as chamadas da API

(37)

Programação de Sockets

import java.net.*; import java.io.*;

public class SimpleJavaClient {

public static void main(String[] args) { try {

Socket s = new Socket("127.0.0.1", 9999); InputStream i = s.getInputStream();

OutputStream o = s.getOutputStream(); String str;

do {

byte[] line = new byte[100]; System.in.read(line); o.write(line); i.read(line); str = new String(line); System.out.println(str.trim()); } while ( !str.trim().equals("bye") ); s.close(); }

catch (Exception err) {

System.err.println(err); }

} }

(38)

Programação de Sockets

#include ...

#include <sys/socket.h>

int main(int argc, char **argv) {

int s;

struct sockaddr_in dest;

char msg_write[100], msg_read[100]; s = socket(AF_INET, SOCK_STREAM, 0)); bzero(&dest, sizeof(dest));

dest.sin_family = AF_INET; dest.sin_port = htons(9999);

inet_aton(“127.0.0.1”, &dest.sin_addr.s_addr);

connect(s, (struct sockaddr*)&dest, sizeof(dest)); do {

scanf("%s",msg_write);

write (s, msg_write, strlen(msg_write)+1); read (s, msg_read, MAXBUF);

} while (strcmp(msg_read,"bye")); close(s);

(39)

Programação de Sockets

import java.io.*; import java.net.*;

public class SimpleJavaServer {

public static void main(String[] args) { try {

ServerSocket s = new ServerSocket(9999); String str; while (true) { Socket c = s.accept(); InputStream i = c.getInputStream(); OutputStream o = c.getOutputStream(); do {

byte[] line = new byte[100]; i.read(line); o.write(line); str = new String(line); } while ( !str.trim().equals("bye") ); c.close(); } }

catch (Exception err){

System.err.println(err); }

} }

(40)

Programação de Sockets

#include ...

#include <sys/socket.h>

int main(int argc, char **argv) { int s, client_s;

struct sockaddr_in self, client; int addrlen = sizeof(client);

char msg_write[100], msg_read[100];

s = socket(AF_INET, SOCK_STREAM, 0); bzero(&self, sizeof(self));

self.sin_family = AF_INET; self.sin_port = htons(9999);

self.sin_addr.s_addr = INADDR_ANY;

bind(s, (struct sockaddr*)&self, sizeof(self));

listen(s, 5); while (1) {

client_s = accept(s, (struct sockaddr*)&client, &addrlen); do {

read (client_s, msg_read, MAXBUF);

write (client_s, msg_read, strlen(msg_read)+1); } while (strcmp(msg_read,"bye"));

close(client_s); }

(41)

Programação de Sockets

Byte Order

 Define como um valor é armazenado na memória.  Exemplo: 16909060 = 0x01020304

Big-Endian

Little-Endian

01 02 03 04 n n+1 n+2 n+3 Endereço Memória 04 03 02 01 n n+1 n+2 n+3 Endereço Memória

(42)

Programação de Sockets

Byte Order

 Alguns computadores armazenam os números em Big-Endian, ou seja, o Byte mais significativo primeiro.

 Porém outros computadores (x86, Intel, Motorola, etc) armazenam seus dados em Little-Endian, ou seja, o byte menos

significativo primeiro

 Big-Endian é também chamado de Network Byte Order, por que é a forma como os dados devem ser transmitidos em rede.

 Seu computador, porém armazena números em Host Byte Order

(43)

Programação de Sockets

Byte Order

 Para evitar conflitos entre hosts de arquiteturas diferentes é convencionado que informações de controle na rede são armazenadas em Big-Endian.

 Para resolver esse problema temos as seguinte funções:

htons() host to network short htonl() host to network long ntohs() network to host short ntohl() network to host long

(44)

Programação de Sockets

Servidores concorrentes

 Muitas vezes é necessário para um servidor lidar com vários clientes de uma única vez. Para conseguir isto é preciso, de

alguma maneira, voltar a aceitar conexões, sem esperar que um cliente seja completamente servido.

 Isto normalmente é feito através da criação de novas threads ou novos processos.

 Um servidor, após o retorno da função accept(), se divide em dois, e enquanto uma linha de execução se dedica a atender o cliente, outra volta a esperar por novos pedidos de conexão.

(45)

Programação de Sockets

Depuração / Exbindo mensagens de aviso

Esta é a forma mais simples de depurar aplicações que envolvem

sockets, threads e mais de um processo.

Atenção! Deve-se gerar as mensagens de aviso em ‘stderr’ (que

não possui buffer) e não ‘stdout’!

Inconveniente desta técnica de depuração: pode afetar o

(46)

Programação de Sockets

(47)

Programação de Sockets

D

ep

ur

ão

/

M

áq

ui

na

d

e

es

ta

do

s

(48)

Programação de Sockets

Depuração / o comando tcpdump

tcpdump -x src host_name > log_file

Programa equivalente, com interface

(49)
(50)
(51)

Questões

1. Numa implementação onde fosse importante a ordem

de transmissão dos bytes, que tipo de socket você

usaria?

a) Datagrama (SOCK_DGRAM) b) Byte Stream (SOCK_STREAM)

2. Porque devo ter atenção especial aos endereços

(portas) de conexões quando programo sockets em

c/c++?

Devido às diferenças de representação de números

em host byte order e network byte order.

(52)

Websocket

É uma especificação que define uma conexão

bidirecional por canais full-duplex sobre um único socket

TCP.

A API Websocket Javascript foi desenvolvida como

parte da inciativa que introduziu o HTML5.

O padrão WebSocket simplifica muito da complexidade

em torno de comunicação bi-direcional web e do

gerenciamento de conexão.

(53)

Websocket

Beneficios

Grande diminuição de tráfego desnecessário

de rede.

Diminuição de latência de rede

Representa grande avanço para aplicações web que necessitam de comunicação em tempo real:

Jogos online de vários jogadores Aplicativos de Chat

Links para esportes ao vivo

(54)

Websocket

Comparação da sobrecarga desnecessária de transferência de rede entre uma

(55)

Websocket

Por ser uma tecnologia recente ainda apresenta

pontos a serem discutidos e melhorados

Segurança

(56)

Websocket

A API Websocket vem sendo padronizada pelo

W3C (

http://

www.w3.org/TR/websockets)

O protocolo Websocket vem sendo padronizado

pelo IETF (

http://datatracker.ietf.org/doc/rfc6455/?

Referências

Documentos relacionados

Arqueologia Pública Campinas, SP v.13 n.2 p.66 2019 ISSN 2237-8294 Há que se pensar e agir para a promoção de um saber arqueológico e cultural crítico,

A maioria dos insumos para a indústria de alimentos e bebidas possuem matérias-primas de origem agrícola, esses por sua vez precificados sob influência dos mais variados

esse permanecer em tanta fuga. O tempo, o fluir, como algo que deve ser afirmado. Não se deve chorar porque as plantas crescem e o tempo passa, não se deve estar triste

Lance algumas bolinhas na direção da criança, ela deve tentar através da percepção de tempo e reação tentar recolher a bolinha com o copo. Alternar o movimento em ambos

A execução Oficina Saúde no Envelhecer teve grande potencialidade de promoção do envelhecimento saudável para os idosos que participaram ativamente dos encontros,

Sirona Dental Systems GmbH 2 Avisos e instruções de segurança Instruções de utilização Módulo de parede XIOS Plus.. Área em torno

SINDICATO dos Trabalhadores das Indústrias Transformadores, Energia e Actividades do Ambiente do Centro Sul e Regiões Autonomas - SITE

Os testes intradérmicos não devem ser realizados em vacas após o sétimo mês de gestação, bezerros com menos de seis meses de vida, e nem em animais com endoparasi- toses ou