Esta seção explica como criar um backend sem fazer uso das configurações prontas para os frameworks Spring
ou Micronaut
. Você encontrará as ferramentas necessárias para criar um Backend(BFF) para o seu projeto.
É importante reforçar que:
Starters
da configuração inicial já fazem todo o processo descrito nesta página e adicionam automaticamente as configurações abaixo.Para configurar seu BFF manualmente, siga os seguintes passos:
<dependency>
<groupId>br.com.zup.beagle</groupId>
<artifactId>framework</artifactId>
<version>${beagle_version}</version>
</dependency>
ObjectMapper
do JacksonNa configuração do projeto no backend é necessário realizar o setup doObjectMapper
do Jackson para o Beagle:
BeagleModule
no seuObjectMapper
:val mapper = // Adicione aqui o inicializador do seu `ObjectMapper`
mapper.registerModule(BeagleModule)
Para que o Beagle tenha o funcionamento esperado na filtragem de elementos por plataforma, é necessário realizar algumas configurações.
Registre um filtro ou um interceptor que verifique a resposta de seu BFF e filtre os elementos enviados de acordo com a plataforma especificada no header customizado beagle-platform
.
A classe BeaglePlatformUtil
foi criada disponibilizando algumas ferramentas para facilitar essa configuração e ser usada em seu filtro/interceptor. Elas são especificadas abaixo:
Constante | Descrição |
---|---|
BEAGLE_PLATFORM_HEADER | Nome do campo header utilizado pelo Beagle para verificar com qual plataforma o BFF está interagindo |
Método | Descrição |
---|---|
treatBeaglePlatform(currentPlatform, jsonNode) | Retorna o JsonNode passado como parâmetro jsonNode com os elementos cuja plataforma não correspondem ao parâmetro currentPlatform removidos |
Um exemplo de interceptor para Spring:
class BeaglePlatformInterceptor(private val objectMapper: ObjectMapper) : HandlerInterceptor {
override fun preHandle(request: HttpServletRequest, response: HttpServletResponse, handler: Any): Boolean {
request.setAttribute(
BeaglePlatformUtil.BEAGLE_PLATFORM_HEADER,
request.getHeader(BeaglePlatformUtil.BEAGLE_PLATFORM_HEADER)
)
return true
}
override fun postHandle(
request: HttpServletRequest,
response: HttpServletResponse,
handler: Any,
modelAndView: ModelAndView?
) {
val responseWrapper = (response as ContentCachingResponseWrapper)
val jsonTree = this.objectMapper.readTree(responseWrapper.contentAsByteArray)
BeaglePlatformUtil.treatBeaglePlatform(
request.getHeader(BeaglePlatformUtil.BEAGLE_PLATFORM_HEADER),
jsonTree
)
val jsonData = jsonTree.toPrettyString()
responseWrapper.resetBuffer()
responseWrapper.outputStream.write(jsonData.toByteArray())
responseWrapper.setContentLength(jsonData.length)
}
}
No exemplo acima, o preHandle
passa a informação da plataforma pela qual a requisição foi feita como um atributo da request para que ele possa ser acessado posteriormente pelo BFF e facilite a identificação da plataforma. Já o postHandle
realiza o trabalho de filtrar os elementos de acordo com a plataforma na resposta de seu BFF.
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.