Tempo aproximado para leitura: 00:02:00 min
Dúvida
Preciso criar um WebService no modelo REST, porém, só criei até hoje no modelo SOAP.
Vocês teriam algum exemplo e documentação sobre isso?! O que achei no TDN é muito pouco para que possamos fazer um primeiro teste.
Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus) – ADVPL – A partir da versão 11.80
Solução
Exemplo de Criação de um WS utilizando a Tecnologia Rest
#include "PROTHEUS.ch" #include "RESTFUL.ch" #xtranslate @{Header <(cName)>} => ::GetHeader( <(cName)> ) #xtranslate @{Param <n>} => ::aURLParms\[ <n> \] #xtranslate @{EndRoute} => EndCase #xtranslate @{Route} => Do Case #xtranslate @{When <path>} => Case NGIsRoute( ::aURLParms, <path> ) #xtranslate @{Default} => Otherwise Static aUsers := {{'1','Oscar','27'},{'2','Luana','40'},{'3','Kaua','25'}} WsRestful tstwsrest Description "WebService REST para testes" WsMethod GET Description "Sincronização de dados via GET" WsSyntax "/GET/{method}" WsMethod POST Description "Sincronização de dados via POST" WsSyntax "/POST/{method}" WsMethod DELETE Description "Sincronização de dados via DELETE" WsSyntax "/DELETE/{method}" End WsRestful WsMethod GET WsService tstwsrest Local cUser := '' Local nUser ::SetContentType( 'application/json' ) @{Route} @{When '/users'} cUser := '[' For nUser := 1 to Len(aUsers) cUser += '{"id":'+ aUsers[nUser][1]+; ',"name":"'+aUsers[nUser][2]+; '","age":'+aUsers[nUser][3]+'}' cUser += if(nUser < Len(aUsers),',','') Next nUser cUser += ']' ::SetResponse(cUser) @{When '/users/{id}'} nUser := aScan(aUsers,{|x| x[1] == @{Param 2} }) If nUser > 0 cUser := '{"id":'+ aUsers[nUser][1]+; ',"name":"'+aUsers[nUser][2]+; '","age":'+aUsers[nUser][3]+'}' ::SetResponse(cUser) Else SetRestFault(400,'Ops') Return .F. EndIf @{Default} SetRestFault(400,"Ops") Return .F. @{EndRoute} Return .T. WsMethod POST WsService tstwsrest Local cJson := ::GetContent() Local oParser Local cUser, nUser ::SetContentType( 'application/json' ) @{Route} @{When '/user'} If FwJsonDeserialize(cJson,@oParser) aAdd(aUsers,{cValToChar(oParser:id),oParser:name,cValToChar(oParser:age)}) nUser := Len(aUsers) cUser := '{"id":'+ aTail(aUsers)[1]+; ',"name":"'+aUsers[nUser][2]+; '","age":'+aUsers[nUser][3]+'}' ::SetResponse(cUser) Else SetRestFault(400,'Ops') Return .F. EndIf @{Default} SetRestFault(400,"Ops") Return .F. @{EndRoute} Return .T. WsMethod DELETE WsService tstwsrest Local nUser ::SetContentType( 'application/json' ) @{Route} @{When '/user/{id}'} nUser := aScan(aUsers,{|x| x[1] == @{Param 2} }) If nUser > 0 aDel(aUsers, nUser) aSize(aUsers, Len(aUsers) - 1) Else SetRestFault(400,"Ops") Return .F. EndIf @{Default} SetRestFault(400,"Ops") Return .F. @{EndRoute} Return .T.
0 Comentários