{"id":20519715,"url":"https://github.com/endpoints4s/talk","last_synced_at":"2025-06-27T23:05:35.485Z","repository":{"id":129707864,"uuid":"203429048","full_name":"endpoints4s/talk","owner":"endpoints4s","description":null,"archived":false,"fork":false,"pushed_at":"2020-08-12T15:19:46.000Z","size":2289,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-08T10:24:37.604Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/endpoints4s.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}},"created_at":"2019-08-20T18:07:02.000Z","updated_at":"2020-08-12T15:19:49.000Z","dependencies_parsed_at":"2023-04-12T13:24:33.922Z","dependency_job_id":null,"html_url":"https://github.com/endpoints4s/talk","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/endpoints4s/talk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endpoints4s%2Ftalk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endpoints4s%2Ftalk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endpoints4s%2Ftalk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endpoints4s%2Ftalk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/endpoints4s","download_url":"https://codeload.github.com/endpoints4s/talk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endpoints4s%2Ftalk/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260311718,"owners_count":22990028,"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-15T22:15:46.734Z","updated_at":"2025-06-27T23:05:35.468Z","avatar_url":"https://github.com/endpoints4s.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Endpoints\n=========\n\n\u003e a quest for the right level of coupling\n\n## Abstract\n\nDistributed systems (e.g., microservices, web apps, or web services) promise more flexibility to developers\nbecause each node is loosely coupled with each other. Indeed, each node evolves on its own and is free to use its own\ntechnology stack (e.g., JavaScript, Python, JVM, etc.). However, I argue that this loose coupling also introduces\nmore maintenance burden, which negatively impacts the developers productivity. Typically, when a server is modified\nto require a new request parameter, the clients and the documentation may not automatically catch up on that change.\nThis results in additional work on the client and the documentation to carry that change forward, or, even worse,\nin a failure at run-time if developers didn’t notice that they introduced an incompatible change.\n\nTo address this problem, I’ve created the [endpoints4s](http://endpoints4s.github.io/) library. It introduces\njust enough coupling between servers, clients and documentation such that they are automatically consistent regarding\nthe communication protocol, while keeping the flexibility of using different technology stacks on servers and clients.\n\nIn this talk, I will show a demo of *endpoints*, explain the design decisions I’ve made, and compare the library\nwith other approaches.\n\n## Setup\n\nThis project contains both the slides and the demo code. To build the demo you only need sbt.\nTo build the slides you need Pandoc, and to show them you need Python 3.\n\n### Run the Demo\n\n~~~\n$ sbt\n\u003e server/reStart\n~~~\n\n### Show the slides\n\nUse the `makeSlides` sbt task to build the slides (into the `target/slides/` directory). Or the `showSlides` task\nto run an HTTP server showing the slides. Typical developer workflow:\n\n~~~\n$ sbt\n\u003e ~showSlides\n~~~\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fendpoints4s%2Ftalk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fendpoints4s%2Ftalk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fendpoints4s%2Ftalk/lists"}