{"id":16689401,"url":"https://github.com/lordofthejars/diferencia","last_synced_at":"2025-03-21T18:33:36.326Z","repository":{"id":57517507,"uuid":"138310659","full_name":"lordofthejars/diferencia","owner":"lordofthejars","description":"Tool to detect regressions between services","archived":false,"fork":false,"pushed_at":"2020-03-26T07:56:37.000Z","size":552,"stargazers_count":52,"open_issues_count":15,"forks_count":8,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-18T03:51:34.907Z","etag":null,"topics":["devops","microservices","testing","testing-tools"],"latest_commit_sha":null,"homepage":"https://lordofthejars.github.io/diferencia-docs-site","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lordofthejars.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-06-22T14:14:24.000Z","updated_at":"2025-03-14T00:09:03.000Z","dependencies_parsed_at":"2022-09-26T18:01:28.472Z","dependency_job_id":null,"html_url":"https://github.com/lordofthejars/diferencia","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lordofthejars%2Fdiferencia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lordofthejars%2Fdiferencia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lordofthejars%2Fdiferencia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lordofthejars%2Fdiferencia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lordofthejars","download_url":"https://codeload.github.com/lordofthejars/diferencia/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244849726,"owners_count":20520772,"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":["devops","microservices","testing","testing-tools"],"created_at":"2024-10-12T15:48:08.759Z","updated_at":"2025-03-21T18:33:35.748Z","avatar_url":"https://github.com/lordofthejars.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"= Diferencia\n\nimage::https://travis-ci.org/lordofthejars/diferencia.svg?branch=master[\"Build Status\", link=\"https://travis-ci.org/lordofthejars/diferencia\"]\n\nWhen building a service-based architecture where each service might be deployed independently, it is important to validate that the new version of the service is still compatible with the old version and this new version is able to *produce* a response that it is still processable by any *consumer*.\n\nOne way of resolving this problem is by using contracts and contract testing.\nYou define a contract (or agreement) on how the API should look like to communicate between *consumer* and *provider* services, so when a new version of the service (either consumer or provider) is released, you check it meets the contract.\nIf not then you know that something has been broken, and you need to fix it before you release the service.\nOne of these libraries for writing contract tests is https://docs.pact.io/[Pact].\n\nBut contract tests are not infallible, and in our experience, there are some drawbacks that might occur.\n\n* You can implement a new service endpoint but not defining it in the contract. Since contract does not know about its existence, this endpoint is never validated by contract test.\n* If you have already implemented several services, then it is really painful to start writing contracts for already developed services that you know that they are working. So usually you end up by validating this manually.\n* In our experience, contract tests are not widely adopted and companies rely on manual testing to validate that services can communicate with each other without any problem.\n\nIn this sense, Diferencia helps you in mitigating these problems.\nObviously, the best approach would be _contract tests + Diferencia_, but if you cannot do contract tests or you are into manual testing for validating compatibility between services, then definitely Diferencia is your tool.\n\nFull Docs can be read at https://lordofthejars.github.io/diferencia-docs-site","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flordofthejars%2Fdiferencia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flordofthejars%2Fdiferencia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flordofthejars%2Fdiferencia/lists"}