How do I connect to a Phoenix API server from a Elixir client?

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! :smiley:

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.