docs: add architecture description

This commit is contained in:
steve-chavez
2024-04-08 13:50:00 -05:00
committed by Steve Chavez
parent ab73624366
commit b91908b749
+50
View File
@@ -1,3 +1,53 @@
# Architecture
This document describes the high-level architecture of PostgREST.
## Bird's Eye View
![PostgREST Architecture](docs/_static/arch.png)
On the highest level, PostgREST processes the user HTTP request, if it's accepted it generates a SQL query, executes it, and produces a response.
## Code Map
This section talks briefly about various important modules.
The starting points of the program are `main/Main.hs` -> `src/PostgREST/CLI.hs` -> `src/PostgREST/App.hs`.
`App.hs` is then in charge of composing the different modules.
### Auth
It authenticates the request using JWT.
### ApiRequest
PostgREST operates over two types of resources: database relations (tables or views) and database functions; providing different representations (depending on the media type)
for them.
This module is in charge of representing the operation over an `ApiRequest` type. It parses the URL querystring following PostgREST syntax, the request headers, and the request body
(if possible it avoids parsing the body and sends it directly to the db).
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, this module enables more complex functionality (like resource embedding) by enriching the ApiRequest. It generates intermediate Plan types
that then will be used for the next step.
A request might be rejected at this level if it's invalid. For example when doing resource embedding on a nonexistent resource.
### Query
This module generates SQL queries that are parametrized and prepared. Only at this stage a connection from the pool might be used.
A query might fail (and be rollbacked) at this level if it doesn't comply to certain conditions, e.g. by not returning a single row when a ``Accept: application/vnd.pgrst.object``
header is specified.
### SchemaCache
This queries the PostgreSQL system catalogs and caches the results into a SchemaCache type, which then is used by the other modules.
### Admin
Admin server exposed in another port, it provides health checks.