HarborClient

@harborclient.com

The free API client that keeps your work private: no accounts, no subscriptions, no lock-in. Your work in a safe harbor that you control.

API collections are source code. They change with your backend. They should be reviewed with your backend. They should have history. They should have branches. That's why Git isn't an export feature in HarborClient. It's part of the workflow.

"I wrote this code completely from scratch," I whisper to myself, rapidly closing 14 Claude tabs, an open ChatGPT window, and a GitHub repo from 2017. 😂😂

"We don't really need API-level tests, the frontend handles all the input validation." — Famous last words right before a user figures out how to bypass the UI and names themselves Robert'); DROP TABLE Students;--.

Precise. Legible. Made for repeated use. Better understood the longer you work with it. That’s the kind of craftsmanship I want HarborClient associated with.

Bild

"I just need to fire off one quick API request." Postman: "Hold on, downloading update v11.4. Also, we redesigned the entire UI again. Good luck finding the Auth tab."

Me: "I just need to send a quick POST request." My API Client: "Great! Please sign in, join a workspace, invite 3 friends, and sync your data to our servers." Me: Downloads HarborClient instead. 🚢

Bild

REST API testing: Checking 15 different endpoints for specific HTTP status codes. GraphQL testing: Checking one endpoint that always returns 200 OK, but contains an error array long enough to be a CVS receipt.

You send a PUT request to update one field. The request succeeds. Several fields you didn’t send are now null. What probably happened? A) The endpoint treats PUT as full replacement B) CORS stripped the fields C) TLS corrupted the payload D) The response was cached

Do you agree? James O. Coplien, author of Why Most Unit Testing is Waste, one of software’s true grey beards: “Turn most unit tests into assertions.” “Throw away tests that haven’t failed in a year.” “Tests don’t improve quality: developers do.”

Me: sends 3 requests in 10 seconds while testing manually The API: "Whoa there, rate limit exceeded." Production app: sends 10,000 requests a second The API: "This is fine."

How to Use Environments in HarborClient Environments let you swap request variables between dev, staging, and prod without duplicating collections—import from .env files, export for sharing, and use merge/copy down to keep them in sync.

How to Use Environments in HarborClient

Environments let you swap request variables between dev, staging, and prod without duplicating collections—import from .env files, export for sharing, and use merge/copy down to keep them in sync.…

harborclient-blog.com

Safari really looked at Internet Explorer's long, dark legacy of traumatizing web developers and said, "Hold my beer, I'm going to randomly ignore this CSS grid."

Good craftsmanship in a developer tool is rarely one giant feature. It’s the focus state that lands correctly. The shortcut that works everywhere. The error you can actually understand. The interaction you repeat 100 times without resenting it. That’s the work.

A production API occasionally returns 500. Sending the exact same request again succeeds. Logs show failures only when several requests happen simultaneously. What would you suspect first? A) Race condition or shared-state bug B) Incorrect MIME type C) CORS D) URL encoding

Backend dev: "I'll just send you the cURL command." Me: Imports cURL into Postman Postman: "Best I can do is put the entire JSON payload in the headers, delete your Auth token, and crash."