Método PUT
Produto: | ADVPL |
Versões: |
|
Ocorrência: | Gostaria de um material que explicasse realmente como implementar a tecnologia RESTFul no Protheus, com exemplos de APIs, exemplos de programas externos consumindo o serviço, e exemplos de envio e recebimento de dados. |
Ambiente: | Todos |
Passo a passo: | O método PUT é responsável por alterar algum tipo de informação enviada pelo client. Vamos ver abaixo um exemplo de método put: Iremos receber um JSON com dados de um cliente e realizar a alteração do mesmo caso exista na base de dados. Neste exemplo teremos parâmetros recebidos via URL que no caso será o CGC (cpf ou cnpj) do cliente que queremos realizar a alteração e o conteúdo via JSON que será recebido via POST-Request (no corpo da requisição HTTP). Estrutura da JSON que iremos receber: WSMETHOD PUT WSRECEIVE RECEIVE WSSERVICE CLIENTES Local cJSON := Self:GetContent() // –> Pega a string do JSON Local cCGC := Self:CGC // –> Pega o parâmetro recebido pela URÇ Local lRet := .T. Local oParseJSON := Nil Local aDadosCli := {} //–> Array para ExecAuto do MATA030 Local cJsonRet := “” Local cArqLog := “” Local cErro := “” Private lMsErroAuto := .F. If !ExistDir(“\log_cli”) MakeDir(“\log_cli”) EndIf ::SetContentType(“application/json”) // –> Deserializa a string JSON FWJsonDeserialize(cJson, @oParseJSON) SA1->( DbSetOrder(3) ) If (SA1->( DbSeek( xFilial(“SA1”) + cCGC ) )) Aadd( aDadosCli, {“A1_NOME”, oParseJSON:CLIENTE:NOME , Nil } ) Aadd( aDadosCli, {“A1_END” , oParseJSON:CLIENTE:ENDERECO , Nil } ) MsExecAuto({|x,y| MATA030(x,y)}, aDadosCli, 4) If lMsErroAuto cArqLog := oParseJSON:CLIENTE:CGC + ” – ” + SubStr( Time(),1,5 ) + “.log” cErro := MostraErro(“\log_cli”, cArqLog) cErro := TrataErro(cErro) // –> Trata o erro para devolver para o client. SetRestFault(400, cErro) lRet := .F. Else cJSONRet := ‘{“cod_cli”:”‘ + SA1->A1_COD + ‘”‘; + ‘,”loja”:”‘ + SA1->A1_LOJA + ‘”‘; + ‘,”msg”:”‘ + “Alterado” + ‘”‘; +’}’ ::SetResponse( cJSONRet ) EndIf Else SetRestFault(400, “Cliente não encontrado.”) lRet := .F. EndIf Return(lRet) Todo o restante dos comandos, já está explicado nos métodos POST e GET. Exemplo de requisição efetuada com sucesso: Exemplo de requisição efetuada com erro: |
Observações: | O Postman foi utilizado como exemplo de consumo em uma ferramenta externa, a TOTVS não presta suporte a ferramentas de terceiros, somente analisa o serviço e/ou consumo utilizando os recursos documentados e disponíveis para customização. Documentações de referência: http://tdn.totvs.com/display/tec/REST http://tdn.totvs.com/display/tec/Interface+HTTP http://tdn.totvs.com/display/framework/FWRest http://tdn.totvs.com/display/public/mp/MsAdvSize+-+Dimensionamento+de+Janelas |