Introdução



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.

Implementação



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



Detalhes da Implementação

  • Uso de JsonAPIResponse: O método createJsonResponse é utilizado para criar a estrutura básica da resposta, incluindo o payload.
  • Adição de Headers: A personalização dos headers é feita por meio da criação de um objeto headers e sua inclusão no JSON final.
  • Flexibilidade: Outros headers podem ser adicionados da mesma forma, além do 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.