{"id":20904170,"url":"https://github.com/visheshc14/vostok","last_synced_at":"2026-04-30T05:34:11.546Z","repository":{"id":105858766,"uuid":"403555266","full_name":"visheshc14/Vostok","owner":"visheshc14","description":"Vostok is a Rust-Based HTTP Transformation Layer To Seamlessly Convert REST Calls Into GraphQL Calls For Piecemeal API Migrations.","archived":false,"fork":false,"pushed_at":"2025-09-15T17:20:51.000Z","size":10,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-28T22:58:23.579Z","etag":null,"topics":["graphql","piecemeal","rest-api","rust-lang"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/visheshc14.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-06T09:05:53.000Z","updated_at":"2025-10-03T08:00:06.000Z","dependencies_parsed_at":"2023-07-24T11:16:11.506Z","dependency_job_id":null,"html_url":"https://github.com/visheshc14/Vostok","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/visheshc14/Vostok","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visheshc14%2FVostok","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visheshc14%2FVostok/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visheshc14%2FVostok/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visheshc14%2FVostok/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/visheshc14","download_url":"https://codeload.github.com/visheshc14/Vostok/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visheshc14%2FVostok/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32456165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"online","status_checked_at":"2026-04-30T02:00:05.929Z","response_time":57,"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":["graphql","piecemeal","rest-api","rust-lang"],"created_at":"2024-11-18T13:16:14.700Z","updated_at":"2026-04-30T05:34:11.528Z","avatar_url":"https://github.com/visheshc14.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vostok\n\n\u003e When you need to pretend you are a REST API, but you're really not\n\nVostok is a Rust-Based HTTP Transformation Layer To Seamlessly Convert REST Calls Into GraphQL Calls For Piecemeal API Migrations.\n\n## Implementation Goal\n\nNeed to implement some test servers for REST and for GraphQL.\nNeed a Couple of Cases:\n\n- Passthrough paths that are not overridden\n- A direct transformation from REST\u003c-\u003eGraphQL\n- An advanced transformation from REST\u003c-\u003eGraphQL which processes the data\n\nWe can set up a couple of REST endpoints:\n\n- `GET /api/v1/uuid` returns a UUID\n- `GET /api/v1/me` returns a JSON object `{ data: { username: \"Ariel\", ... } }`\n\nAnd a GraphQL schema:\n\n```graphql\ntype User {\n  username: String!\n}\n\nQuery {\n  me: User!\n  uuid: String!\n}\n```\n\nTODO: Make the above setup a bit more advanced.\n\n## Resources\n\n- [hyper](https://docs.rs/crate/hyper) for managing HTTP requests\n- [routerify](https://github.com/routerify/routerify) to manage routes in hyper\n- [anyhow](https://docs.rs/anyhow/) for nice error handling\n- [log](https://docs.rs/log/) and [fern](https://docs.rs/fern) for logging\n- [chrono](https://docs.rs/chrono/) for time handling\n- [hyper-rustls](https://docs.rs/hyper-rustls) for handling HTTPS in hyper\n- [httpbin: A simple HTTP Request \u0026 Response Service.](http://httpbin.org) is very useful for testing\n- [cargo-watch](https://crates.io/crates/cargo-watch) for developing with `cargo dev` (install via `cargo install cargo-watch`)\n\nPotentially:\n\n- [warp](https://github.com/seanmonstar/warp) as a higher-level alternative to hyper\n- [warp-reverse-proxy](https://github.com/danielSanchezQ/warp-reverse-proxy) is a warp filter for easy reverse proxying\n- [reqwest](https://github.com/seanmonstar/reqwest) is a high-level HTTP client\n\nSome blog posts:\n\n- [Creating a Rest Api in Rust With Warp](https://blog.logrocket.com/creating-a-rest-api-in-rust-with-warp/)\n- [Warp Auth Server Tutorial](https://blog.joco.dev/posts/warp_auth_server_tutorial)\n- [Live coding an HTTP reverse proxy in Rust](https://www.youtube.com/watch?v=FcHYQMRfGWw) (and [gist](https://gist.github.com/snoyberg/35a661fff527692d09675ef540c7c1eb) of the code)\n- [benchmark of different web frameworks](https://github.com/routerify/routerify-benchmark)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisheshc14%2Fvostok","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvisheshc14%2Fvostok","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisheshc14%2Fvostok/lists"}