Exemplo de Action no ADVPL e no TL++
Neste artigo, apresento um exemplo simples de criação de um action REST tanto em ADVPL quanto em TL++ (REST 2.0). A ideia é ilustrar como capturar parâmetros da URL, validar os dados e retornar um JSON.
🚀 Exemplo no ADVPL
#INCLUDE "TOTVS.CH"
#INCLUDE 'RESTFUL.CH'
WSRESTFUL uDesenv DESCRIPTION EncodeUTF8("XXXX")
WSMETHOD GET rgbToI DESCRIPTION EncodeUTF8("RGB to Int") PATH "/uDesenv/{rgb}"
END WSRESTFUL
WSMETHOD GET rgbToI WSSERVICE uDesenv
Local lRet := .T.
Local aArea := GetArea()
Local oResponse := JsonObject():New()
Local cError := ''
Local bErrorBlock := ErrorBlock( { |e| cError := e:ErrorStack, Break(e) } )
Self:SetContentType("application/json")
Begin Sequence
If Len(::aURLParms) < 02
cError := 'Envie o parâmetro RGB'
Break
EndIf
aColor := StrtoKarr2(::aURLParms[02], '-', .T.)
If Len(aColor) < 3
cError := 'Cor enviada inválida'
Break
EndIf
oResponse["int"] := 1257423
::SetResponse( FWJsonSerialize(oResponse, .F., .F., .T.) )
ErrorBlock(bErrorBlock)
End Sequence
If !Empty(cError)
conout(cError)
SetRestFault(400, EncodeUTF8(cError))
lRet := .F.
EndIf
RestArea(aArea)
Return( lRet )
🟦 Exemplo no TLPP (REST 2.0)
#INCLUDE "tlpp-core.th"
#INCLUDE "tlpp-rest.th"
@Get("/uDesenv/rgbToI/:rgb")
User Function GETrgbToI()
Local aArea := GetArea()
Local cError := ''
Local bErrorBlock := ErrorBlock( { |e| cError := e:ErrorStack, Break(e) } )
Local oResponse := JsonObject():New()
Begin Sequence
jPathParans := oRest:getPathParamsRequest()
If jPathParans == Nil
cError := 'Envie o parâmetro RGB'
Break
EndIf
If Empty(jPathParans['rgb'])
cError := 'Envie o parâmetro RGB'
Break
EndIf
aColor := StrtoKarr2(jPathParans['rgb'], '-', .T.)
If Len(aColor) < 3
cError := 'Cor enviada inválida'
Break
EndIf
oResponse["int"] := 1257423
oRest:setResponse( FWJsonSerialize(oResponse, .F., .F., .T.) )
ErrorBlock(bErrorBlock)
End Sequence
If !Empty(cError)
conout(cError)
oResponse["error"] := cError
oRest:setStatusCode(400)
oRest:setFault( FWJsonSerialize(oResponse, .F., .F., .T.) )
EndIf
RestArea(aArea)
Return( Nil )
URL para teste:
{{SERVER_REST}}/rUDTOOLS/rgbToI/125-125-125?ni=1&page=2
📢 Gostou?
Compartilhe com seus amigos e deixe um comentário! 😎
Um abraço, e até a próxima! 👋