gRPC é uma tecnologia nova e de rápido crescimento que permite que diferentes sistemas se comuniquem por meio de uma conexão de rede. É baseado em ** HTTP 2 ** e é uma alternativa ao padrão REST. A proposta do gRPC é que o cliente interaja com o servidor através de chamadas de função simples. Essas funções são códigos gerados automaticamente por meio da ferramenta gRPC.
Essa biblioteca permite que você crie BFFs do Beagle e exiba suas screens com gRPC. Ele atua como um tradutor, convertendo JSONs do Beagle em protocol buffers. A lib fornece uma abstração que implementa um serviço gRPC que possibilita o registro de suas screens e um método que as retorna para um cliente gRPC.
dependencies {
...
implementation("br.com.zup:beagle-grpc-backend:${beagleGrpcVersion}")
implementation("net.devh:grpc-server-spring-boot-starter:${springGrpcVersion}")
}
<dependencies>
...
<dependency>
<groupId>net.devh</groupId>
<artifactId>grpc-server-spring-boot-starter</artifactId>
<version>${spring.grpc.version}</verion>
</dependency>
<dependency>
<groupId>br.com.zup</groupId>
<artifactId>beagle-grpc-backend</artifactId>
<version>${beagle.grpc.version}</verion>
</dependency>
</dependencies>
dependencies {
...
implementation("br.com.zup:beagle-grpc-backend:${beagleGrpcVersion}")
}
<dependencies>
<dependency>
<groupId>br.com.zup</groupId>
<artifactId>beagle-grpc-backend</artifactId>
<version>${beagle.grpc.version}</verion>
</dependency>
</dependencies>
import br.com.zup.beagle.widget.layout.Container
import br.com.zup.beagle.widget.layout.Screen
import br.com.zup.beagle.widget.layout.ScreenBuilder
import br.com.zup.beagle.widget.ui.Text
class HomeScreen(private val parameters: String) : ScreenBuilder {
override fun build() = Screen(
child = Container(
children = listOf(
Text("Hello. This is a $parameters!")
)
)
)
}
import br.com.zup.beagle.core.Style
import br.com.zup.beagle.ext.applyStyle
import br.com.zup.beagle.widget.action.Navigate
import br.com.zup.beagle.widget.action.Route
import br.com.zup.beagle.widget.core.EdgeValue
import br.com.zup.beagle.widget.core.UnitValue
import br.com.zup.beagle.widget.layout.Screen
import br.com.zup.beagle.widget.layout.ScreenBuilder
import br.com.zup.beagle.widget.ui.Button
object SplashScreen : ScreenBuilder {
override fun build() = Screen(
child = Button(
text = "Button example",
onPress = listOf(
Navigate.PushView(
Route.Remote(
"text",
true
)
)
),
).applyStyle(
style = Style(
margin = EdgeValue(
top = UnitValue.real(15)
)
)
)
)
}
import br.com.zup.beagle.widget.layout.ScreenBuilder
import br.com.zup.grpcbff.interceptor.BeagleHeadersInterceptor
import br.com.zup.grpc.BeagleScreenService
import net.devh.boot.grpc.server.service.GrpcService
import br.com.zup.grpcbff.screen.HomeScreen
import br.com.zup.grpcbff.screen.SplashScreen
@GrpcService
class MyBeagleAppService: BeagleScreenService() {
override fun screens(): Map<String, (String) -> ScreenBuilder> {
return mapOf(
"home" to { params -> HomeScreen(params) },
"splash" to { SplashScreen },
)
}
}
import br.com.zup.beagle.widget.layout.ScreenBuilder
import br.com.zup.grpc.BeagleScreenService
import br.com.zup.screen.SplashScreen
import br.com.zup.screen.HomeScreen
import javax.inject.Singleton
@Singleton
class MyBeagleAppService: BeagleScreenService() {
override fun screens(): Map<String, (String) -> ScreenBuilder> {
return mapOf(
"splash" to { SplashScreen },
"home" to { params -> HomeScreen(params) }
)
}
}
./gradlew.bat run
./mvnw.bat mn:run
./mvnw.bat spring-boot:run
./gradlew run
./mvnw mn:run
./mvnw spring-boot:run
Pronto! Sua aplicação estará disponível localmente no endereço:
http://localhost:50051/
http://localhost:9090/
Finalmente, voce pode acessar os retornos do seu seu serviço gRPC usando o método getScreen do BeagleScreenService que foi implementado.
Para este exemplo, você precisará de um cliente para obter a resposta do serviço. Recomendamos o BloomRPC para simular uma solicitação local em sua API gRPC
Você também precisará adicionar os arquivos proto da lib do Beagle gRPC no cliente bloomRPC. Você pode acessar esses arquivos aqui
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.