Lithaldoryn

Lithaldoryn

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:

Most Liked

wmnnd

wmnnd

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

Where Next?

Popular in Discussions Top

AstonJ
Please see the new poll here: Which code editor or IDE do you use? (Poll) (2022 Edition) It’s been a while since we first asked this, I...
208 31265 143
New
mbenatti
Following https://github.com/tbrand/which_is_the_fastest |> https://raw.githubusercontent.com/tbrand/which_is_the_fastest/master/imgs...
New
AstonJ
I’ve just started the Phoenix part of the utterly brilliant online course by @pragdave. On generating the Phoenix app he uses the --no-ec...
New
New
WildYorkies
It seems that the more I read, the more I find Elixir users speaking about all the ways that Elixir is not good for x, y, and z use cases...
New
tmbb
This is a post to discuss the new Phoenix LiveView functionality. From Chris’s talk, it appears that they generate all HTML on the serve...
342 18243 126
New
opsb
We’re considering our architecture from a viewpoint of scaling our traffic heavily over the next 6 months. Our current deployment is runn...
New
pillaiindu
I want to convert a Phoenix LiveView CRUD website to a CRUD mobile app. What do you think is the easiest way to do so?
New
arpan
Hello everyone :wave: Today I am very excited to announce a project that I have been working on for almost 3 months now. The project is...
New
shishini
I think this twitter post and youtube video didn’t get as much attention as I hoped I am still new to Elixir, so can’t really judge ...
New

Other popular topics Top

rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
jaysoifer
Is there a way to rollback a specific migration and only that one (“skipping” all the other ones)? Would mix ecto.rollback -v 200809061...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
chrismccord
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
Lily
In templates/appointment/index.html.eex: <%= for appointment <- @appointments do %> <tr> <td><%= appoi...
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

Latest on Elixir Forum

We're in Beta

About us Mission Statement