Hola, gracias por comentar. Acá algunas respuestas.
- Puedes armar proyectos de APIs solo utilizando Plug y Mix, Phoenix solo te da una estructura estandarizada y herramientas adicionales. En nuestro bot de MSN Messenger solamente utilizamos Plug sin Phoenix ya que solo se necesitaba un endpoint GET simple.
https://github.com/ElixirCL/msn-chatbot/blob/main/lib/msn_chatbot.ex
- Es bastante normal tener GenServers en proyectos Phoenix, sobre todo para cosas que requieren algo que guarde estado. Por ejemplo en nuestro Bot de Discord, usamos un elemento supervisado para la conexión a Discord, y en nuestro bot de MSN Messenger guardamos el historial de conversaciones.
https://github.com/ElixirCL/mate/blob/main/lib/mate/application.ex#L22
- PubSub de Phoenix es una abstracción que nos permite simplificar el uso del patrón de Publishers/Subscribers. El implementar este patrón con un GenServer o GenStage es viable, sin embargo, se debe considerar la persistencia y tomar casos de uso de reintentos al enviar los eventos, para estos casos es mejor utilizar soluciones estandarizadas que elaborar algo propio.
Algunos links de interés.
- https://elixir-lang.org/blog/2016/07/14/announcing-genstage/
- https://elixirschool.com/en/lessons/data_processing/genstage
- https://www.pompecki.com/post/phoenix-pubsub/
- https://blog.appsignal.com/2018/11/13/elixir-alchemy-understanding-elixirs-genstages-querying-the-blockchain.html
Según nuestro amigo @emoragaf de nuestro Discord
Sip, por ejemplo en teoría yo podría usar unos gen stages para manejar alertas en tiempo real en live view, pero hay cosas extra que gen stage provee que probablemente nunca aprovecharía, en ese sentido pubsub es más simple, pero se adapta mejor a ese caso de uso en particular Por el otro lado, yo podría usar pubsub para procesar datos, pero quizás tendría que implementar a mano batching, gen stage en ese caso sería mejor fit ya que incluye abstracciones como esa
No taria mal un libro sobre Elixir y Mote con Huesillos xd