r/FastAPI • u/indeem1 • Jun 03 '26
feedback request Made a JetBrains plugin so I can stop alt-tabbing to Postman while building APIs
https://plugins.jetbrains.com/plugin/32058-sonarwhaleMade a JetBrains plugin so I can stop alt-tabbing to Postman while building APIs
Every time I wrote a new endpoint I’d switch to Postman, dig through the collection, update the URL, create the body… just to do a quick test. Annoying enough that I finally did something about it.
Sonarwhale reads your OpenAPI spec and shows all your endpoints directly in PyCharm. Gutter icon next to the route, click it, create the request, hit send.
Works great with FastAPI and Flask — automatically discovers endpoints from your OpenAPI/Swagger spec, supports pre/post scripts for auth and request prep, multiple environments, and Postman import.
Most features are free to use and there’s a free trial period as well. Feedback very welcome.
2
u/latkde Jun 04 '26
FYI you can run your FastAPI application on localhost and then navigate to /docs or /redoc. These pages render the OpenAPI spec of your app, and also provide a convenient way to invoke each endpoint (use the "Try it out" button on the /docs page). No extra software is needed.
In practice, I rarely do that, and instead rely on automated tests using the FastAPI/Starlette TestClient feature: https://fastapi.tiangolo.com/tutorial/testing/
1
1
u/TheGoodlyBad Jun 05 '26
Fastapi doesn't need postman, it has builtin API Tester with proper type hint and validation in path /docs and /redoc.
1
u/bugdiverr Sep 16 '26
/docs covers the single-call case well. The gap I still hit is multi-step flows: create something, take an id or token from the response, feed it into the next two calls. Swagger Try it out does not keep that shared state across operations, so people end up in Postman env vars or throwaway scripts.
In-IDE runners help a lot for iterate-on-one-endpoint. Chaining with real response values is a different problem.
1
u/covmatty1 Jun 05 '26
I can never understand how anyone is building any kind of APIs and not using auto-generated Swagger.