Backend

MVOP4 WBF

Bc. Matěj Cajthaml ©

Smíchovská střední průmyslová
škola a gymnázium

icon

Backend

Backend

  • serverová část aplikace
  • zpracovává data, komunikuje s databází
  • poskytuje data frontendu — API
  • zajišťuje bezpečnost, autentizaci

Proč se k API nemůžeme připojovat z frontendu?

Backendové technologie / jazyky / frameworky

  • Node.js
  • Express
  • PHP
  • Ruby on Rails
  • Django
  • Flask
  • ASP.NET
  • Java Spring

Připomenutí

Opakování HTTP

  • protokol pro přenos dat | dříve hypertextový
  • požadavek vs. odpověď
  • hlavičky: pár klíč-hodnota
  • formáty dat: jakékoliv, zejména textové
  • TCP, v budoucnu nejspíše ne (HTTP/3)

HTTP požadavek

  • metoda: GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD, ...
  • URL bez protokolu a domény
  • hlavičky
  • tělo

HTTP odpověď

  • kód odpovědi: 200, 404, 500, ...
  • statusový text
  • hlavičky
  • tělo

Kdo určuje jaký význam mají jednotlivé kódy odpovědí? Co hlavičky?

Nejznámější hlavičky

  • Content-Type
  • Content-Length
  • Authorization
  • Cache-Control
  • Cookie
  • Set-Cookie
  • User-Agent
  • Referer
  • Host
  • Acess-Control-Allow-Origin

Opakování REST API

  • architektura pro vytváření API
  • pracujeme se zdroji
  • přesně používáme metody
  • data reprezentujeme ve formátu dle požadavku (nebo je to možné)
  • přístup k datům je bezstavový (bez opakovaného volání)
  • a další...

Co je to HATOAS?

Opakování fetch

  • moderní způsob pro asynchronní komunikaci
  • využívá Promises

Express

Express

  • nejpopulárnější framework pro Node.js
  • jednoduchý, ale řeší nemalé problémy
  • routování, middleware, šablony, ...
  • mnoho pluginů

Instalace & použití

  • do projektu stačí nainstalovat express
  • poté stačí vytvořit instanci aplikace
  • aplikaci poté řekneme, ať naslouchá na portu
  • daný port poté používáme v aplikacích

Ukázka použití

Endpointy

  • routování pomocí metody app.METHOD
  • zadáváme cestu a funkci (middleware), která se má zavolat
  • máme k dispozici požadavek a odpověď

Ukázka endpointu

Middleware

Middleware

  • funkce s parametry
  • přijme požadavek, možná provede nějakou akci a možná předá ho další middleware v pořadí
  • může mít různé účely — v definici nemusí být funkce, ale program, fyzikální zařízení, ...
  • parametry:
    • req — požadavek
    • res — odpověď
    • next — funkce pro zavolání další middleware

Middleware

  • používáme na endpoint
  • můžeme použít globálně pro celou aplikaci či část
  • můžeme jich použít více po endpointu

Aplikace s odpovědí

Omezení přístupu

Omezení přístupu na endpoint

CORS

Middleware s parametry

Vstup

Vstup

  • čteme z těla požadavku
  • někdy i URL (query parametry, cesta)
  • někdy i hlavičky
  • potřebujeme něco, co nám zpracuje tyto data

body-parser

  • plugin pro Express
  • zpracovává tělo požadavku
  • nastavíme si, jaký formát očekáváme, ale např. i velikost
  • přidáme ho jako middleware

Ukázka použití

Fujky data

  • co když datům nevěříme (tj. vždy)?
  • potřebujeme validaci
  • ruční podmínky a další je nebezpečné a nepříjemné
  • můžeme použít knihovnu
  • např. express-validator, joi, ...

Ukázka použití

Opakování DB

Opakování DB

  • databáze
  • typy databází — relační, dokumentové, ...
  • SQL
  • tabulka, řádek, sloupec, primární klíč, cizí klíč
  • dotazy
  • ORM

Vytvoření tabulky

Vytvoření řádku

Výběry 1

Výběry 2

Výběry 3

Výběry 4

Výběry 5

Úprava řádku

Smazání řádku

Pořadí

Více pořadí

Limitování a posun

Unikátní hodnoty

Počet

Suma, min, max, průměr

Pojmenování

Seskupení

Seskupení s agregací

Filtrování po agregaci

Inner join

Join s podmínkou

Použití DB na backendu

DB v Node.js

  • spousta knihoven
  • ukážeme si pg pro PostgreSQL
  • ORM: sequelize, prisma, ...

Připojení

Výběr

Ukázky v pg

SQL Injection

  • bezpečnostní chyba
  • do parametru můžeme vložit vlastní SQL kód
  • co bychom mohli provést pomocí SQL Injection v minulém příkladu?

Řešení SQL Injection

  • nepoužívat čisté vkládání do SQL dotazu
  • použít správné metody nebo escapovat vstup
  • často taktéž tzv. prepared statements

Řešení SQL Injection

Správa serveru

Jaký port používá HTTP/HTTPS?

Zadávali jste někdy do URL port?

Může na jednom PC tedy běžet více serverů HTTP?

Reverzní proxy

  • proxy, která přesměrovává požadavky na jiný server či port
  • často se používá pro zajištění bezpečnosti, load balancingu, škálování, ...

Reverzní proxy

sequenceDiagram
    actor Client
    participant Proxy
    
    box Server
        participant App A as Server/App A
        participant App B as Server/App B
    end
    
    Client ->> Proxy: Request A (port 80)
    Proxy ->> App A: Request (port 3000)
    activate App A
    App A ->> Proxy: Response
    deactivate App A
    Proxy ->> Client: Response
    
    Client ->> Proxy: Request B (port 80)
    Proxy ->> App B: Request (port 3001)
    activate App B
    App B ->> Proxy: Response
    deactivate App B
    Proxy ->> Client: Response
                
                

Děkuji za pozornost!

  • matej.cajthaml@ssps.cz
  • https://ssps.cajthaml.eu/