These are both likely a case of either “holding the tool wrong” or “using the wrong tool”, but I am looking for information and advice.
We have built our Phoenix app in such a way that we have, excepting for ErrorView, never used a view (we are an API-only setup, and use GraphQL as our primary API, but have integrations and other needs where we have some non-GraphQL (mostly JSON) APIs. There are very few “resources”. Our controller methods (often not called by the traditional names because they aren’t resources) mostly use
Phoenix.Controller.json/2 directly for rendering.
Is there a way to handle errors directly in a Phoenix application without defining
render_errors[view: …] (up to 1.6) or
render_errors[formats: …] (1.7+)?
I believe that we have been also doing things wrong with how we handle certain sub-applications (we use an umbrella).
Our app structure looks something like this:
MyApp.Web has defined an endpoint, and it defines forward routes (excessively simplified here):
forward "/graphql", MyApp.GraphQL forward "/clients/one", MyApp.Client1.Router forward "/clients/two", MyApp.Client2.Router # ...
As of right now, each client (
MyApp.Client2, etc.) defines another Phoenix.Endpoint for testing (but not for non-test mode). Is there a good reason to define such an Endpoint, or is there a way to avoid defining such an Endpoint as it is not used in the normal implementation?
We can’t reference
MyApp.Client1 (etc.) without getting a cross-reference issue (access is always up in the list; client apps have no knowledge of one another, etc.).