[{"data":1,"prerenderedAt":331},["ShallowReactive",2],{"content:\u002F07-rpc-grpc\u002Fresources":3},{"title":4,"description":5,"path":6,"body":7},"Дополнительные материалы: RPC, gRPC и Protobuf","Русскоязычная подборка по gRPC и Protobuf: практические Go-статьи, видео и документация, которую стоит держать рядом при генерации и отладке сервисов.","\u002F07-rpc-grpc\u002Fresources",{"type":8,"value":9,"toc":321},"minimark",[10,15,18,23,61,65,120,124,170,174,233,237,269,273],[11,12,14],"h1",{"id":13},"дополнительные-материалы-по-rpc-grpc-и-protobuf","Дополнительные материалы по RPC, gRPC и Protobuf",[16,17,5],"p",{},[19,20,22],"h2",{"id":21},"grpc-и-rpc-когда-rest-уже-не-хватает","gRPC и RPC: когда REST уже не хватает",[24,25,26,37,45,53],"ul",{},[27,28,29,36],"li",{},[30,31,35],"a",{"href":32,"rel":33},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F774796\u002F",[34],"nofollow","Пишем gRPC сервис на Go: сервис авторизации | Хабр"," — большой практический туториал с сервером, клиентом и production-структурой.",[27,38,39,44],{},[30,40,43],{"href":41,"rel":42},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fotus\u002Farticles\u002F780720\u002F",[34],"gRPC и Protocol Buffers: современный подход к обмену данными между сервисами | Хабр \u002F OTUS"," — обзор HTTP\u002F2, protobuf и сценариев, где gRPC удобнее REST.",[27,46,47,52],{},[30,48,51],{"href":49,"rel":50},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F961000\u002F",[34],"От REST к gRPC и GraphQL: современный подход к API | Хабр"," — сравнение подходов к API с точки зрения производительности и архитектуры.",[27,54,55,60],{},[30,56,59],{"href":57,"rel":58},"https:\u002F\u002Fgrpc.io\u002Fdocs\u002Fwhat-is-grpc\u002Fintroduction\u002F",[34],"Introduction to gRPC"," — официальный минимум по RPC, сервисам, методам и роли Protocol Buffers.",[19,62,64],{"id":63},"protobuf-схема-сообщения-и-совместимость","Protobuf: схема, сообщения и совместимость",[24,66,67,75,83,104,112],{},[27,68,69,74],{},[30,70,73],{"href":71,"rel":72},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F252455\u002F",[34],"Go и Protocol Buffers: толика практики | Хабр"," — старый, но понятный быстрый старт по генерации и использованию protobuf в Go.",[27,76,77,82],{},[30,78,81],{"href":79,"rel":80},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F276905\u002F",[34],"Go и Protocol Buffers: ускорение | Хабр"," — полезно для разговора о цене кодирования, reflection и производительности.",[27,84,85,90,91,95,96,99,100,103],{},[30,86,89],{"href":87,"rel":88},"https:\u002F\u002Fprotobuf.dev\u002F",[34],"Protocol Buffers Documentation"," — официальный справочник по ",[92,93,94],"code",{},".proto",", scalar types, ",[92,97,98],{},"oneof",", ",[92,101,102],{},"map"," и field numbers.",[27,105,106,111],{},[30,107,110],{"href":108,"rel":109},"https:\u002F\u002Fprotobuf.dev\u002Fprogramming-guides\u002Fproto3\u002F",[34],"Language Guide: proto3"," — основной источник по синтаксису proto3 и совместимости схем.",[27,113,114,119],{},[30,115,118],{"href":116,"rel":117},"https:\u002F\u002Fprotobuf.dev\u002Fbest-practices\u002Fdos-donts\u002F",[34],"Proto Best Practices"," — правила, которые спасают от поломки клиентов: не переиспользовать теги, резервировать удаленные поля.",[19,121,123],{"id":122},"grpc-в-go-сервер-клиент-и-codegen","gRPC в Go: сервер, клиент и codegen",[24,125,126,136,154,162],{},[27,127,128,132,133,135],{},[30,129,131],{"href":32,"rel":130},[34],"Пишем gRPC сервис на Go | Хабр"," — практический код сервера, клиента, ",[92,134,94],{},", миграций и слоев приложения.",[27,137,138,143,144,99,147,99,150,153],{},[30,139,142],{"href":140,"rel":141},"https:\u002F\u002Fgrpc.io\u002Fdocs\u002Flanguages\u002Fgo\u002Fquickstart\u002F",[34],"Quick start: Go | gRPC"," — установка ",[92,145,146],{},"protoc",[92,148,149],{},"protoc-gen-go",[92,151,152],{},"protoc-gen-go-grpc"," и первый запуск.",[27,155,156,161],{},[30,157,160],{"href":158,"rel":159},"https:\u002F\u002Fgrpc.io\u002Fdocs\u002Flanguages\u002Fgo\u002Fbasics\u002F",[34],"Basics tutorial: Go | gRPC"," — пример сервиса, сервера, клиента и всех типов RPC на Go.",[27,163,164,169],{},[30,165,168],{"href":166,"rel":167},"https:\u002F\u002Fgithub.com\u002Fgrpc\u002Fgrpc-go\u002Ftree\u002Fmaster\u002Fexamples",[34],"grpc-go examples"," — официальные примеры для server setup, client setup, metadata и streaming.",[19,171,173],{"id":172},"grpc-context-deadlines-и-ошибки","gRPC: context, deadlines и ошибки",[24,175,176,184,192,200,218],{},[27,177,178,183],{},[30,179,182],{"href":180,"rel":181},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fpt\u002Farticles\u002F764850\u002F",[34],"Пакет context в Go: взгляд профессионала | Хабр \u002F Positive Technologies"," — база для deadlines, cancellation и propagation между сервисами.",[27,185,186,191],{},[30,187,190],{"href":188,"rel":189},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F827544\u002F",[34],"Golang: context изнутри | Хабр"," — помогает понять, что реально происходит при отмене RPC.",[27,193,194,199],{},[30,195,198],{"href":196,"rel":197},"https:\u002F\u002Fgrpc.io\u002Fdocs\u002Fguides\u002Fdeadlines\u002F",[34],"Deadlines | gRPC"," — почему дедлайны нужно задавать явно и как они распространяются между сервисами.",[27,201,202,207,208,99,211,99,214,217],{},[30,203,206],{"href":204,"rel":205},"https:\u002F\u002Fgrpc.io\u002Fdocs\u002Fguides\u002Fstatus-codes\u002F",[34],"Status Codes | gRPC"," — канонические коды ошибок gRPC и различия между ",[92,209,210],{},"Unavailable",[92,212,213],{},"InvalidArgument",[92,215,216],{},"FailedPrecondition",".",[27,219,220,225,226,99,229,232],{},[30,221,224],{"href":222,"rel":223},"https:\u002F\u002Fpkg.go.dev\u002Fgoogle.golang.org\u002Fgrpc\u002Fstatus",[34],"Package status"," — создание и разбор gRPC-ошибок в Go через ",[92,227,228],{},"status.Error",[92,230,231],{},"status.FromError",", details.",[19,234,236],{"id":235},"grpc-как-adapter-в-clean-architecture","gRPC как adapter в Clean Architecture",[24,238,239,245,253,261],{},[27,240,241,244],{},[30,242,131],{"href":32,"rel":243},[34]," — пример, где транспорт можно рассматривать как внешний adapter.",[27,246,247,252],{},[30,248,251],{"href":249,"rel":250},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F1025068\u002F",[34],"Clean Architecture + DDD в Go | Хабр"," — помогает не протащить generated Protobuf DTO внутрь domain.",[27,254,255,260],{},[30,256,259],{"href":257,"rel":258},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F911018\u002F",[34],"Go-микросервисы: Clean Architecture и DDD | Хабр"," — полезно для стандартизации границ transport\u002Fapplication\u002Fdomain.",[27,262,263,268],{},[30,264,267],{"href":265,"rel":266},"https:\u002F\u002Fprotobuf.dev\u002Freference\u002Fgo\u002Fgo-generated\u002F",[34],"Go Generated Code Guide"," — форма generated DTO и правила работы с ними.",[19,270,272],{"id":271},"streaming-observability-и-production-практики-grpc","Streaming, observability и production-практики gRPC",[24,274,275,283,291,299,313],{},[27,276,277,282],{},[30,278,281],{"href":279,"rel":280},"https:\u002F\u002Fhabr.com\u002Fru\u002Fpost\u002F563872",[34],"gRPCurl — curl для gRPC-серверов | Хабр"," — практичный инструмент для отладки gRPC API, reflection и ручных запросов.",[27,284,285,290],{},[30,286,289],{"href":287,"rel":288},"https:\u002F\u002Fgrpc.io\u002Fdocs\u002Fguides\u002Finterceptors\u002F",[34],"Interceptors | gRPC"," — общий слой для логирования, auth, metrics, tracing и обработки ошибок.",[27,292,293,298],{},[30,294,297],{"href":295,"rel":296},"https:\u002F\u002Fgrpc.io\u002Fdocs\u002Fguides\u002Fhealth-checking\u002F",[34],"Health Checking | gRPC"," — стандартный health service для Kubernetes, балансировщиков и клиентов.",[27,300,301,306,307,310,311,217],{},[30,302,305],{"href":303,"rel":304},"https:\u002F\u002Fgrpc.io\u002Fdocs\u002Fguides\u002Freflection\u002F",[34],"Reflection | gRPC"," — server reflection для ",[92,308,309],{},"grpcurl"," и отладки без локальных ",[92,312,94],{},[27,314,315,320],{},[30,316,319],{"href":317,"rel":318},"https:\u002F\u002Fgrpc.io\u002Fdocs\u002Fguides\u002Fflow-control\u002F",[34],"Flow Control | gRPC"," — обязательно для streaming RPC, чтобы не сломать получателя слишком быстрым отправителем.",{"title":322,"searchDepth":323,"depth":323,"links":324},"",2,[325,326,327,328,329,330],{"id":21,"depth":323,"text":22},{"id":63,"depth":323,"text":64},{"id":122,"depth":323,"text":123},{"id":172,"depth":323,"text":173},{"id":235,"depth":323,"text":236},{"id":271,"depth":323,"text":272},1781022064669]