{"id":21296926,"url":"https://github.com/reddec/nano-rpc","last_synced_at":"2025-03-15T17:27:42.623Z","repository":{"id":81702636,"uuid":"161910239","full_name":"reddec/nano-rpc","owner":"reddec","description":"Tiny lib for golang for expose methods over HTTP","archived":false,"fork":false,"pushed_at":"2018-12-16T04:26:06.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-09T00:06:39.750Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/reddec.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-15T13:59:59.000Z","updated_at":"2018-12-16T04:26:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"28cbb90a-b10b-47f1-9919-8454eaeb5331","html_url":"https://github.com/reddec/nano-rpc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reddec%2Fnano-rpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reddec%2Fnano-rpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reddec%2Fnano-rpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reddec%2Fnano-rpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reddec","download_url":"https://codeload.github.com/reddec/nano-rpc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243765026,"owners_count":20344522,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-21T14:31:01.256Z","updated_at":"2025-03-15T17:27:42.586Z","avatar_url":"https://github.com/reddec.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nano HTTP RPC lib\n\n[![](https://godoc.org/github.com/reddec/nano-rpc?status.svg)](http://godoc.org/github.com/reddec/nano-rpc)\n\n\n`import \"github.com/reddec/nano-rpc\"`\n\nNo dependency, super-tiny library that lets you expose any suitable function to HTTP POST interface.\n\nFunction should have one input argument and returns tuple of value and error.\n\nEx:\n\n**good**\n\n* `func hello(name string) (string, error)`\n* `func bye(data MyStruct) (bool, error)`\n* `func sample(a *int) (*MyStruct, error)`\n\n**bad**\n\n* `func hello(name, lastname string) (string, error)` - two arguments\n* `func sample() (string, error)` - no arguments\n* `func close(data string) error` - only one return\n* `func shutdown(delay int) (int, int)` - last argument is not an error \n\nMethods are expose as POST methods using method name as last part of path.\n\nEx:\n\nMethod `greetings` will be exposed as `POST /greetings`\n\n\n## Server usage\n\n```go\npackage main\n\nimport (\n\t\"github.com/reddec/nano-rpc\"\n\t\"net/http\"\n)\n\nfunc main() {\n\tserver := \u0026nano.Server{}\n\tserver.AddFunc(\"greetings\", func(name string) (string, error) {\n    \t\treturn \"hello \" + name, nil\n    })\n\thttp.ListenAndServe(\":8080\", server)\n}\n```\n\nInstead of `AddFunc` you can use `Add` that will scan all methods in object and expose suitable ones.\n\n\n## Client usage\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/reddec/nano-rpc\"\n)\n\nfunc main() {\n\tclient := \u0026nano.Client{\n\t\tURL: \"http://127.0.0.1:8080\",\n\t}\n\tvar ans string\n\terr := client.Invoke(\"greetings\", \"Foo\", \u0026ans)\n\tif err!=nil{\n\t\tpanic(err)\n\t}\n\tfmt.Println(ans)\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freddec%2Fnano-rpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freddec%2Fnano-rpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freddec%2Fnano-rpc/lists"}