{"id":28910650,"url":"https://github.com/ekkinox/grpc-demo","last_synced_at":"2026-04-22T23:35:54.862Z","repository":{"id":40462528,"uuid":"485028273","full_name":"ekkinox/grpc-demo","owner":"ekkinox","description":"gRPC - SOA booster","archived":false,"fork":false,"pushed_at":"2022-05-06T20:06:47.000Z","size":171,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-21T18:14:28.368Z","etag":null,"topics":["grpc","grpc-go","grpc-php","http2","protobuf","soa"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ekkinox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-04-24T12:59:42.000Z","updated_at":"2022-05-04T12:55:53.000Z","dependencies_parsed_at":"2022-08-09T21:12:19.782Z","dependency_job_id":null,"html_url":"https://github.com/ekkinox/grpc-demo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ekkinox/grpc-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekkinox%2Fgrpc-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekkinox%2Fgrpc-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekkinox%2Fgrpc-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekkinox%2Fgrpc-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ekkinox","download_url":"https://codeload.github.com/ekkinox/grpc-demo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekkinox%2Fgrpc-demo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32159959,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T17:06:48.269Z","status":"ssl_error","status_checked_at":"2026-04-22T17:06:19.037Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["grpc","grpc-go","grpc-php","http2","protobuf","soa"],"created_at":"2025-06-21T18:14:28.486Z","updated_at":"2026-04-22T23:35:54.846Z","avatar_url":"https://github.com/ekkinox.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 gRPC: SOA booster\n\n\u003e Introduction session to [gRPC](https://grpc.io) as [SOA](https://en.wikipedia.org/wiki/Service-oriented_architecture) booster using [Golang](https://go.dev).\n\n## Table of contents\n\n- [Installation](#installation)\n- [Stubs generation](#stubs-generation)\n- [Available services](#available-services)\n  - [gRPC server](#grpc-server)\n  - [gRPC gateway](#grpc-gateway)\n  - [gRPC envoy proxy](#grpc-envoy-proxy)\n\n## Installation\n\nFirst install required dependencies:\n\n- [docker](https://www.docker.com/)\n- [docker-compose](https://docs.docker.com/compose/) (if not provided by docker install)\n- [buf](https://docs.buf.build/installation)\n\nThen start the stack:\n\n```shell\ndocker-compose up -d\n```\n\n## Stubs generation\n\nThe protoc stubs are generated using [Buf](https://docs.buf.build/), following rules in [buf.gen.yaml](buf.gen.yaml) file.\n\nTo launch a new generation:\n\n```shell\nbuf generate\n```\n\nThen check the [proto](proto) folder where you'll find:\n- [go](proto/go): golang generated stubs for gRPC server and gRPC gateway\n- [js](proto/js): javascript generated stubs for web clients\n- [php](proto/php): PHP generated stubs for PHP application (as gRPC client)\n\n## Available services\n\n| Name             | Host            | Description                  |\n|------------------|-----------------|------------------------------|\n| gRPC server      | localhost:50051 | The gRPC server (go)         |\n| gRPC gateway     | localhost:8888  | The gRPC gateway (go)        |\n| gRPC envoy proxy | localhost:9999  | The gRPC envoy proxy (envoy) |\n\n### gRPC server\n\nThis application is a simple server side go implementation of [the text_tools.proto](proto/text_tools.proto) Protobuf definition.\n\nThe code is located in [server](server) folder.\n\nYou can access it on `localhost:50051`, and use the provided [client/main.go](client/main.go) script to interact with it:\n\n```shell\ncd client \u0026\u0026 go run .\n```\n\n### gRPC gateway\n\nThis application is a [REST \u003c-\u003e gRPC reverse proxy](https://github.com/grpc-ecosystem/grpc-gateway) using autogenerated protoc stubs.\n\nThe code is located in [gateway](gateway) folder.\n\nYou can access it on `localhost:8888` to interact with it on following endpoint:\n\n| Endpoint                       | Description                                     |\n|--------------------------------|-------------------------------------------------|\n| [POST] /v1/transform           | To call with REST the TransformText rpc         |\n| [POST] /v1/transform-and-split | To call with REST the TransformAndSplitText rpc |\n\n### gRPC envoy proxy\n\nThis [envoy proxy](https://www.envoyproxy.io/) is running the `envoy.filters.http.grpc_web` filter to enable frontend application to interact using [gRPC-web](https://github.com/grpc/grpc-web).\n\nThe proxy configuration is located in [envoy](envoy) folder.\n\nYou can access it on `localhost:9999` to interact with it, and use the [frontend](frontend) client to test from a web application.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekkinox%2Fgrpc-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fekkinox%2Fgrpc-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekkinox%2Fgrpc-demo/lists"}