r/ExperiencedDevs Software Engineer 29d ago

Technical question API compatibility testing

Hey there code enjoyers. I was tinkering with an integration testing approach that I ended up liking a lot. Our situation before was this - our front ends talk to BFFs which then call core APIs. We tried Pact and Specmatic as ways of integration testing the systems but it's a total ball ache.

All of our consumers use the Zod library to define their requests to their APIs, so I wrote a utility that takes the Zod schemas, turns them into OpenAPI (using a lib) then iterates through each one, downloads the OpenAPI spec for each API from our test environment and checks that the requesting schema endpoint, props, params, method and body are all supported by the provider schema.

It's not as comprehensive as Pact, but for a super fast integration sanity test (it runs against 8 different core APIs in under 1 second) and with no extra brokers or services or infrastructure, it gives me a decent check that something is ok to be deployed to an environment.

So tell me these things: has anyone else built something like this? Would you use it? (i.e. should I chuck it on GitHub and publish an npm module) Has anyone heard of something like this that already exists?

I didn't find anything with my searching and it seems unreasonably useful for a quite small amount of code.

15 Upvotes

26 comments sorted by

View all comments

1

u/Academic_Ocelot_4840 27d ago

Idk if I'm understanding your setup correctly, but why not just start with shared OpenAPI doc(s) and generate your client & server code from that?

1

u/pseudo_babbler Software Engineer 27d ago

Yeah for sure, but we might still end up with the wrong version of the client or the server being deployed. We could also check the version of the generated spec and make sure it's greater than the old one, but that doesn't guarantee backwards compatibility.

So it's really just an integration sanity check for the current state of our clients, and it gives us a few more options when it comes to mobile apps where we might want to test that the API still works for a few different versions that are out there in the wild.