Hi I’m trying to do something simple, which is just to connect to a phoenix server backend via its API pipeline (JSON) using not a js client, but a separate elixir process. I understand that if this process is going to talk websockets/phoenix channels, there is the PhoenixClient library that can be used, but I just need to talk standard HTTP, sending across JSON messages through POST/GET etc.
Is there a library that can do this? I think all I need to get is a handle on the connection, and I think the standard phoenix library should be able to do this but the only examples I can see of this is wrapped up in the PhoenixConnTest module, and I want to do this outside the context of a test.
Thanks!
So as far as I can tell, you’re basically trying to call an endpoint in an existing Elixir application? If so, there’s a number of HTTP clients that you can utilise:
-
:httpc
is provided by the Erlang runtime. While it does work, there’s a lot of Erlang idioms that you’ll need to use.
-
hackney
is a pretty common HTTP client written for Erlang. It’s a fairly used alternative to httpc
.
-
mint
is probably the most recent HTTP client on the block, written in Elixir.
However, I would make the distinction between the HTTP client library as wrappers that use said client libraries/abstractions. One such example is finch
(GitHub - sneako/finch: Elixir HTTP client, focused on performance) which utilises mint
which is focused on performance.
If you want something even more generalised, Tesla (GitHub - teamon/tesla: The flexible HTTP client library for Elixir, with support for middleware and multiple adapters.) can be used with various HTTP clients (finch
, hackney
, httpc
), that includes abstractions such as middleware and a more module definition approach to client design.
Keep in mind that these assume “normal” HTTP requests. If you need something to work with Phoenix channels, I recall an Elixir library for that, but it escapes me at the moment.
3 Likes
This is super. Thanks. Exactly what I was looking for.
I’ll check out these libs.
FYI the library for channels is PhoenixClient, which just does channels and not plain HTTP.