Porque hay vida más allá de REST/JSON
Framework RPC moderno y de alto rendimiento que puede correr en cualquier ambiente, desarrollado inicialmente por google.
Técnica para la comunicación entre procesos en una o más computadoras conectadas a una red.
Las RPC son muy utilizadas dentro de la comunicación cliente-servidor. Siendo el cliente el que inicia el proceso solicitando al servidor que ejecute cierto procedimiento o función y enviando este de vuelta el resultado de dicha operación al cliente.
Un proceso básico de RPC puede separarse en 6 estaciones.
gRPC está basado en la idea de definir servicios, especificando métodos que pueden se llamados remotamente con parámetros y respuesta con tipos definidos.
Por defecto, gRPC usa Protocol Buffers (¿?) como el lenguaje de definición de interfaces para describir ambas interfaces del servicio y la estructura del payload de los mensajes.
Es el Mecanismo extensible creado por Google para serializar data estructurada, independiente del lenguaje o plataforma.
Google desarrollo Protobuf de manera interna desde el 2001, actualmente sigue realizando aportes a los generadores de código en distintos lenguajes.
Los principales objetivos de los ProtoBuf ha sido alcanzar simpleza y alto desempeño, ha sido diseñado para ser más rápido y pequeño que XML.
Para usar un Protocol Buffers se debe:
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: person.proto
require 'google/protobuf'
Google::Protobuf::DescriptorPool.generated_pool.build do
add_message "Person" do
optional :name, :string, 1
optional :id, :int32, 2
optional :email, :string, 3
end
end
Person = Google::Protobuf::DescriptorPool.generated_pool.lookup("Person").msgclass
john = Person.new()
john.id = 1234
john.name = 'John Doe'
john.mail = 'jdoe@example.com'
Some::Module.method(person: john)
syntax = "proto3";
package helloworld;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
protoc --ruby_out=lib \
--grpc_out=lib \
--plugin=protoc-gen-grpc=`which grpc_ruby_plugin` \
./path_to_file.proto
Ruby
$ protoc -I helloworld/ helloworl/helloworld.proto \
--go_out=plugins=grpc:helloworld
Go
Ruby
Go
$ ruby greeter_server.rb
$ ruby greeter_client.rb
$ go run greeter_client/main.go
$ go run greeter_server/main.go