Introduce a second layer of abstraction on top of the REST endpoints.
It is clear that we want a higher level of abstraction than the REST endpoints provide. For instance, we want to be able to post an event and add attachments in the same method, and we want to be able to store the activity/logbook to post to rather than having to pass it with each call.
Instead of blending the two things together, an approach is to call the REST endpoints the low-level, and to expose richer behaviour on top of that low-level client. Because this higher level client is no longer talking REST directly, it is also easier to abstract (and test) - though I haven't gone too far down that road yet in the aim of keeping this change light and nimble.
From an API perspective, I'm basically proposing that the everyday user only interacts with the high-level client. The high-level client is OO, so there is an entrypoint to add (and should be one to get, but didn't yet implement) an Event, and after that you interact with the objects themselves (e.g. Event.add_attachment
).