alapok modosit
This commit is contained in:
@@ -0,0 +1,286 @@
|
||||
% 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}
|
||||
Reference in New Issue
Block a user