What is Application State
Application state is a loaded and contextual term. It can mean many things, but here application state is the memory/behavior of an application at any given time. The state is determined based on a series of events and actions led by a user. Where are we now. What has been requested and therefore what should we show up.
One of the intentionally designed constraints on REST's HTTP architecture is to create a stateless web server. The server should remember nothing and start from a clean slate every time it communicates, it's the job of the client-browser to define/resume the state of the application.
The request we send from the client should be visibly clear as to the intention of the request and all the details we want the server to respond with.
Nice article about statelessness that allows the web to scale and why it is a vital part of the REST design:
https://ruben.verborgh.org/blog/2012/08/24/rest-wheres-my-state/
There are many ways to manipulate the state of an application, and an equal number of popular JavaScript libraries to help with the process. But wanted to focus on an elemental approach by way of query params.
What are Query Parameters?
In a nutshell, it's the key-value pairs expressed in the url after the '?' sign, and separated by '&'. Consider:
http://website.com/stuff?sort=ASC&page=4
Here, sort=ASC, and page=4 are the query params. The first part is the key, the second the associated value. Setting up query params is a great way to express state. The best part is that you get a shareable url that will hold onto the state of your web application. So if you spent hours finding a gift on an obscure eCommerce site, and you wanted to share the item on page 7 which was filtered down based on, let's say, income and geography- then all you have to do is share the link since the state of the app has been saved in the url via query params.
These dynamic segments of the url most commonly represent the model's serialization. But can include other application states.
Ember has a template helper, aptly named: query-params. This works in conjunction with the transitionTo and link-to methods. The controller also takes queryParams property. The Ember Docs do a great job explaining the entire concept:
https://guides.emberjs.com/v2.11.0/routing/query-params/
Based on the docs, there are 3 ways in Ember:
- Controller
- link-to helper
- transitionTo
Common Gotchas: