{"id":18062232,"url":"https://github.com/domgreen/polyman","last_synced_at":"2026-03-11T04:32:01.611Z","repository":{"id":61625033,"uuid":"122879725","full_name":"domgreen/polyman","owner":"domgreen","description":null,"archived":false,"fork":false,"pushed_at":"2019-02-04T14:54:57.000Z","size":132,"stargazers_count":7,"open_issues_count":1,"forks_count":3,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-11T15:11:11.574Z","etag":null,"topics":["golang","grpc","grpc-server","grpc-service","polyglot","polyman-proxy","postman","proxy"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/domgreen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-25T21:39:22.000Z","updated_at":"2019-11-19T21:49:37.000Z","dependencies_parsed_at":"2022-10-18T17:30:24.452Z","dependency_job_id":null,"html_url":"https://github.com/domgreen/polyman","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/domgreen/polyman","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domgreen%2Fpolyman","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domgreen%2Fpolyman/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domgreen%2Fpolyman/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domgreen%2Fpolyman/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/domgreen","download_url":"https://codeload.github.com/domgreen/polyman/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domgreen%2Fpolyman/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30370798,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T21:41:54.280Z","status":"online","status_checked_at":"2026-03-11T02:00:07.027Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["golang","grpc","grpc-server","grpc-service","polyglot","polyman-proxy","postman","proxy"],"created_at":"2024-10-31T05:06:20.765Z","updated_at":"2026-03-11T04:32:01.574Z","avatar_url":"https://github.com/domgreen.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Polyman\n\nPolyman is a simple HTTP to gRPC proxy.\n\nPolyman is designed to work with [Postman](https://www.getpostman.com/) and bring gRPC to their rich enironment via [Polyglot](https://github.com/grpc-ecosystem/polyglot).\n\n![Polyman](docs/img/polyman.png)\n\n### Benifits of Polyman\n\n* Brings gRPC to Postman:\n * Amazing UI\n *  Allows saving of collections\n *  Replayable requests\n *  Call many gRPC services from one place\n* Simplifies Polyglot usage:\n *  No need to run via command line\n\n### Installation\n\n```\ncurl -LO https://github.com/domgreen/polyman/releases/download/v0.0.0-alpha/polyman-darwin-amd64\nmv polyman-darwin-amd64 polyman\nchmod +x polyman \n```\n(will need *Java8* to run polyglot under the hood)\n\n#### From Source\n\nDownload source:\n```\ngit clone git@github.com:domgreen/polyman.git\n```\n\nBuild source (with vgo):\n```\nmake\n```\n\n### Adding Polyman Proxy to Postman\n\n* Settings \u003e Proxy\n* Enable \"Global Proxy Configuration\"\n* Add localhost:8000\n\n## Starting Polyman\n\n```\npolyman [--polyglot] [--port]\n\n--polyglot - optional parameter to supply a different polyglot.jar file. If this is not supplied the latest version will be downloaded to ~/.polyglot and used.\n\n--port     - optional parameter to supply a new port for polyman.\n```\n\n## Making A Request\n\n![PolymanRequest](docs/img/polyman.png)\n\nMaking a request via Polyman is done via a HTTP **POST** and using a json representation of the proto message that will be sent to the server.\n\n#### Request:\n\n```\nPOST http://0.0.0.0:50051/helloworld.Greeter/SayHello\n```\n\nThe URL of the request is made up of the host and port where the gRPC service is running, followed by the **Service** name and **method** you are calling.\n\n**Headers**:\n```\nx-polyman-root: ~/go/src/google.golang.org/grpc/examples/helloworld\n```\n`x-polyman-root` is the most commonly set Header, this sets the `--proto_discovery_root` in Polyglot that is used to discover protos and generate messages to send via gRPC.\n\n\n**Body**:\n```\n{\n  \"name\":\"world\"\n}\n```\n\n#### Response:\n```\n{\n  \"message\": \"Hello world\"\n}\n\n```\n\n## Listing Services\n\n![PolymanList](docs/img/polymanlist.png)\n\nListing Services gives you detailed information about the Services, Methods and their message structure via a HTTP **GET** request.\n\n#### Request:\n\n```\nGET http://0.0.0.0:50051/list_services\n```\nThe request is made to `/list_services` and uses the headers to decide where to look for the proto information.\n\n**Headers**:\n```\nx-polyman-root: ~/go/src/google.golang.org/grpc/examples/helloworld\n```\n\n#### Response:\n```\nhelloworld.Greeter -\u003e ~/go/src/google.golang.org/grpc/examples/helloworld/helloworld.proto\n  helloworld.Greeter/SayHello\n    name[\u003coptional\u003e \u003csingle\u003e]: STRING\n\n  helloworld.Greeter/SayHelloAgain\n    name[\u003coptional\u003e \u003csingle\u003e]: STRING\n```\n\nThis response shows a single service `helloworld.Greeter` with two methods `SayHello` and `SayHelloAgain`. It also shows the message definition for making the call.\n \n## Optional Headers\n\n#### Polyman Config:\n```\nx-polyman-config: ~/mydir/myconfig.pb.json\n```\n\n`x-polyman-config` header tells the proxy the location for the [Polyglot configuration](https://github.com/grpc-ecosystem/polyglot#configuration-optional).\nIf this is supplied you *may* not need to supply the `x-polyman-root` header, depending on the configuration file that you are using. \n\n#### Polyman Endpoint:\n```\nx-polyman-endpoint: 0.0.0.0:50051\n```\n`x-polyman-endpoint` can be supplied if you are not using the Postman proxy settings; the URL would then be the location of the Polyman proxy, which would use this header to correctly forward the call.\n\n#### Polyman Metadata:\n```\nx-polyman-metadata: key1:value1,key2:value2\n```\n`x-polyman-metadata` can be supplied to add custom grpc metadata headers to calls made using Polyglot.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdomgreen%2Fpolyman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdomgreen%2Fpolyman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdomgreen%2Fpolyman/lists"}