• No results found

Del III Generelle problemstillinger

16. Derogasjon fra menneske-

16.3 Internasjonale bestemmelser om

• (metodoRecurso) - identifica o método e recurso que se pretende consultar/alterar.

5.5.1 Métodos de leitura

Os métodos que acedem a informações da câmara recebem um parâmetro adicional ("force- Update"), que indica que a resposta deve ser obtida a partir da câmara, independentemente de qualquer configuração. Estes métodos utilizam uma função comum "getProperty". Os seus parâmetros são:

• arrayPath - caminho dentro do objeto câmara. Por exemplo, arrayPath = [’device_service’,’DeviceInformation’], significa

objCam.device_service.DeviceInformation, em que objCam é o objeto câmara; • resources - conjunto deURIs do recurso a que se quer aceder;

• callback - função a ser invocada assim que a resposta seja recebida;

• forceUpdate - flag que indica se a resposta deve ser obtida da cache ou da câmara. O seu funcionamento é apresentado na figura26e pode ser descrito da seguinte maneira:

1. Caso a opção de cache esteja ativa e a informação já se encontre armazenada no objeto câmara, passa esses dados à callback recebida como argumento;

2. Caso contrário:

a) Se existem asURIs dos recursos do serviço (resources), então procura pela URI

da operação dada pela última posição de arrayPath e, caso encontre, guarda- a. Esta função assume que o primeiro pedido que é feito relativamente a um determinado serviço é sempre o que obtém asURIs dos respetivos recursos. O mesmo é dizer que arrayPath tem que ser apenas "/". De facto, tem que ser assim e cabe à camada lógica seguir esta norma. A pesquisa é feita através do título e do método, conforme a função "getURIByMethodAndTitle" em [2];

b) Se não existem, então procura pela URI do serviço e, caso encontre, guarda-a. Esta pesquisa recebe o nome do serviço e caso o mesmo seja "device_service" retorna a URI estática do serviço "Device". Caso contrário devolve a URI do respetivo serviço contido na lista de URIs da operação Capabilities (transferida no momento da adição da respetiva câmara);

c) Caso não encontre alguma dasURIs, é indicado ao utilizador que o serviço não é suportado;

5.5. Camada de Comunicação

getProperty

(arrayPath*, resources, callback, forceUpdate)

forceUpdate é

verdadeiro ? Sim

Existem resources?

Não

Obter a URI da operação dada pela última posição de arrayPath

Sim Não

Obter a URI do serviço (vai obter as resources do serviço)

Fazer o pedido HTTP GET para a URI identificada

Colocar a resposta no último ramo do objeto câmara dado por

arrayPath Já existe a informação no armazenamento local(info)? Não callback(info) Sim

Guardar o objeto câmara

*arrayPath = [serviço, subserviços , operação]

Encontrou a URI? Sim

Indicar ao utilizador que o serviço não está disponível

Não

5.5. Camada de Comunicação

i. É feito um pedidoHTTPGET ao servidorRESTcom aURIencontrada; ii. A resposta recebida é colocada no objeto do serviço dado por arrayPath,

mesmo que existam erros na resposta;

iii. É atualizado o objeto câmara, que contêm o objeto serviço;

5.5.2 Métodos de escrita

Os métodos que alteram as configurações, recebem como parâmetros adicionais o método

HTTP e o objeto com as informações a serem adicionadas ou alteradas. Estes métodos

utilizam uma função comum "setProperty". Os seus parâmetros são: • arrayPath - caminho dentro do objeto câmara;

• body - corpo do pedido;

• method - métodoHTTP. Deve ser PUT, POST ou DELETE;

• resources - conjunto deURIs do recurso a que se quer aceder; • callback - função a ser invocada assim que a resposta seja recebida;

O seu funcionamento é apresentado na figura27e pode ser descrito da seguinte maneira:

1. Procura pelaURI da operação dada pela última posição de arrayPath nas URIs dos recursos do serviço (resources) e, caso encontre, guarda-a;

2. Caso não encontre alguma das URIs, é indicado ao utilizador que o serviço não é suportado. De facto, segundo a filosofia REST, um pedido de alteração (PUT/POST/ DELETE) de um recurso só é possível depois de se aceder pela primeira vez ao serviço (e obter asURIs dos respetivos recursos). Isso é mais uma vez assumido pelaAPI. 3. Caso encontre aURI:

a) É feito um pedidoHTTPcom o método correspondente ao servidorRESTcom a

URIencontrada. Se o método for PUT ou POST, então envia no corpo do pedido o conteúdo da variável body;

b) Caso o método HTTP seja PUT ou POST, o tratamento da resposta recebida é

igual ao da função getProperty, ou seja, a reposta é guardada no objeto câmara. Caso o método seja o DELETE, então elimina a propriedade dada pela última posição de arrayPath.

Um exemplo de operação que obtém informação da câmara é o pedido Capabilities, o qual fornece as URIs dos serviços suportados. Esse processo é descrito no diagrama de sequência da figura28.

5.5. Camada de Comunicação

setProperty

(arrayPath*, resources, body, method, callback)

Guardar o objeto câmara

*arrayPath = [serviço, subserviços , operação]

Obter a URI dada pela última posição de arrayPath nas URIs do

serviço

Encontrou a URI?

Indicar ao utilizador que o serviço não está disponível

Não Fazer o pedido HTTP com

o respetivo método e com o corpo igual a body para a

URI identificada

Sim

Caso exista, colocar a resposta no último ramo do objeto câmara dado

por arrayPath method == DELETE ?

Não

Eliminar a propriedade no último ramo do objeto câmara dado por arrayPath Sim

Figura 27.: Fluxograma que representa a definição da informação dos serviços

Comparando com a figura 4 que mostra a obtenção do mesmo serviço na aplicação an-

tecedente, verifica-se uma diminuição de três pedidos ao servidor, para apenas um por cada serviço. Além disso, os dados podem ser obtidos a partir do objeto câmara evitando pedidos repetidos à rede.

5.5.3 Principais objetos

AAPIde comunicação deste projeto define um único objeto global que representa a câmara selecionada. Este objeto tem como propriedades os objetos serviço e cada um deles contém as informações relativas a esse mesmo serviço. Ou seja, no primeiro nível de profundidade do objeto câmara, são definidos os objetos serviço cujo o nome é "[serviço]_service", em

5.5. Camada de Comunicação