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