Hi, I would like to learn more about Elixir and thought creating a hex library might help me achieve this. I would like to wrap a third-party event/ticketing API that I am using for one of my current projects and then publish this to hex.
I have found an Elixir library for meetup.com’s API, and was thinking of using that as a base. Is that a good start? Are there any really good libraries out there that I could follow for wrapping APIs? Any Elixir patterns I should follow as well?
Btw, I am new to writing any library in any language, so trying to learn as much as I can and also contribute back to the ecosystem.
A good place to start is playing with a library like Tesla or HTTPoison. Those libraries provide a simplified interface around more lower level HTTP clients like Hackney or Mint. You’ll probably need a way to configure authentication; ideally through function parameters or options. Tesla has a decent solution to build an authenticated client at run-time which is helpful to avoid imposing configuration methods on your users.
There are 4 main components to think about with a REST API wrapper:
The External Service who’s API you’re wrapping, how to authenticate with it, and what requests and responses can be made.
The Consumer of your library (e.g. the Business Logic), what it cares about, and the minimal set of knowledge it should have about how to interact with the service.
Your API Wrapper library, how it’s configured, how it authenticates with the External Service, how it validates incoming commands, and how it handles responses from the service.
The HTTP Client (e.g. Hackney/Mint) that does the actual work of executing an HTTP Request through the network stack.
The most important part is providing a clean interface between your business logic (consumer of the API Wrapper) to hide implementation details like HTTP request/response. Outside of that you’ll probably want to spend time thinking about how to configure your library.
These resources are worth looking at for Library configuration in general: