#diff #response #compare #http #web-server #api-response #version

app http-diff

http-diff - CLI tool to verify consistency across web server versions. Ideal for large-scale refactors, sanity tests and maintaining data integrity across versions.

3 releases

0.0.3 Mar 29, 2024
0.0.2 Mar 24, 2024
0.0.1 Mar 10, 2024

#1491 in Web programming

Download history 174/week @ 2024-03-08 10/week @ 2024-03-15 128/week @ 2024-03-22 183/week @ 2024-03-29 18/week @ 2024-04-05

148 downloads per month

Unlicense OR MIT

6.5MB
4.5K SLoC

http-diff

CLI tool to verify consistency across web server versions. Ideal for large-scale refactors, sanity tests and maintaining data integrity across versions.

Archives of precompiled binaries for http-diff are available for macOS and Linux on every release.

Tests Crates.io

Dual-licensed under MIT or the UNLICENSE.

UI demo

The tool works by looking at the configuration file that can be specified by --configuration argument.

http-diff --configuration=./configuration.json

  • ./configuration.json - is the default value for this argument so it can be omitted.

Config example:

{
  "domains": ["http://domain-a.com", "http://stage.domain-a.com"],
  "endpoints": [
    {
      "endpoint": "/health"
    },
    {
      "endpoint": "/api/v1/users/<userId>"
    }
  ],
  "variables": {
    "userId": [123, 444]
  }
}

this config will be translated to following:

  • GET request will be issued to http://domain-a.com/health and response be compared to response of GET http://stage.domain-a.com/health.

  • Next endpoint /api/v1/users/<userId> has variable defined in it - <userId>. Anything within the brackets considered a variable name. In this case - userId. Variable then is looked up in the global variables property. In this case userId has two values: 123 and 444. This will be mapped to following requests:

    • GET http://domain-a.com/users/123 and compared with response from GET http://stage.domain-a.com/users/123.
    • GET http://domain-a.com/users/444 and compared with GET http://stage.domain-a.com/users/444.

All configuration options can be found here.

Requirements

  • Latest rust installed when building from source

Installation

Archives are available on every release as well as .deb files for Linux.

Autocomplete for arguments and man pages are included.

Developing

  • cargo run - for development
  • cargo test - to run tests
  • cargo build -r - to build in release mode

Dependencies

~19–37MB
~615K SLoC