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 | |
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