A personalização de headers em APIs REST é essencial para atender a requisitos específicos de integração ou conformidade.
No Datasul REST, essa funcionalidade pode ser implementada de forma eficiente utilizando a classe JsonAPIResponse
em conjunto com objetos JSON.
Essa abordagem permite adicionar headers personalizados, como o Content-Type
, diretamente ao JSON de resposta, mantendo a consistência com as práticas padrão e oferecendo flexibilidade para configurações adicionais.
Abaixo está o exemplo de implementação para configurar um header Content-Type com o valor application/custom.content.type+json:
PROCEDURE piCustom: DEFINE INPUT PARAMETER jsonInput AS JSONObject NO-UNDO. DEFINE OUTPUT PARAMETER jsonOutput AS JSONObject NO-UNDO. DEFINE VARIABLE oResponse AS JsonAPIResponse NO-UNDO. DEFINE VARIABLE oPayload AS JSONObject NO-UNDO. DEFINE VARIABLE oHeaders AS JSONObject NO-UNDO. /* Criação do payload */ ASSIGN oPayload = NEW JsonObject(). oPayload:ADD("response", "OK"). /* Criação da resposta padrão usando JsonAPIResponse */ ASSIGN oResponse = NEW JsonAPIResponse(oPayload). ASSIGN jsonOutput = oResponse:createJsonResponse(). /* Adição dos headers personalizados */ ASSIGN oHeaders = NEW JsonObject(). oHeaders:ADD("Content-Type", "application/custom.content.type+json"). jsonOutput:ADD("headers", oHeaders). END PROCEDURE. |
Esse deve ser o padrão do JSON a ser seguido para envio à camada middleware, permitindo que possamos personalizar os headers:
{ "payload": { "key": "value" }, "headers": { "Content-Type": "application/custom.content.type+json" } } |
JsonAPIResponse
: O método createJsonResponse
é utilizado para criar a estrutura básica da resposta, incluindo o payload.headers
e sua inclusão no JSON final.Content-Type
, conforme as necessidades da API.Um exemplo completo acompanha a documentação, contendo o código-fonte, um compilado de teste e uma coleção do Postman para validação. Para testar, basta adicionar a pasta content
ao propath,
e nas requisições do postman, ajustar o host, a porta e as credenciais ao ambiente desejado.