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
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() }