Quarta, 19 Outubro 2011 09:40

Consumindo WebServices no Moodle 2.0 Featured

Written by  Carlos Delfino
Rate this item
(0 votes)

moodle2Consumir WebServices do Moodle 2.0 é muito Simples, como diz o ditado popular "Trair e Coçar é so Começar", porem exige alguns passos iniciais de configuração como ativação e criação de um usuário especial para autorização e autenticação como foi descrito no artigo "Como Ativar o WebService no MOODLE 2.0".

Após ter ativado o WebService, criado os usuários e feito as configurações, vamos agora então aprender a consumir o WebService, neste artigo irei focar o uso do SOAP, porem irei criar outro artigo que irá demonstrar como deve ser feito os mesmos processos utilizando REST e XMLRPC, também irei criar um Artigo demonstrando a instalação do JOONDLE um componente de integração do JOONLA que utiliza XMLRPC para integração ambos.

Este Artigo foi feito em parceria com o Sistema Aula e está baseado no WebService de integração do Sistema de Gestão desta Empresa.

O Esqueleto para Consumir o WebService do Moodle 2.0

Para facilitar este tutorial vou criar um pequeno esqueleto com algumas funções básicas que irão reduzir o nosso trabalho.

É importante observar que o consumo do WebService é composto de dois conjuntos de informações, o primeiro grupo refere-se a informações de acesso ao servidor, onde será informados o endereço do servidor como a URL completa para acesso ao WebService, o Token que autentica e autoriza o acesso. Já o segundo grupo são as informações do serviço solicitado como o nome da função/mensagem solicitada ao WebService e os parâmetros necessário para seu funcionamento.

Para compor as informações do primeiro grupo identifique então:

  • IP ou domínio onde está instalado seu servidor, em nosso caso estará instalado em "www.carlosdelfino.eti.br"
  • Diretório de Instalação do Servidor, para nos estará em "ead"
  • e obtenha o token a ser utilizado.
Patrocinador

O nosso código inicial para o script ficará assim:

Grupo de Informações do Servidor 

Bem vamos ver agora o código que irá ser usado em todas as chamadas ao WebService, este código será criado em uma arquivo que ficará no diretório "lib" com o nome "esqueletowebservice.php":

Primeira Versão da  Função Call Service

 A função acima está em sua primeira versão, e seu objetivo é bem simples apenas demonstrar como é chamado o WebService para o protocolo SOAP, em novos Tutoriais poderá ser melhorada para demonstrar outros protocolos.

Os parâmetros da função são todos obrigatórios com exceção do ultimo "$service" que por padrão é "soap", já que iremos focar neste protocolo. o primeiro é o nome do host, em seguida o diretório de instalação em nosso caso "ead", depois o token que dá acesso ao serviço externo, segue o nome da ação que será chamada e finalmente um array que contem os parâmetros do serviço que será chamado.


Usando o Esqueleto proposto

O código proposto neste tutorial é apenas um exemplo e deve ser melhorado conforme suas necessidades, este codigo conforme proposto não resolve todos os problemas que podem vir a ocorrer num ambiente de produção. 

Agora vamos ver o segundo grupo de informações necessário para que possamos consumir o WebService este grupo de informações está codificado para uso com SOAP porem seus requisitos são validos para qualquer protocolo, seja REST, XML-RPC ou mesmo AMF.

No caso do REST ou XML-RPC você poderá usar uma biblioteca como a CURL.php para auxiliar a conversão do código para o formato adequado, mantendo esta codificação, veja nos tutorias específicos como isto deve ser feito.

grupodeinformacoesdousuario

Na imagem acima, é apresentado o código que cria o objeto que representa o usuário que será adicionado com a a chamada da ação "sistemaaula_user_create_users", observe então que a variável "$action" terá este valor. nos comentários do código estão o tipo esperado seu tamanho e se são campos obrigatórios ou não. 

Há alguns campos como por exemplo: "lang" que possuem um tamanho bem além do necessário, e estão fora do padrão, esperava-se neste campo a observância do padrão ISO-639, porem ainda não encontramos uma boa justificativa para o MOODLE não segui-lo. Também temos o campo "country" que pode os códigos em maiúculo. 


 

Tratando as Exceções do WebServices do Moodle

As operações/mensagens do WebService do Moodle retornam erros pouco úteis na versão atual, isto também não tem uma justificativa muito clara, estamos pesquisando sobre o assunto em em breve estaremos publicando uma solução melhor, porem as funções que desenvolvemos para integração com o SistemaAula são mais amigáveis em seus erros, retornando mensagens mais claras e objetivas, como serão mostradas abaixo

Não trataremos aqui erros específicos do WebService, mas apenas das operações do moodle.

No WebService do SistemaAula as exceções são do tipo "moodle_exception", no lugar de "invalid_parameter_excpetion", retornando assim de forma mais declarativa e podendo sofrer intervenção da internacionalização.

Erro ao se tentar inserir um usuário duplicado.

No WebService do Moodle usando a operação padrão moodle_user_create_users, quando se tenta inteserir um usuário duplicado recebe a exceção "invalid_parameter_excepion" que na versão atual do MOODLE 2.0 não retorna uma mensagem muito útil e clara que a exceção é devido ao fato do usuário ser duplicado, mas usando nosso WebService com a operação sistemaaula_user_create_users a exceção retornada é moodle_exception, e a mensagem que acompanha atualmente é: "sistemaaula/username_already_exists", esta mensagem vem neste formato devido ao fato da internacionalização não ter encontrado o modulo sistemaaula, porem quando este vier a ser implementado e instalado a mensagem será alterada e será mais declarativa.

Veja uma parte do texto extraido da conversão do objeto SoapFalt impresso conforme a função print_r do PHP:

 

....

        )

 

    [previous:Exception:private] => 

    [faultstring] => sistemaaula/username_already_exists

    [faultcode] => Receiver

)

 

 

Read 769 times Last modified on Sexta, 23 Março 2012 21:35
More in this category: « Listas de AVA/LMS SCORM »

Leave a comment

Make sure you enter the (*) required information where indicated. HTML code is not allowed.

Pesquisar

Usar Perfil do Facebook

Cursos Virtuais

Blogger