There’s no doubt about it, things that help are good. This topic of abstraction came up in a chatroom the other day and I found myself advocating not abstracting in the client. Having had more time to think about it I finally realised my own thoughts about it. Just crept up from my subconscious.
At the moment I’m writing my own mobile apps, consuming an API that I’ve also written and maintain for use by mobile apps and web sites. So naturally looking at anything to help is always worth considering. The basic premise of my thinking is that in my particular situation, where I’m developing the API, dogfooding is the way to go.
Having to manually integrate with the API could be beneficial in a number of ways. Having to deal with its security, data and inevitable idiosyncrasies can all potentially reveal design improvements. If you immediately abstract your API behind someone else’s logic and expectations you’ll miss these opportunities during development. You could argue the reverse is also true. If Refit has troubles integrating with your API that could also reveal other problems or design improvements.
The particular client abstraction we were discussing is Refit. It’s really very cool and if you aren’t in control of the API you’re interacting with it’s ideal, I’ll definitely be using it. But I’m sure the authors of that API are at least testing that API if not also manually integrating with it at some point for some of the reasons outlines above.