Files
GKNB_MSTM071/Backend_ppt/RestAPI/restapi_alapok.tex
T
2026-01-28 02:29:38 +01:00

287 lines
8.0 KiB
TeX

% REST API alapok
\section{REST API Alapok}
\begin{frame}{Mi a REST API?}
\begin{block}{REST - Representational State Transfer}
\begin{itemize}
\item Architektúra stílus webes szolgáltatásokhoz
\item Roy Fielding dolgozta ki 2000-ben
\item HTTP protokollon alapuló kommunikáció
\item Állapotmentes (stateless) kliens-szerver kapcsolat
\end{itemize}
\end{block}
\begin{exampleblock}{API - Application Programming Interface}
Interfész, amin keresztül különböző alkalmazások kommunikálnak egymással.
\end{exampleblock}
\end{frame}
\begin{frame}{REST alapelvek}
\begin{enumerate}
\item \textbf{Kliens-szerver architektúra}
\begin{itemize}
\item Szétválasztott felelősségek
\item Kliens: felhasználói felület
\item Szerver: adatkezelés, üzleti logika
\end{itemize}
\item \textbf{Állapotmentesség (Stateless)}
\begin{itemize}
\item Minden kérés független
\item Szerver nem tárol kliens állapotot
\end{itemize}
\item \textbf{Cachelhető}
\begin{itemize}
\item Válaszok cache-elhetők a teljesítmény növelésére
\end{itemize}
\end{enumerate}
\end{frame}
\begin{frame}{REST alapelvek (folyt.)}
\begin{enumerate}
\setcounter{enumi}{3}
\item \textbf{Egységes interfész}
\begin{itemize}
\item Erőforrások URI-kon keresztül azonosíthatók
\item Reprezentációkon keresztüli manipuláció
\item Önleíró üzenetek
\end{itemize}
\item \textbf{Rétegzett rendszer}
\begin{itemize}
\item Köztes rétegek (proxy, gateway) használhatók
\item Kliens nem tudja, közvetlenül a szerverhez kapcsolódik-e
\end{itemize}
\end{enumerate}
\end{frame}
\begin{frame}{Erőforrások és URI-k}
\begin{block}{Erőforrás (Resource)}
Minden, amit azonosítani és kezelni akarunk (pl. felhasználó, termék, rendelés).
\end{block}
\begin{exampleblock}{URI példák}
\begin{itemize}
\item \texttt{/users} - Összes felhasználó
\item \texttt{/users/123} - Adott felhasználó (ID: 123)
\item \texttt{/users/123/posts} - Egy felhasználó posztjai
\item \texttt{/products} - Összes termék
\item \texttt{/products/456} - Adott termék
\end{itemize}
\end{exampleblock}
\begin{alertblock}{Konvenció}
Használj \textbf{főneveket} és \textbf{többes számot}: \texttt{/users}, \texttt{/products}
\end{alertblock}
\end{frame}
\begin{frame}{HTTP metódusok}
\begin{table}
\small
\begin{tabular}{|l|l|l|l|}
\hline
\textbf{Metódus} & \textbf{Művelet} & \textbf{Idemp.} & \textbf{Példa} \\
\hline
GET & Lekérdezés & Igen & Lista/részlet \\
POST & Létrehozás & Nem & Új elem \\
PUT & Frissítés (teljes) & Igen & Teljes csere \\
PATCH & Frissítés (rész) & Nem & Rész módosítás \\
DELETE & Törlés & Igen & Elem törlése \\
\hline
\end{tabular}
\end{table}
\vspace{0.3cm}
\begin{block}{Idempotencia}
Ugyanaz a kérés többször végrehajtva ugyanazt az eredményt adja.
\end{block}
\end{frame}
\begin{frame}[fragile,shrink=10]{HTTP metódusok - GET példák}
\begin{exampleblock}{Összes elem lekérdezése}
\tiny
\begin{verbatim}
GET /api/users
Response: 200 OK
[
{"id": 1, "name": "Alice", "email": "alice@example.com"},
{"id": 2, "name": "Bob", "email": "bob@example.com"}
]
\end{verbatim}
\end{exampleblock}
\begin{exampleblock}{Egy elem lekérdezése}
\tiny
\begin{verbatim}
GET /api/users/1
Response: 200 OK
{"id": 1, "name": "Alice", "email": "alice@example.com"}
\end{verbatim}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile,shrink=10]{HTTP metódusok - POST, PUT}
\begin{exampleblock}{POST - Új elem létrehozása}
\tiny
\begin{verbatim}
POST /api/users
Body: {"name": "Charlie", "email": "charlie@example.com"}
Response: 201 Created
{"id": 3, "name": "Charlie", "email": "charlie@example.com"}
\end{verbatim}
\end{exampleblock}
\begin{exampleblock}{PUT - Teljes frissítés}
\tiny
\begin{verbatim}
PUT /api/users/1
Body: {"name": "Alice Smith", "email": "alice.smith@example.com"}
Response: 200 OK
{"id": 1, "name": "Alice Smith", "email": "alice.smith@example.com"}
\end{verbatim}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile,shrink=10]{HTTP metódusok - PATCH, DELETE}
\begin{exampleblock}{PATCH - Részleges frissítés}
\tiny
\begin{verbatim}
PATCH /api/users/1
Body: {"email": "newemail@example.com"}
Response: 200 OK
{"id": 1, "name": "Alice", "email": "newemail@example.com"}
\end{verbatim}
\end{exampleblock}
\begin{exampleblock}{DELETE - Törlés}
\tiny
\begin{verbatim}
DELETE /api/users/1
Response: 204 No Content
\end{verbatim}
\end{exampleblock}
\end{frame}
\begin{frame}{HTTP státuszkódok}
\begin{columns}
\begin{column}{0.48\textwidth}
\begin{block}{2xx - Sikeres}
\begin{itemize}
\item \textbf{200} OK
\item \textbf{201} Created
\item \textbf{204} No Content
\end{itemize}
\end{block}
\begin{block}{4xx - Kliens hiba}
\begin{itemize}
\item \textbf{400} Bad Request
\item \textbf{401} Unauthorized
\item \textbf{403} Forbidden
\item \textbf{404} Not Found
\end{itemize}
\end{block}
\end{column}
\begin{column}{0.48\textwidth}
\begin{block}{5xx - Szerver hiba}
\begin{itemize}
\item \textbf{500} Internal Error
\item \textbf{502} Bad Gateway
\item \textbf{503} Service Unavailable
\end{itemize}
\end{block}
\begin{alertblock}{Fontos}
Mindig a megfelelő státuszkódot küldd!
\end{alertblock}
\end{column}
\end{columns}
\end{frame}
\begin{frame}[fragile,shrink=10]{JSON formátum}
\begin{block}{JavaScript Object Notation}
A REST API-k leggyakoribb adatformátuma.
\end{block}
\begin{exampleblock}{Példa}
\tiny
\begin{verbatim}
{
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"age": 30,
"active": true,
"roles": ["user", "admin"],
"address": {
"city": "Budapest",
"zip": "1111"
}
}
\end{verbatim}
\end{exampleblock}
\end{frame}
\begin{frame}{REST vs SOAP}
\begin{table}
\tiny
\begin{tabular}{|l|p{4cm}|p{4cm}|}
\hline
& \textbf{REST} & \textbf{SOAP} \\
\hline
Protokoll & HTTP & HTTP, SMTP, TCP \\
Formátum & JSON, XML & Csak XML \\
Állapot & Stateless & Lehet stateful \\
Sebesség & Gyorsabb & Lassabb \\
Használat & Egyszerűbb & Komplexebb \\
\hline
\end{tabular}
\end{table}
\vspace{0.3cm}
\begin{exampleblock}{Mikor REST?}
Webes és mobil alkalmazások, publikus API-k, mikroszolgáltatások
\end{exampleblock}
\end{frame}
\begin{frame}[fragile,shrink=10]{Hibakezelés}
\begin{exampleblock}{Hibaválasz struktúra}
\tiny
\begin{verbatim}
{
"error": {
"code": "USER_NOT_FOUND",
"message": "A megadott felhasználó nem található",
"details": "User with ID 123 does not exist",
"timestamp": "2026-01-27T20:30:00Z"
}
}
\end{verbatim}
\end{exampleblock}
\begin{alertblock}{Best Practices}
\begin{itemize}
\item Mindig küldd a megfelelő HTTP státuszkódot
\item Adj értelmes hibaüzeneteket
\item Ne adj ki érzékeny információkat
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}{Összefoglalás - REST Alapok}
\begin{itemize}
\item \textbf{REST} = Representational State Transfer (Reprezentációs Állapotátvitel)
\item Architektúra stílus HTTP-n keresztül
\item \textbf{Erőforrások} (Resources) URI-kon keresztül azonosíthatók
\item \textbf{HTTP metódusok}: GET (olvasás), POST (létrehozás), PUT/PATCH (módosítás), DELETE (törlés)
\item \textbf{Státuszkódok} (Status Codes) jelzik a kérés eredményét
\item \textbf{JSON} a leggyakoribb adatformátum
\item \textbf{Állapotmentes} (Stateless) kommunikáció
\end{itemize}
\end{frame}