TGViewer
Техлидошная | Golang Infra Dev | Project Leading Техлидошная | Golang Infra Dev | Project Leading @devlead · 519 subscribers
Post #194 1.24K
Довелось тут потрогать grpc-gateway https://grpc-ecosystem.github.io/grpc-gateway/ и оценить в работе на реальной задаче. Суть этой штуки в том, что она транслирует REST запросы в gRPC. То есть вы пишите protobuf а она генерирует вам HTTP сервис.
Для чего это может быть нужно? Например, если ваше приложение состоит из нескольких компонентов, которые должны общаться, и вам не хочется возиться с REST, ведь есть же gRPC с кодогенерацией. Но при этом один из компонентов должен таки REST предоставлять скажем для фронтента. GRPC-gateway поможет избавить от двойной работы.

Как это устроено?

Сначала вы описываете какой-то сервис в protobuf

syntax = "proto3";
package your.service.v1;
option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1";

message StringMessage {
string value = 1;
}

service YourService {
rpc Echo(StringMessage) returns (StringMessage) {}
}

Затем запускаете генератор кода

protoc -I . \
--go_out ./gen/go/ --go_opt paths=source_relative \
--go-grpc_out ./gen/go/ --go-grpc_opt paths=source_relative \
your/service/v1/your_service.proto

Получается несколько файликов, которые содержат http сервис с хэндлерами, которые могут превращать ваши HTTP запросы в gRPC.
Далее используете этот сгенерированный код

mux := runtime.NewServeMux()
opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())}
gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts)

http.ListenAndServe(":8081", mux)

Готово!

Тут же рядом можно нагенерить openAPI схему. REST реализован практически бесплатно. Приколы конечно есть свои у продукта, куда же без них, и куда стремиться тоже, но все равно это огромная польза и экономия времени.

В сочетании с kube generator можно еще
👉 Из гошной структуры сгенерить protobuf файлы
👉 Из гошной структуры генерить клиенты для CRD
👉 И даже сами CRD манифесты
То есть если один из компонентов приложения это кубовый контроллер, то вообще сказка. Описываем нашу апишку в структурах и генерим из нее вообще все. Ну почти, если не считать что куборгенератор может делать пока что только proto2 синтакс и надо все же сам сервис описать, но это все прям мелочи.

Нашел даже реальный пример - Argo продукты, которые используют всю эту машинерию, argo workflow и argocd точно. Так что в проде это используется. Рекомендую присмотреться подробнее, мне зашло.
  • 👍 12
  • ❤ 1
More from @devlead
  1. Nov 7, 2024Всем привет. Знаю, что поиск работы в так называемом "бигтехе" для многих вопрос актуальны…
  2. Oct 24, 2024Наткнулся на шикарный гайд по профилированию go приложений от Dave Cheney. Все понятно и р…
  3. Sep 2, 2024Наткнулся на классную штуку. Визуализация алгоритмов https://www.cs.usfca.edu/~galles/visu…
  4. Aug 12, 2024Запустили менторскую программу, и теперь нас можно найти на Getmentor и Solvery. Наши опыт…
  5. Aug 12, 2024Авито запартнерилось с GetMentor и Solvery Теперь можно сразу посмотреть всех доступных ме…
  6. Aug 6, 2024📖 Наглядные и подробные интерактивные руководства об устройстве TLS протоколов: - версия…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →