WX LightREST

LightREST: A classe lrResponse

A classe lrResponse permite que a função WinDev® (ou Procedimento REST) iniciada durante a chamada a uma rota REST, retorne conteúdo ao solicitante.

Ela implementa os Membros, Constantes e Métodos descritos abaixo.

Membros

Membro Tipo Descrição
Body String Conteúdo da resposta
Status Inteiro Código de retorno. Deve corresponder a uma constante lrResponse::Status
ContentType String Tipo de conteúdo da resposta (TIPO MIME), deve corresponder a uma constante lrResponse::Content
Headers Matriz Associativa de Strings Permite retornar dados ao cliente na forma de pares Tag/Valor no cabeçalho HTTP
IsBinary Booleano Indica que o conteúdo da resposta está em binário (por exemplo, tipo imagem). Neste caso, o membro Body contém dados binários não codificados e retornados como estão para o solicitante. Falso por padrão.

Constantes de tipo "Status"

Utilizadas para preencher lrResponse:Status

Abaixo estão os status mais comumente utilizados. A lista completa está AQUI.

Constante Valor Mensagem Descrição
StatusOK 200 OK Requisição processada com sucesso. A resposta dependerá do método de requisição utilizado.
StatusCreated 201 Created Requisição processada com sucesso e criação de um documento.
StatusAccepted 202 Accepted Requisição processada, mas sem garantia de resultado.
StatusNoContent 204 No Content Requisição processada com sucesso, mas sem informação para retornar.
StatusBadRequest 400 Bad Request A sintaxe da requisição está errada.
StatusUnauthorized 401 Unauthorized Uma autenticação é necessária para acessar o recurso.
StatusForbidden 403 Forbidden O servidor compreendeu a requisição, mas se recusa a executá-la. Ao contrário do erro 401, se autenticar não fará nenhuma diferença. Nos servidores onde a autenticação é necessária, isso geralmente significa que a autenticação foi aceita, mas os direitos de acesso não permitem que o cliente acesse o recurso.
StatusNotFound 404 Not Found Recurso não encontrado.
StatusMethodNotAllowed 405 Method Not Allowed Método de requisição não autorizado.
StatusInternalServerError 500 Internal Server Error Erro interno do servidor.

Constantes de tipo "Content"

Utilizadas para preencher lrResponse:ContentType.

Esta lista não é exaustiva, é possível utilizar qualquer tipo MIME referenciado AQUI.

Constante Tipo MIME Descrição
ContentJSON application/json Dados no formato JSON
ContentXML application/xml Dados no formato XML
ContentTXT text/plain Texto
ContentHTML text/html HTML
ContentGIF image/gif Imagem GIF
ContentBMP image/bmp Imagem BMP
ContentJPG image/jpeg Imagem JPG / JPEG
ContentPNG image/png Imagem PNG
ContentTIFF image/tiff Imagem TIFF
ContentPDF application/pdf PDF
ContentZIP application/zip ZIP
ContentBIN application/octet-stream Dados binários
ContentCSV text/csv Texto CSV

Métodos

DataSourceToVariant(Dados, Force Array) : Variant

Transformação de uma fonte de dados HyperFileSQL em um variant transmissível ao cliente REST.

Se a fonte de dados contém apenas 1 registro, o variant conterá todas as colunas do registro (a menos que Force Array = verdadeiro).

Se a fonte de dados contém vários registros, a função retornará um variant composto de uma matriz de variants (uma iteração por registro).

Assim, obtemos dados diretamente utilizáveis pelo cliente.

Parâmetro Tipo Descrição
Dados Fonte de dados Fonte de dados a ser transformada em Variant
Force Array Booleano Opcional: Valor padrão = Falso
Se verdadeiro, uma matriz de 1 elemento será gerada, mesmo se a fonte de dados contiver apenas um registro.

Retorno: Variant: Contém todos os registros da fonte de dados, prontos para retornar ao cliente REST

Exemplo:

sdData é fonte de dados
oResponse é lrResponse
jsData é JSON
vMyData é variant

// ...
// Colocar aqui a inicialização de uma fonte de dados com as funções HyperfileSQL
// ...

vMyData = oResponse:RecordsToVariant(sdData)
jsData.records = vMyData
stResponse:Body = jsData.ParaString()
stResponse:ContentType = lrResponse::ContentJSON
...
...
RETORNA oResponse

SetHeaderValue(Cabeçalho, Valor)

Atribui um valor a um cabeçalho (HEADER) da resposta REST

Parâmetro Tipo Descrição
Cabeçalho String Nome do cabeçalho a ser inicializado
Valor String Valor a ser armazenado

Retorno: Nenhum

Exemplo:

Neste exemplo, o cliente receberá uma resposta HTTP, em cujo cabeçalho terá o registro de data/hora da execução no cabeçalho TIMESTAMP

PROCEDIMENTO pg_MinhaRota(pRequest é lrRequest) : lrResponse
    oResponse é lrResponse
    
    oResponse:SetHeaderValue("TIMESTAMP", DataSis()+HoraSis())
    oResponse:Body = "Timestamp enviado no HEADER"
    oResponse:ContentType = lrResponse::ContentTXT
    oResponse:Status = lrResponse::StatusOK
    
    RETORNA oResponse