Pergunta
· Dez. 2, 2022

Como criar middleware em uma API REST do Cache?

Bom dia Comunidade!

Estou montando uma API REST dentro do Cache e queria saber como eu coloco um middleware para fazer algumas validações antes de chamar a função de fato, estive procurando na documentação e não consegui localizar, quais as estratégias que vocês recomendam?!

 

Desde Já agradeço a ajuda!

Product version: Caché 2018.1
Discussão (1)2
Entre ou crie uma conta para continuar

Olá @Luiz Henrique Carvalho Martarelli 

Você pode sobrescrever o método OnPreDispatch da sua classe que herda de %CSP.REST

O Método OnPréDispatch é executado antes de que o método que conste na regra de roteamento seja executada.

Abaixo um exemplo onde faço o controle de CORS se o método da requisição for OPTION, e checo token de acesso para todos os endpoint exceto para o endpoints ping. 

O parâmetro pContinue quando verdadeiro sinaliza que o método que está na configuração de roteamento deverá ser executado, se falso responde para quem fez a chamada geralmente com algum HTTPStatus que indique o erro.

ClassMethod OnPreDispatch(pUrl As %String, pMethod As %String, ByRef pContinue As %Boolean) As %Status
{
  #Dim %request   As %CSP.Request     = %request
  #Dim %response  As %CSP.Response    = %response
  If (pMethod = "OPTIONS") // Controle de CORS
  {
    Set pContinue = 0
    //
    Do ..HandleDefaultOptionsRequest(pUrl)
    Do ..HandleDefaultCorsRequest(pUrl)
    //
    Return $System.Status.OK()
  }
  If (pUrl = "/ping")
  { 
    Set pContinue = 1
    //
    Return $System.Status.OK()
  }
  #Dim authorization  As %String          = $ZConvert(%request.GetCgiEnv("HTTP_AUTHORIZATION"), "L")
  #Dim token          As %String          = $Piece(authorization, " ", 2)
  #Dim erro           As %DynamicObject   = {"Erro:" : "Token de autorização é obrigatório"}
  If (token = "")
  {
    Set pContinue           = 0
    Set %response.Status    = ..#HTTP400BADREQUEST
    //
    Write erro.%ToJSON()
    //
    Return $System.Status.OK()
  }
  ElseIf (token '= "t0k3n_d3_v4lid@c@0")
  {
    Set erro                = {"Erro": "Token não autorizado!"}
    Set pContinue           = 0
    Set %response.Status    = ..#HTTP401UNAUTHORIZED
    //
    Write erro.%ToJSON()
    //
    Return $System.Status.OK()
  }
  Set pContinue = 1
  //
  Return $System.Status.OK()
}