Backend tó fi SQL sí ipò àkọ́kọ́ Alpha

Àwọn API PostgreSQL tó yára.
Lílo ìrántí díẹ̀.

Módù Rust fún Nginx tó ń mú àwọn iṣẹ́ PostgreSQL wá nípasẹ̀ HTTP, tó sì ń fi ìfitónilétí ìyípadà ránṣẹ́ nípasẹ̀ WebSockets.

GitHub

Bí pgxio ṣe ń dín ìnáwó àfikún àwọn ohun àmúlò kù

Yípo ìṣẹ̀lẹ̀ Nginx

HTTP, WebSockets, àti I/O ibi ìpamọ́ dátà tí kò dá ìṣiṣẹ́ dúró jọ ń lo yípo ìṣẹ̀lẹ̀ Nginx.

Àwọn ìsopọ̀ ibi ìpamọ́ dátà tí a tún lò

Àwọn gbólóhùn tí a ti pèsè àti pipelining ń dín iṣẹ́ tí a ń tún ṣe àti ìrìnàjò ìbéèrè àti ìdáhùn sí ibi ìpamọ́ dátà kù.

Kò sí ṣíṣe serialization JSON lẹ́ẹ̀kan sí i

Ọ̀rọ̀ ìdáhùn JSONB láti PostgreSQL ń kọjá láìyípadà. Bí a bá pa ìṣàyẹ̀wò ìmúdájú àbájáde, a tún yẹra fún parsing JSON ìdáhùn.

Fífi ìbéèrè ránṣẹ́ láì ṣe ẹ̀dà Ti ìdánwò

Ẹ̀yà tí a kọ́ pẹ̀lú libpq tí a ti ṣe àtúnṣe sí ń mú pípa ẹ̀dà ara ìbéèrè sínú Rust àti libpq kúrò fún àwọn ìbéèrè tó bá yẹ. Yíyá ìrántí fún lílò (borrowing) aládàáṣiṣẹ́ kan àwọn ìbéèrè ńlá tó bá yẹ lórí àwọn ìsopọ̀ ibi ìpamọ́ dátà aláìfipamọ́ (plaintext). Àwọn ẹ̀yà tí a kọ́ lọ́nà déédéé ṣì ń ṣe ẹ̀dà.

Ìdánwò ìwọ̀n iṣẹ́ tó wà lókè lo àwọn buffer tí a ṣe ẹ̀dà wọn. Àwọn ìdáhùn àti TLS ṣì ní pípa ẹ̀dà nínú.

Bí ó ṣe ń ṣiṣẹ́

pgxio.confÀyọkà ètò ìṣètò
# HTTP endpoints
pgxio_endpoint list_tasks
  web.list_tasks read_only;

pgxio_endpoint create_task
  web.create_task;

# WebSocket subscription authorization
pgxio_stream tasks
  web.authorize_tasks;
  1. 01

    Kọ àwọn iṣẹ́ SQL

    Àwọn iṣẹ́ SQL ń gba JSON wọlé, wọ́n sì ń dá JSON padà. Wọ́n ń bójú tó àwọn ìbéèrè dátà, àwọn òfin iṣẹ́, àti fífúnni ní àṣẹ.

  2. 02

    Ṣe àfihàn àwọn endpoint tí a sọ ní pàtó

    Sọ àwọn iṣẹ́ tí API rẹ ń mú wá ní pàtó. pgxio ń ṣàyẹ̀wò àwọn JWT, ó sì ń pe iṣẹ́ kọ̀ọ̀kan nínú transaction kan.

  3. 03

    Forúkọ sílẹ̀ fún ìfitónilétí ìyípadà

    Àwọn ìforúkọsílẹ̀ WebSocket tí a fún láṣẹ ń fi àmì ìyípadà ránṣẹ́. Ohun èlò oníbàárà rẹ yóò tún gba àwòrán ipò dátà lọ́wọ́lọ́wọ́ nípasẹ̀ HTTP.

Ẹ̀rọ aṣàwákiri / ohun èlò oníbàáràHTTP + WebSocket
pgxio nínú NginxRust + libpq tí kò dá ìṣiṣẹ́ dúró
PostgreSQLÀwọn iṣẹ́ + ìfitónilétí

Àwọn ìforúkọsílẹ̀ ń fi àmì ìyípadà ránṣẹ́; wọn kì í ṣe àkọsílẹ̀ ìṣẹ̀lẹ̀ tó wà pẹ́ títí. Nígbà tí àwọn ohun èlò oníbàárà bá tún sopọ̀, wọ́n tún forúkọ sílẹ̀, wọ́n sì gba àwòrán ipò dátà tuntun.

Ṣiṣẹ́ lórí ẹ̀rọ agbègbè

Ṣe àwọn àṣẹ wọ̀nyí láti inú ẹ̀dà kóòdù pgxio tí ó ti wà lórí ẹ̀rọ rẹ. O nílò Docker Compose àti Python 3.9 tàbí ẹ̀yà tó tuntun jù ú lọ.

Àkójọpọ̀ àwọn ohun èlò ìdàgbàsókè tí a fi kún un ń so mọ́ localhost. pgxio jẹ́ sọ́fitiwia ní ìpele alpha; ìṣètò yìí jẹ́ fún ṣíṣàwárí lórí ẹ̀rọ agbègbè.

Terminal · láti inú ẹ̀dà kóòdù pgxio rẹ
bin/pgxio init
bin/pgxio up
TOKEN=$(bin/pgxio token alice)

curl http://localhost:8080/v1/create_task \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"title":"Hello from pgxio"}'

curl http://localhost:8080/v1/list_tasks \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'