{"id":17115225,"url":"https://github.com/not-raspberry/diffing-proxy","last_synced_at":"2025-03-23T23:43:30.052Z","repository":{"id":95187351,"uuid":"58886310","full_name":"not-raspberry/diffing-proxy","owner":"not-raspberry","description":"A service to convert HTTP reponses with full state updates to incremental ones.","archived":false,"fork":false,"pushed_at":"2016-07-10T18:06:12.000Z","size":35,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-29T06:49:55.273Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/not-raspberry.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":"2016-05-15T21:53:21.000Z","updated_at":"2016-06-02T20:46:00.000Z","dependencies_parsed_at":"2023-04-30T13:35:09.377Z","dependency_job_id":null,"html_url":"https://github.com/not-raspberry/diffing-proxy","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/not-raspberry%2Fdiffing-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-raspberry%2Fdiffing-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-raspberry%2Fdiffing-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-raspberry%2Fdiffing-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/not-raspberry","download_url":"https://codeload.github.com/not-raspberry/diffing-proxy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245186925,"owners_count":20574554,"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-10-14T17:22:19.817Z","updated_at":"2025-03-23T23:43:30.020Z","avatar_url":"https://github.com/not-raspberry.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# diffing-proxy [![Build Status](https://travis-ci.org/not-raspberry/diffing-proxy.svg?branch=travis-setup)](https://travis-ci.org/not-raspberry/diffing-proxy)\n\nor The Hacky Thing.\n\nA service to convert HTTP reponses with full state updates to incremental ones. May be useful\nwhen it's suboptimal to respond with full state to each request but it's affordable to send\nthe full state the first time client requests it.\n\n\n## Overview\n\n```\n\nClient 1\nClient 2   ←---→   Diffing proxy    ←---→    Backend\nClient 3         Serves incremental       Can only serve\nClient 4           state updates.        the latest state.\n...\n\nFrontend clients\nrequest and apply\nstate updates.\n\n```\n\n## Roadmap\n\n### Done\n\n* Basic diffing and caching implementation\n* Passing headers from the user request to the backend request\n* Backend requests timeouts\n\n### To do\n\n* Per-user caching of backend state\n* Rate-limiting backend queries\n* Better defined data formats, accepting more than just JSONs\n* A defined way to apply the diffs (for now you have to know about the ``differ`` library)\n* Integration testing - the boot path is uncovered\n\n### Sample session\n\n```\n\nBackend and Diffing Proxy sit quietly on the server, synchronised. Client enters.\n\nClient to Diffing Proxy:\nI hold no state. I request the latest one.\n\nDiffing Proxy to Backend:\nI already hold the state version 42. Give me the latest state if it updated.\n\nBackend to Diffing Proxy:\nNo updates.\n\nDiffing Proxy to Client:\nHere, grab the state, version 42.\n\n... some time passes ...\n\nClient to Diffing Proxy:\nI have state version 42, anything new?\n\nDiffing Proxy to Backend:\nI already hold the state version 42. Give me the latest state if it updated.\n\nBackend to Diffing Proxy:\nHere's state, version 43.\n\nDiffing Proxy to Client:\nYou told you have 42, here's the diff between 42 and 43.\n\n```\n\n## Prerequisites\n\nYou will need [Leiningen][] 2.0.0 or above installed.\n\n[leiningen]: https://github.com/technomancy/leiningen\n\n## Running\n\nTo start the diffing proxy, run:\n\n    lein run -c config.edn\n\nTo start a mock backend app (an app that memorises request bodies of POST\nrequests and responds with them to GET requests on the same path):\n\n    lein with-profile backend-mock run\n\n## License\n\nCopyright © 2016 not-raspberry (https://github.com/not-raspberry/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnot-raspberry%2Fdiffing-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnot-raspberry%2Fdiffing-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnot-raspberry%2Fdiffing-proxy/lists"}