Routing

From Elixir Wiki
Jump to navigation Jump to search

Routing[edit]

File:Routing diagram.png
Routing diagram showing the flow of requests in an Elixir application.

Routing is a crucial aspect of any web application, including those built with the Elixir programming language. It defines how incoming HTTP requests are mapped to specific actions or functions within the application.

Elixir provides a powerful and flexible routing mechanism through the Phoenix framework, which is widely used for building web applications. Phoenix employs the concept of routers to handle incoming requests and map them to appropriate controller actions.

Route Definition[edit]

Routes in Elixir are defined using the `scope` and `pipe_through` functions within a router module. The route definitions specify the HTTP method, the URL path, and the controller action to be executed when the route is matched.

A basic route definition in Elixir looks like this:

```elixir

 get "/users", UserController, :index

```

The above route definition maps the `GET` request with the URL path `/users` to the `index` action within the `UserController` module.

Route Parameters[edit]

Routes in Elixir can also contain parameters, allowing for dynamic routing. These parameters are specified using colons in the URL path and can be extracted within the controller actions.

```elixir

 get "/users/:id", UserController, :show

```

In the above example, the route will match URLs such as `/users/1` or `/users/42`, with the `id` parameter accessible within the `show` action of the `UserController` module.

Route Groups[edit]

To organize routes and apply common configurations, Elixir provides route groups. Route groups allow for defining routes under specific scopes, applying middleware, or sharing route options.

```elixir

 scope "/api", Api do
   pipe_through :api
   resources "/users", UserController
 end

```

In the above example, all routes defined inside the `scope` block will be prefixed with `/api` and use the `:api` pipeline.

Pipeline and Plugs[edit]

A pipeline in Elixir is a series of functions, also known as plugs, that are executed in order for each incoming request. Plugs handle tasks such as authentication, parameter parsing, and request/response transformations.

Pipelines can be defined within the router module and are typically associated with route groups or applied to specific routes.

```elixir

 pipeline :api do
   plug :accepts, ["json"]
   plug ApiKeyAuthenticator
 end

```

In the above example, the `:api` pipeline specifies that requests should only accept JSON and should be authenticated using the `ApiKeyAuthenticator` plug.

Redirects[edit]

Elixir allows for creating redirect routes to handle situations where a certain URL needs to be redirected to another URL.

```elixir

 redirect "/", to: "/dashboard"

```

The above code will redirect requests to the root path (`/`) to the `/dashboard` path.

Conclusion[edit]

Routing in Elixir is an integral part of web application development. The Phoenix framework provides a robust routing system that allows for defining routes, handling dynamic parameters, organizing routes in groups, applying pipeline-based middleware, and handling redirects. Understanding and effectively implementing routing in Elixir is key to building scalable, maintainable, and user-friendly web applications.

Template:Elixir Template:Phoenix