Modern JSON APIs in Elixir/Phoenix - thoughts/resources?

So for a long time now, I’ve been using Absinthe to create Graphql APIs but, I would like to come back to a more “straightforward JSON API” kind of app.

The problem here is that I feel like there is no real community effort in pushing standards of a modern JSON API in phoenix, so here I am :slight_smile:

Do you all build pagination, ordering, and validation from scratch for each endpoint ? Or do you have generics/helpers for those use cases.

I’m looking for something like API Platform but for Phoenix.
I’ve already looked into Open Api Spex but there is no primitives for common use cases (which is not the library goal in anyway).

So, what are your thoughts on the subject ? :innocent:

4 Likes

Good question! I recently implemented an API following the JSON:API standard for Keila (API implementation here) and faced some of the same questions you have now. Fortunately, finding answers ended up being relatively straightforward in the end.

Here are a few notes you might find helpful:

  • I am using OpenApiSpex because otherwise building an Open API spec would be a huge pain
  • OpenApiSpex can take care of API-level field validations which is very useful. Plus, you can extend it with custom validators see here
  • It makes sense not to have things like pagination tied exclusively to your API. When building Phoenix apps, it’s best practice to separate business logic and and the view layer. And in my opinion, pagination is often a feature I want from my “core” layer and not just at the API layer. Here is a JSON API view with pagination.
  • The only thing I found a bit tricky was how to make the definition of my schemas for the API a bit less repetitive. I ended up creating a small helper module for that. API Schema module - Helper module
5 Likes

Creating an OpenAPI specifications is not a huge pain because there are tools like Stoplight Studio. I’m a proponent of spec-first and the editor is great.