Error 500 - API REST

Pessoal, bom dia. Tenho uma API REST que me retorna um certo registro após informado um parâmetro em sua URL, os registros retornados são de uma tabela chamada ZZ0 (tabela customizada) nessa tabela guardamos informações de anexos amarrados por um identificador onde o mesmo faz referencia a cotações, basicamente temos a seguinte estrutura na tabela.

ZZ0FILIAL NOT NULL CHAR(2)ZZ0_NUM NOT NULL CHAR(6)ZZ0_EXTENS NOT NULL CHAR(10)ZZ0_ENCODE BLOBZZ0_NOME NOT NULL CHAR(100) ZZ0_USERGI NOT NULL CHAR(17)D_E_L_E_T NOT NULL CHAR(1)RE_C_N_O NOT NULL NUMBERRE_C_D_E_L NOT NULL NUMBER

A minha função faz o seguinte, ao informar um número ZZ0_NUM ela retorna dados como o próprio número e o ZZ0_NOME, até ai tudo bem, ele retorna corretamente os dados. O problema ocorre quando tento retornar as informações do campo ZZ0_ENCODE, onde os registros são do tipo BLOB e armazena o BASE64 dos meus arquivos que foram convertidos.

Abaixo segue estrutura da API.

WSMETHOD GET GetById PATHPARAM id WSSERVICE MeuRest
    Local lPost    := .T.
    Local oResponse := JsonObject():New()

    Local aTarefas := {}

    ::SetContentType("application/json")

    cAlias := GetNextAlias()
    cQuery := " SELECT "
    cQuery += "    ZZ0.ZZ0_NUM, "
    cQuery += "    ZZ0.ZZ0_NOME "
    cQuery += " FROM " + RetSqlName("ZZ0") + " ZZ0 "
    cQuery += " WHERE "
    cQuery += "     ZZ0.D_E_L_E_T_ = ' ' AND ZZ0.ZZ0_NUM = '"+::id+"' "


    MPSysOpenQuery(cQuery, cAlias)
    If (cAlias)->(!Eof())
        lPost := .T.
        oResponse['code'] := (cAlias)->ZZ0_NUM
        oResponse['description'] := (cAlias)->ZZ0_NOME
        cResponse := FWJsonSerialize(oResponse, .F., .F., .T.)
        ::SetResponse(cResponse)
    Else
        lPost := .F.
        cRetorno := "Cotacao não encontrado!"
        SetRestFault(404, cRetorno)
    EndIf
    (cAlias)->(DbCloseArea())
Return lPost

O retorno abaixo ilustra que a API está funcionando com os campos mencionados acima. sucesso.JPG

Após a troca do campo ZZ0_NOME pelo ZZ0_ENCODE é mostrado o seguinte erro.

Abaixo alteração no fonte:

WSMETHOD GET GetById PATHPARAM id WSSERVICE MeuRest
    Local lPost    := .T.
    Local oResponse := JsonObject():New()

    Local aTarefas := {}

    ::SetContentType("application/json")

    cAlias := GetNextAlias()
    cQuery := " SELECT "
    cQuery += "    ZZ0.ZZ0_NUM, "
    cQuery += "    ZZ0.ZZ0_ENCODE "
    cQuery += " FROM " + RetSqlName("ZZ0") + " ZZ0 "
    cQuery += " WHERE "
    cQuery += "     ZZ0.D_E_L_E_T_ = ' ' AND ZZ0.ZZ0_NUM = '"+::id+"' "


    MPSysOpenQuery(cQuery, cAlias)
    If (cAlias)->(!Eof())
        lPost := .T.
        oResponse['code'] := (cAlias)->ZZ0_NUM
        oResponse['description'] := (cAlias)->ZZ0_ENCODE
        cResponse := FWJsonSerialize(oResponse, .F., .F., .T.)
        ::SetResponse(cResponse)
    Else
        lPost := .F.
        cRetorno := "Cotacao não encontrado!"
        SetRestFault(404, cRetorno)
    EndIf
    (cAlias)->(DbCloseArea())
Return lPost
compartilhar
  • Quando ocorre o erro 500, normalmente sua API gerou exceção, qual erro ocorreu? Você consegue normalmente ver o erro no console.

    Daniel Mendes   14 de Apr de 2021
  • Sim, ele retornou o seguinte erro -> invalid field name in Alias SCGN000008->ZZ0_ENCODE on REST_MEUREST:GET_GETBYID(MEUREST.PRW) 14/04/2021 16:34:41 line : 83

    Só não consegui entender ainda o motivo de reclamar que não existe o ZZ0-ENCODE.

    Matheus Affonso   14 de Apr de 2021
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags advpl rest ou faça a sua própria pergunta.