mirror of
https://codeberg.org/JasterV/grpc-slides.git
synced 2026-04-26 18:40:03 +00:00
Update styles and code blocks
This commit is contained in:
parent
6ec101197f
commit
a8811fdc02
2 changed files with 116 additions and 45 deletions
|
|
@ -52,7 +52,7 @@ html * {
|
|||
--r-overlay-element-fg-color: 0, 0, 0;
|
||||
--r-bold-color: #ffb86c;
|
||||
--r-italic-color: #f1fa8c;
|
||||
--r-inline-code-color: #50fa7b;
|
||||
--r-inline-code-color: white;
|
||||
--r-list-bullet-color: #8be9fd;
|
||||
}
|
||||
|
||||
|
|
@ -375,13 +375,6 @@ section.has-light-background h6 {
|
|||
}
|
||||
}
|
||||
|
||||
:root {
|
||||
--r-bold-color: #ffb86c;
|
||||
--r-italic-color: #f1fa8c;
|
||||
--r-inline-code-color: #50fa7b;
|
||||
--r-list-bullet-color: #8be9fd;
|
||||
}
|
||||
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
color: var(--r-bold-color);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,3 @@
|
|||
---
|
||||
---
|
||||
|
||||
# Learning gRPC
|
||||
|
||||
Victor Martinez
|
||||
|
|
@ -221,21 +218,48 @@ Give a short example of why it is backward and forward compatible. Mention tags.
|
|||
## Defining messages
|
||||
|
||||
```protobuf
|
||||
// amend_termination/request/v1/request.proto
|
||||
syntax = "proto3";
|
||||
|
||||
package amend_termination.request.v1;
|
||||
package decline_renewal.request.v1;
|
||||
|
||||
message AmendTerminationRequest {
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
||||
message DeclineRenewalRequest {
|
||||
string policy_id = 1;
|
||||
google.protobuf.Timestamp requested_at = 2;
|
||||
google.protobuf.Timestamp interruption_at = 3;
|
||||
optional string description = 4;
|
||||
optional string description = 3;
|
||||
oneof reason {
|
||||
CustomerTerminateReason customer = 5;
|
||||
PrimaTerminateReason prima = 6;
|
||||
CustomerDeclineRenewalReason customer = 4;
|
||||
}
|
||||
}
|
||||
|
||||
enum CustomerDeclineRenewalReason {
|
||||
CUSTOMER_DECLINE_RENEWAL_REASON_UNSPECIFIED = 0;
|
||||
CUSTOMER_DECLINE_RENEWAL_REASON_COMPETITOR_OFFER = 1;
|
||||
CUSTOMER_DECLINE_RENEWAL_REASON_VEHICLE_SOLD = 2;
|
||||
CUSTOMER_DECLINE_RENEWAL_REASON_VEHICLE_NOT_PURCHASED = 3;
|
||||
CUSTOMER_DECLINE_RENEWAL_REASON_VEHICLE_DEREGISTRATION = 4;
|
||||
CUSTOMER_DECLINE_RENEWAL_REASON_NO_INSURANCE_WANTED = 5;
|
||||
CUSTOMER_DECLINE_RENEWAL_REASON_DOES_NOT_KNOW = 6;
|
||||
CUSTOMER_DECLINE_RENEWAL_REASON_WANTS_GREEN_CARD = 7;
|
||||
CUSTOMER_DECLINE_RENEWAL_REASON_INCORRECT_EFFECTIVE_DATE = 8;
|
||||
CUSTOMER_DECLINE_RENEWAL_REASON_INCORRECT_PERSONAL_DATA = 9;
|
||||
CUSTOMER_DECLINE_RENEWAL_REASON_INCORRECT_DATA_OTHER = 10;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Defining messages
|
||||
|
||||
```protobuf
|
||||
syntax = "proto3";
|
||||
|
||||
package decline_renewal.response.v1;
|
||||
|
||||
message DeclineRenewalResponse {
|
||||
string policy_id = 1;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
|
@ -243,16 +267,26 @@ message AmendTerminationRequest {
|
|||
## Defining a service
|
||||
|
||||
```protobuf
|
||||
// service/v1/service.proto
|
||||
syntax = "proto3";
|
||||
|
||||
package service.v1;
|
||||
|
||||
import "amend_termination/request/v1/request.proto";
|
||||
import "amend_termination/response/v1/response.proto";
|
||||
import "es_policy_grpc/messages/amend_termination/request/v1/request.proto";
|
||||
import "es_policy_grpc/messages/amend_termination/response/v1/response.proto";
|
||||
// Skipping other imports for the sake of the slide
|
||||
|
||||
service PolicyManagementService {
|
||||
rpc AmendTermination(AmendTerminationRequest) returns (AmendTerminationResponse);
|
||||
rpc AmendTermination(amend_termination.request.v1.AmendTerminationRequest)
|
||||
returns (amend_termination.response.v1.AmendTerminationResponse);
|
||||
|
||||
rpc TerminatePolicy(terminate_policy.request.v1.TerminatePolicyRequest)
|
||||
returns (terminate_policy.response.v1.TerminatePolicyResponse);
|
||||
|
||||
rpc WithdrawPolicy(withdraw_policy.request.v1.WithdrawPolicyRequest)
|
||||
returns (withdraw_policy.response.v1.WithdrawPolicyResponse);
|
||||
|
||||
rpc DeclineRenewal(decline_renewal.request.v1.DeclineRenewalRequest)
|
||||
returns (decline_renewal.response.v1.DeclineRenewalResponse);
|
||||
}
|
||||
```
|
||||
|
||||
|
|
@ -339,19 +373,30 @@ These are only a few notable features, it provides more for sure
|
|||
|
||||
```rust
|
||||
// build.rs
|
||||
|
||||
let mut prost_build = prost_build::Config::new();
|
||||
|
||||
prost_build.protoc_arg("--experimental_allow_proto3_optional");
|
||||
prost_build.compile_protos(
|
||||
&["<path_to_proto_messages>"],
|
||||
&[
|
||||
"proto/es_policy_grpc/messages/terminate_policy/request/v1/request.proto",
|
||||
"proto/es_policy_grpc/messages/terminate_policy/response/v1/response.proto",
|
||||
"proto/es_policy_grpc/messages/withdraw_policy/request/v1/request.proto",
|
||||
"proto/es_policy_grpc/messages/withdraw_policy/response/v1/response.proto",
|
||||
"proto/es_policy_grpc/messages/decline_renewal/request/v1/request.proto",
|
||||
"proto/es_policy_grpc/messages/decline_renewal/response/v1/response.proto",
|
||||
"proto/es_policy_grpc/messages/amend_termination/request/v1/request.proto",
|
||||
"proto/es_policy_grpc/messages/amend_termination/response/v1/response.proto",
|
||||
],
|
||||
&["proto"],
|
||||
)?;
|
||||
|
||||
tonic_build::configure()
|
||||
.protoc_arg("--experimental_allow_proto3_optional")
|
||||
.compile_protos(
|
||||
&["proto/es_policy_grpc/service/v1/service.proto"],
|
||||
&["proto"],
|
||||
)?;
|
||||
)
|
||||
.unwrap();
|
||||
Ok(())
|
||||
```
|
||||
|
||||
note:
|
||||
|
|
@ -364,6 +409,22 @@ First we need to talk about how do we generate code from our protobuf definition
|
|||
```rust
|
||||
// lib.rs
|
||||
|
||||
pub mod messages {
|
||||
pub mod terminate_policy {
|
||||
pub mod request {
|
||||
pub mod v1 {
|
||||
include!(concat!(env!("OUT_DIR"), "/es_policy_grpc.messages.terminate_policy.request.v1.rs"));
|
||||
}
|
||||
}
|
||||
|
||||
pub mod response {
|
||||
pub mod v1 {
|
||||
include!(concat!(env!("OUT_DIR"), "/es_policy_grpc.messages.terminate_policy.response.v1.rs"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub mod policy_service {
|
||||
pub mod v1 {
|
||||
include!(concat!(env!("OUT_DIR"), "/es_policy_grpc.service.v1.rs"));
|
||||
|
|
@ -397,13 +458,15 @@ We get a trait generated from the Protobuf Service definition
|
|||
|
||||
```rust
|
||||
// main.rs
|
||||
use tonic::Server as GrpcServer;
|
||||
use es_policy_grpc::policy_service::v1::PolicyManagementServiceServer as PolicyManagementServerStub;
|
||||
|
||||
let server =
|
||||
// gRPC server implemented on top of HTTP2
|
||||
Server::builder()
|
||||
// gRPC server provided by Tonic
|
||||
GrpcServer::builder()
|
||||
.add_service(
|
||||
// Policy Management Server Stub
|
||||
PolicyManagementServiceServer::new(
|
||||
// Generated Policy Management Server Stub
|
||||
PolicyManagementServerStub::new(
|
||||
// Implementation of the service
|
||||
PolicyManagementServiceImpl::new(application)
|
||||
)
|
||||
|
|
@ -424,17 +487,29 @@ Highlight the fact that at the end of the day the gRPC server will be listening
|
|||
## Building a client
|
||||
|
||||
```rust
|
||||
let mut client =
|
||||
// Auto-generated client stub
|
||||
PolicyManagementServiceClient::connect("http://[::1]:50051").await?;
|
||||
use es_policy_grpc::policy_service::v1::PolicyManagementServiceClient as PolicyManagementClientStub;
|
||||
use es_policy_grpc::messages::decline_renewal::request::v1::{
|
||||
DeclineRenewalRequest,
|
||||
DeclineRenewalReason,
|
||||
CustomerDeclineRenewalReason
|
||||
};
|
||||
use tonic::{metadata::MetadataValue, Request};
|
||||
|
||||
let mut request = tonic::Request::new(GenerateContractRequest {
|
||||
// ..
|
||||
let mut client = PolicyManagementClientStub::connect("http://[::1]:50051").await?;
|
||||
|
||||
let mut request = Request::new(DeclineRenewalRequest {
|
||||
policy_id: Uuid::new_v4(),
|
||||
requested_at: DateTime::now(),
|
||||
description: Some("dummy".into()),
|
||||
reason: DeclineRenewalReason::Customer(
|
||||
CustomerDeclineRenewalReason::VehicleSold
|
||||
)
|
||||
});
|
||||
|
||||
let token: MetadataValue<_> = "Bearer some-auth-token".parse()?;
|
||||
|
||||
request.metadata_mut.insert("authentication", token);
|
||||
request.metadata_mut.insert(http::AUTHORIZATION, token);
|
||||
|
||||
let _response = client.generate_contract(request).await?;
|
||||
```
|
||||
|
|
@ -455,14 +530,17 @@ They allow you to:
|
|||
## Interceptors in practice
|
||||
|
||||
```rust
|
||||
use es_policy_grpc::policy_service::v1::PolicyManagementServiceServer as PolicyManagementServerStub;
|
||||
use tonic::{metadata::MetadataValue, Request, Response, Status};
|
||||
|
||||
fn check_auth(req: Request<()>) -> Result<Request<()>, Status> {
|
||||
match req.metadata().get("authorization") {
|
||||
match req.metadata().get(http::AUTHORIZATION) {
|
||||
Some(t) if is_valid(t) => Ok(req),
|
||||
_ => Err(Status::unauthenticated("No valid auth token")),
|
||||
}
|
||||
}
|
||||
|
||||
let svc = PolicyManagementServiceServer::with_interceptor(
|
||||
let svc = PolicyManagementServerStub::with_interceptor(
|
||||
PolicyManagementServiceImpl::new(application),
|
||||
check_auth
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in a new issue