0% found this document useful (0 votes)
47 views42 pages

Working With Phoenix

Phoenix is a web framework that uses the MVC pattern and Plug specification to provide a fast, concurrent, and reliable architecture for web development in Elixir. It transforms HTTP requests via plugs into responses using controllers, views, and templates. Key aspects include endpoints that handle requests, routers that dispatch to controllers, and channels that enable real-time communication through pub/sub. Common libraries provide functionality for authentication, authorization, testing, and deployment.

Uploaded by

white rabbit
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as ODP, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
47 views42 pages

Working With Phoenix

Phoenix is a web framework that uses the MVC pattern and Plug specification to provide a fast, concurrent, and reliable architecture for web development in Elixir. It transforms HTTP requests via plugs into responses using controllers, views, and templates. Key aspects include endpoints that handle requests, routers that dispatch to controllers, and channels that enable real-time communication through pub/sub. Common libraries provide functionality for authentication, authorization, testing, and deployment.

Uploaded by

white rabbit
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as ODP, PDF, TXT or read online on Scribd
You are on page 1/ 42

Working with

Phoenix
Framework

Ruben Amortegui
@ramortegui
https://www.rubenamortegui.com
https://github.com/ramortegui
Phoenix
● Web framework
– MVC architectural pattern.
– Fast
– Concurrent
– Reliable
● Fast
– Model of concurrency
– Leverage pattern matching router functions
– Templates are pre-compiled
● Concurrent
– Elixir programming model makes reasoning about
concurrent systems almost as easy as reasoning
about single-threaded ones.
● Reliable
– Based on Processes:
● Linking structure
● Communication
● Supervision trees.
Status
● V 1.4.0 Nov. 7th 2018
– Bug fixes
– Cowboy 2 support
● Http2
– JSON library
● `jason` instead of `poison`
– Ecto 3.0
● ecto_sql / ecto
– Webpack
● Remove brunch
– Formatter integration
● Added on Elixir 1.6
Insights
HTTP Request/Response
– HTTP Request
● Cowboy (Plug adapter)
– Endpoint
– Router
– Controller
– Views
– Template
– HTTP Response
● send_resp function
https://elixir-examples.github.io/examples/phoenix-framework-from-http-request-to-response
Plug
– Plug is a specification for composable modules in
between web applications.
– It is also an abstraction layer for connection
adapters of different web servers.
Plug
– Function
● Specific for the module

– Module
● Shareable functionality
● Load resource on controllers
Plug as a Function
Plug as a Module
Transform a Conn
HTTP Request/Response
– HTTP Request
● Cowboy (Plug adapter)
– Endpoint
– Router
– Controller
– Views
– Template
– HTTP Response
● send_resp function
https://elixir-examples.github.io/examples/phoenix-framework-from-http-request-to-response
Endpoint
– The start and end of the request life cycle
– Handles all aspects of requests up until the point
where the router takes over
– Provides a core set of plugs to apply to all requests
– Dispatches requests into a designated router
Router
– Parses incoming requests and dispatches them to
the correct controller/action, passing parameters as
needed.
– Provides helpers to generate route paths or urls to
resources.
– Defines named pipelines through which we may
pass our requests.
– Pipelines - allow easy application of groups of plugs
to a set of routes.
Controllers
– Provide functions called actions to handle requests
– Actions:
● Prepare data and pass it into views
● Invoke rendering via views
● Perform redirects
Views
– Render templates
– Act as a presentation layer
– Define helper functions, available in templates, to
decorate data for presentation
Templates
– Files containing the contents that will be served in a
response.
– Provide the basic structure for a response, and
allow dynamic data to be substituted in.
– Are pre-compiled and fast.
Channels and PubSub
● Channels
– Manage sockets for easy real time communication
– Are analogous to controllers except that they allow bi-
directional communication with persistent connections
● PubSub
– Underlies the channel layer and allows clients to
subscribe to topics
– Abstracts the underlying PubSub adapter for third-
party PubSub integration
Default Structure and Files
– mix phx.new test_app
Generators – phx.gen.html
mix phx.gen.html Accounts User users
name:string age:integer
Generators – phx.gen.html

– Migration
– Model
– Context
– View
– Template
– Tests
Developer tips
● How to get help?
– mix help
– mix help phx.new
● Inside iex
– h function/arity
– Eg: iex> h IO.puts
Developer tips
● .iex.exs
Developer Tips
● mix format
Developer Tips
● Working in a team
– Migrations
– Javascript dependencies
– Mix dependencies

● Add mix tasks for updates


– mix update
Developer Tips
● Code Analyzer
– https://github.com/rrrene/credo
Credo
● mix credo --all
Credo
● mix credo –strict --all
Credo
Developer Tips
● CircleCI, TravisCI
– Run tests
– Check format
– Analyze code
Libraries
● Authentication
– Guardian (protection and function callbacks for
authentication)
● Implements JSON Web Token
● https://github.com/ueberauth/guardian
Libraries
● Authorization and Resource loads
– Canary
● https://github.com/cpjk/canary
– Bodyguard
● https://github.com/schrockwell/bodyguard
– Policy Wonk(*)
● https://github.com/boydm/policy_wonk
Libraries
● Tests
– ExUnit
– Tags
– Setup
– ex_machina
Libraries
● Deployments
– Server
● Distillery
– Build releases
– https://github.com/bitwalker/distillery
● Edeliver
– Build and deploy elixir apps with hot code upgrade.
– https://github.com/edeliver/edeliver
– Heroku
● https://hexdocs.pm/phoenix/heroku.html
Other Libraries
● Wrappers
– Clamxir: ClamAV wrapper based on Clamby.
Summary
● HTTP Request/Response with phoenix is based
on transformation of the structure of
%Plug.Conn{...}, and is fast, no magic.
● Phoenix is based on Plugs, and understanding
plugs will make your work with Phoenix a
breeze.
References
● https://hexdocs.pm/phoenix/overview.html
● https://hexdocs.pm/phoenix/plug.html
● Programming phoenix 1.4. Chris McCord,
Bruce Tate, José Valim. V Oct 19. 2018
Thanks!

Q & A?

@ramortegui
https://www.rubenamortegui.com
https://github.com/ramortegui

You might also like