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