{"id":40881868,"url":"https://github.com/sivsivsree/routerarc","last_synced_at":"2026-01-22T01:15:00.473Z","repository":{"id":57604293,"uuid":"216329404","full_name":"sivsivsree/routerarc","owner":"sivsivsree","description":"An HTTP router and reverse proxy for services.","archived":false,"fork":false,"pushed_at":"2021-10-25T10:54:00.000Z","size":73,"stargazers_count":3,"open_issues_count":4,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-20T00:38:19.689Z","etag":null,"topics":["api-gateway","hacktoberfest","reverse-proxy","routing-engine"],"latest_commit_sha":null,"homepage":"","language":"Go","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/sivsivsree.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":"2019-10-20T08:19:36.000Z","updated_at":"2021-10-25T10:54:03.000Z","dependencies_parsed_at":"2022-09-04T13:52:06.766Z","dependency_job_id":null,"html_url":"https://github.com/sivsivsree/routerarc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sivsivsree/routerarc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sivsivsree%2Frouterarc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sivsivsree%2Frouterarc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sivsivsree%2Frouterarc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sivsivsree%2Frouterarc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sivsivsree","download_url":"https://codeload.github.com/sivsivsree/routerarc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sivsivsree%2Frouterarc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28648617,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T21:29:11.980Z","status":"ssl_error","status_checked_at":"2026-01-21T21:24:31.872Z","response_time":86,"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":["api-gateway","hacktoberfest","reverse-proxy","routing-engine"],"created_at":"2026-01-22T01:14:59.841Z","updated_at":"2026-01-22T01:15:00.464Z","avatar_url":"https://github.com/sivsivsree.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RouterArc [Working on it] \n### API reverse proxy and Router Service.\n[![Actions Status](https://github.com/sivsivsree/routerarc/workflows/Build/badge.svg)](https://github.com/sivsivsree/routerarc/actions) [![Go Report Card](https://goreportcard.com/badge/github.com/sivsivsree/routerarc)](https://goreportcard.com/report/github.com/sivsivsree/routerarc)\n\nRouterArc is an API gateway and reverse proxy service, can be used as an entry point of a microservice,\nrouting to diffrent services. \n\n\n## Goal (Initially) 🍺\n\n### 1. Reverse Proxy  🔀\n\nA reverse proxy is a server that sits in front of web servers and forwards client (e.g. web browser) requests to those web servers. Reverse proxies are typically implemented to help increase security, performance, and reliability. \nThis is different from a forward proxy, where the proxy sits in front of the clients. With a reverse proxy, when clients send requests to the origin server of a website, those requests are intercepted at the network edge by the reverse proxy server. The reverse proxy server will then send requests to and receive responses from the origin server.\n\n### 2. API Routing gateway  🚏\n\nAn API Gateway is a server that is the single entry point into the system. It is similar to the Facade pattern from object‑oriented design. The API Gateway encapsulates the internal system architecture and provides an API that is tailored to each client.\n\n### 3. Loadbalancing 🚥\n\n A popular website that gets millions of users every day may not be able to handle all of its incoming site traffic with a single origin server. Instead, the site can be distributed among a pool of different servers, all handling requests for the same site. In this case, a reverse proxy can provide a load balancing solution which will distribute the incoming traffic evenly among the different servers to prevent any single server from becoming overloaded. In the event that a server fails completely, other servers can step up to handle the traffic.\n\n\n### 4. Static File Serving\n  - Can be directly attached to a port\n  \u003e Note: if you have and angular application and want to port forward the build HTML and assets to a server u can use the proxy serve \n\u003chr\u003e\n\n\n## Usage\n\nTo run the service use, \n\n```\n   routerarc -config=rules.json  \n```\n\n \n \n##### Flags :\n\n- `` -h `` : to view all the command line arguments. \n- `` -config=\u003cfilename\u003e`` : to specify the configurations.\n\n\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n  #### Using Docker \n \n \u003e The routing configuration file 'rules' should be in the volume. \n \u003e ``/var/routerarc`` in the below docker config.\n \n \u003cbr\u003e\n \n ``` docker run --name somevol -v /var/routerarc:/rules routerarch ```\n \n \n \n \u003cbr\u003e\n\n## Config File Format\n\nThe whole point of the project is to create a simple configuration based on json ```config.json```,\nwith all the features packed to run microservices \n\n\u003e The configuration can either be in YAML format or in JSON format.\n\u003e If no configuration file is provided it will look for ```rules.yaml```\n\n ##### 1. YAML configuration Example ```config.yaml```\n\n```\nrouter:\n  - port: '8080'\n    case:\n      - service: \"/auth\"\n        loadbalacer: round-robin\n        upstream:\n          - http://localhost:8081\n          - http://localhost:8082\n          -\n      - servie: \"/mobile/auth\"\n        upstream:\n          - http://localhost:8086\n          - http://localhost:8045\n        loadbalacer: round-robin\n\n      - servie: \"/retrival\"\n        upstream:\n          - http://localhost:8084\n          - http://localhost:8085\n        loadbalacer: round-robin\nproxy:\n  - name: backend\n    port: '8000'\n    to:\n      - https://api.github.com\n      - https://google.com\n    loadbalacer: round-robin\n\n  - name: frontend\n    port: '9000'\n    static: \"public\"\n    \n```\n\n\u003cbr\u003e\n\n ##### 2. JSON configuration Example ```rules.yaml```\n```\n{\n  \"router\": [\n    {\n      \"port\": \"8080\",\n      \"case\": [\n        {\n          \"service\": \"/auth\",\n          \"loadbalacer\": \"round-robin\",\n          \"upstream\": [\n            \"http://localhost:8081\",\n            \"http://localhost:8082\"\n          ]\n        },\n        {\n          \"servie\": \"/mobile/auth\",\n          \"upstream\": [\n            \"http://localhost:8086\",\n            \"http://localhost:8045\"\n          ],\n          \"loadbalacer\": \"round-robin\"\n        },\n        {\n          \"servie\": \"/retrival\",\n          \"upstream\": [\n            \"http://localhost:8084\",\n            \"http://localhost:8085\"\n          ],\n          \"loadbalacer\": \"round-robin\"\n        }\n      ]\n    }\n  ],\n  \"proxy\": [\n    {\n      \"name\": \"backend\",\n      \"port\": \"8000\",\n      \"to\": [\n        \"http://service1.ae\",\n        \"http://service2.example.com\"\n      ],\n      \"loadbalacer\": \"round-robin\"\n    },\n    {\n      \"name\": \"frontend\",\n      \"port\": \"9000\",\n      \"to\": [\n        \"https://jsonplaceholder.typicode.com\",\n        \"http://example.com\"\n      ],\n      \"loadbalacer\": \"round-robin\"\n    }\n  ]\n}\n\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsivsivsree%2Frouterarc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsivsivsree%2Frouterarc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsivsivsree%2Frouterarc/lists"}