Odoo-Server provides an application server on which specific business applications can be built. It is also a complete development framework, offering a range of features to write those applications. Among those features, the Odoo-Server ORM provides functionalities and an interface on top of the PostgreSQL server. The Odoo-Server server also features a specific layer designed to communicate with the web browser-based client. This layer connects users using standard browsers to the server.
From a developer perspective, the server acts both as a library which brings the above benefits while hiding the low-level details, and as a simple way to install, configure and run the written applications. The server also contains other services, such as extensible data models and view, workflow engine or reports engine. However, those are Odoo-Server services not specifically related to security and are therefore not discussed in details in this document.
Server - ORM
The Object Relational Mapping ORM layer is one of the salient features of the Odoo-Server Server. It provides additional and essential functionalities on top of the PostgreSQL server. Data models are described in Python and Odoo-Server creates the underlying database tables using this ORM. All the benefits of RDBMS such as unique constraints, relational integrity or efficient querying are used and completed by Python flexibility. For instance, arbitrary constraints written in Python can be added to any model. Different modular extensibility mechanisms are also afforded by Odoo-Server.
It is important to understand the ORM responsibility before attempting to by-pass it and to access directly the underlying database via raw SQL queries. When using the ORM, Odoo-Server can make sure the data remains free of any corruption. For instance, a module can react to data created in a particular table. This behavior can occur only if queries go through the ORM.
Server - Web
The web layer offers an interface to communicate with standard browsers. In the 6.1 version of Odoo-Server, the web-client has been rewritten and integrated into the Odoo-Server server tier. This web layer is a WSGI-compatible application based on werkzeug. It handles regular http queries to server static file or dynamic content and JSON-RPC queries for the RPC made from the browser.
By itself, the Odoo-Server server is a core. For any enterprise, the value of Odoo-Server lies in its different modules. The role of the modules is to implement any business requirement. The server is the only necessary component to add modules. Any official Odoo-Server release includes a lot of modules, and hundreds of modules are available thanks to the community. Examples of such modules are Account, CRM, HR, Marketing, MRP, Sale, etc.
As the application logic is mainly contained server-side, the client is conceptually simple. It issues a request to the server, gets data back and displays the result (e.g. a list of customers) in different ways (as forms, lists, calendars, ...). Upon user actions, it sends queries to modify data to the server.