mittsh
Positions: macOS Software Engineer (Swift & Objective-C) | Frontend Software Engineer (React)
At Paw, our goal is to build the best possible productivity tools for developers, and in particular, for building and designing APIs (REST & GraphQL). Paw was launched as a Mac-only application and has recently become available on the Web, Windows and Linux. It allows team collaboration via a cloud-based syncing backend. We’re proud to have Airbnb, Apple, Mailchimp, MessageBird, and many other leading tech companies among our most active customers.
- Our product: https://paw.cloud/ - We're part of RapidAPI: https://www.crunchbase.com/organization/rapidapi - Our open positions: https://blog.paw.cloud/join-us/ - Email us: [email protected] (CV or LinkedIn URL please)
They also advertised. And I love most of their ads (at least those during Steve Jobs' time).
I know from experience as an iOS developer (then Python backend guy) that when working on a given project, our mind is already full of business logic. We don't want to add another level of complexity due to the tools we use. And we're writing enough code elsewhere to not want to write code in an app.
As of scripting used for "unit" testing, we have thought about it many time for Paw. And while we will do something somewhat related in the near future, it's a slippery slope. A robust API should have unit tests written with mocks and be part of the server code, not a few assertions made in a 3rd party app. We're quite biased here: many users want this feature, but we don't want to encourage bad practices (as it may be interpreted by some as "ok let's not write proper tests, there's Paw for that").
Anyway, that was to share my point of view as a Paw guy :)
I'm the founder of Paw https://paw.cloud and I can safely say that building a good UI is a lot of work. While Paw is built on native Cocoa/AppKit (OS X app framework), the challenges with web are different, but the amount of work is always here. Each custom control, tweak on the text fields and other sorts of custom behaviors are taking a lot of time to imagine, design and implement. But it's a lot of fun too!
Clearly Insomnia is one of these apps where by just landing on the website you know that it's made my someone who has a good taste and who pays attention to details. As of the app, most common Mac shortcuts are working. And the fact that you cannot open the Chrome console (Cmd+Shift+I) or select text outside of user inputs are a proof of a well polished product.
It's often hard to make a point about polished UIs because it's highly subjective and it's common to see people wanting to compare only "raw features" between two products.
I'm not a big fan of Electron apps, and Paw and Insomnia are somehow competing (one native, full-featured with extensions and dynamic values, team syncing…the other being a more lightweight version), but I must admit that Insomnia is nicely made! :)
Bugfix version Paw 3.0.5 has just been released https://paw.cloud/updates/3.0.5 (you can update from the app from Paw menu > Check for Updates…).
About the OS X support, we haven't changed the requirements at all for this release. Paw is OS X 10.10+ (Yosemite+) since Paw 2.3. So maybe you had an earlier version? If you were prompted to update with no warning, that's a bug. Sorry about it! Will investigate…
But that's actually a great question. We are asking ourselves the same here at Paw: should our app offer a testing/assertions feature?
Our own server backend is in Django using the Django REST Framework (it's an amazing tool btw) and clearly unit testing done inside the web framework is the right thing to do. Good frameworks have mocking libraries, and unit tests allows you to exercice all parts of the code (not only API facing). So why testing in an app like Paw? And should we encourage "bad practices" with a new feature that encourages users to have request/response assertions in our app instead proper unit tests?
First, everyone isn't writing tests ;) And sometimes maybe for good reasons (quickly putting together an MVP…). Assertions can be a quick alternative before writing proper unit tests. But mostly, we were thinking about assertions in Paw as a great way to do quick integration testing. For example, we've released Paw 3 recently, pushed server updates on an hourly basis, and we had no way to verify after a deploy that all the website's pages were up and that API endpoints were behaving as expected. Sure, the CI was saying that tests are passing, but who knows if someone has changed settings on AWS or on 3rd party tools (Stripe, Algolia…)? We would have loved to have assertions ourselves…
Also, extensions (many are built by users) are bringing lots of extra features we would have not thought about ourselves: https://paw.cloud/extensions/
Environment variables in Paw can be nested or computed (with "dynamic values" described above). It can be useful, for example, to have an "Auth" variable that contains a pointer that accesses the "user.access_token" JSON path from inside the latest Login request, so you can later simply point to the "Auth" variable everywhere else. One other thing about envs, is that you can have independent groups of environments: a typical example is you have a "Server" group with envs called "Prod", "Staging", "Local" and independently a setup with user credentials or variables that are more like static globals (AWS Keys, etc.)…
Now regarding to the team syncing service, "Paw for Teams". It has branches, snapshots and full history. In a dev team, it means one dev can experiment stuff on the schema for API v2 while others are fixing bugs on API v1, and when API v2 is ready they can seamlessly merge the new updates back to the v1 branch. Also, we've made the choice not to be real-time synced, because it doesn't fit well to software development: when I'm experimenting stuff with an API I don't want others to be polluted by my temporary garbage. So instead you "commit" changes only when ready. More about Teams here: https://paw.cloud/teams
Last but not least, Paw locally encrypts with a randomly generated symmetric passphrase all credentials you enter in your projects, that means your server keys, access tokens, etc. are a lot safer. And now that you can (optionally) sync with Paw's backend, we certainly don't want to have your secrets in cleartext on our infra. As passphrases are never uploaded (obviously! but by default stored in OS X Keychain), it's the users responsibility to safeguard them and share them with their team (on 1Password or similar).
Second, we are currently brainstorming around the idea of a good automation app. So somehow the two ideas may merge. We're not sure yet what would make sense for automation, but for assertions testing, for sure it's in the pipeline!
-Micha from Paw
But anyway, there's already a HAR importer, you can install it here as an extension https://paw.cloud/extensions/HARImporter
Also, we're working on a powerful API format transformer that we will release more officially soon, but it's already on GitHub: https://github.com/luckymarmot/api-flow That will allow us to release exporters for Swagger, RAML, HAR soon as well as formats of other clients like Postman and DHC Client.
If you're curious about writing an exporter/generator though here are some steps: https://paw.cloud/docs/extensions/create-code-generator
(Disclaimer, Paw guy here…)