Architecture ############ This page describes the architecture of PostgREST. Bird's Eye View =============== You can click on the components to navigate to their respective documentation. .. container:: img-dark .. See https://github.com/sphinx-doc/sphinx/issues/2240#issuecomment-187366626 .. raw:: html .. container:: img-light .. raw:: html Code Map ======== This section talks briefly about various important modules. Main ---- The starting point of the program is `Main.hs `_. CLI --- Main then calls `CLI.hs `_, which is in charge of :ref:`cli`. App --- `App.hs `_ is then in charge of composing the different modules. Auth ---- `Auth.hs `_ is in charge of :ref:`authn`. Api Request ----------- `ApiRequest.hs `_ is in charge of parsing the URL query string (following PostgREST syntax), the request headers, and the request body. A request might be rejected at this level if it's invalid. For example when providing an unknown media type to PostgREST or using an unknown HTTP method. Plan ---- Using the Schema Cache, `Plan.hs `_ generates an internal AST, filling out-of-band SQL details (like an ``ON CONFLICT (pk)`` clause) required to complete the user request. A request might be rejected at this level if it's invalid. For example when doing resource embedding on a nonexistent resource. Query ----- `Query.hs `_ generates the SQL queries (parametrized and prepared) required to satisfy the user request. Only at this stage a connection from the pool might be used. Schema Cache ------------ `SchemaCache.hs `_ is in charge of :ref:`schema_cache`. Config ------ `Config.hs `_ is in charge of :ref:`configuration`. Admin ----- `Admin.hs `_ is in charge of the :ref:`admin_server`. HTTP ---- The HTTP server is provided by `Warp `_. Listener -------- `Listener.hs `_ is in charge of the :ref:`listener`.