Wybór architektonicznego stylu API zależy od wymagań dotyczących skalowalności, szybkości, elastyczności, zgodności i specyfiki konsumentów API.
// Opis protokołu service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } // Implementacja func (s *server) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{Message: "Witaj " + req.Name}, nil }
Czy można używać GraphQL jako zastępstwa dla wszystkich API REST lub gRPC?
Nie, GraphQL nie zawsze jest racjonalny — komplikuje cache'owanie, logowanie, utrudnia zabezpieczenie API i może być nadmiarowy dla prostych zadań, gdzie REST lub gRPC są prostsze i bardziej niezawodne.
Czy REST może zagwarantować ścisłą typizację?
Tylko częściowo. REST definiowany jest przez spójność kontraktów (Swagger/OpenAPI), ale z natury działa z luźnymi formatami (JSON/HTTP), a na przykład gRPC zapewnia żelazną statyczną typizację dzięki schemie Protobuf.
W jakich przypadkach nie zaleca się używania gRPC do publicznych API?
gRPC jest mniej kompatybilny z przeglądarkami i słabo integruje się z infrastrukturą HTTP/1.1 (np. proxy, zapory ogniowe). Dla publicznych API internetowych lepsze są REST lub GraphQL.