## Server-Client contract Servers can serve content in 2 major formats: text/html and json (and links to many more content types) Clients/browsers can handle content in many more ways; they can just passive render the content or they can grow their proccessing and logic to become a smart engine or heavy application. These 2 factors need to cooperate smoothly. So, it is necessary to pre-define: - what a server serves - what a borwser/client procceses This contract: - allows development sharing in separate teams - sets clear rules for each development group - helps developing an ecosystem of reliable tools that can be reused and extended - helps to detect malfunctions and apply fixes and optimizations - makes the project manageable and scalable --- ## The Contract A cotract is recommended to include as less as possible rules; Of course there might be page-types that need special handling; Such pages are - product pages - product categories pages ### Rule #1: Default rule On the server side: - Server serves main content in html format; all non-user-based content is constucted and served in html format On the client side: - Client/browser requests the user-based content via ajax; (*still to be determinid the format of the replies*) ### Product Pages apache: serves product -> product: { id, title, prices:{ s1:{..}, s2:{..}, ... }, images:{...} } browser: check cookie(store) = s# -> use product.prices.s# to draw prices ---