% Postman

\section{API tesztelés Postman-nel}

\begin{frame}{Mi a Postman?}
  \begin{block}{Postman}
    API fejlesztéshez és teszteléshez használt platform.
  \end{block}
  
  \begin{exampleblock}{Funkciók}
    \begin{itemize}
      \item HTTP kérések küldése
      \item Collection-ök létrehozása
      \item Environment változók
      \item Automatikus tesztek
      \item API dokumentáció generálás
      \item Csapatmunka támogatás
    \end{itemize}
  \end{exampleblock}
\end{frame}

\begin{frame}{Postman telepítése}
  \begin{enumerate}
    \item \textbf{Weboldal}: \url{https://www.postman.com/downloads/}
    \item \textbf{Letöltés}: Desktop app (Windows, Mac, Linux)
    \item \textbf{Telepítés}: Installer futtatása
    \item \textbf{Bejelentkezés}: Ingyenes fiók létrehozása (opcionális)
  \end{enumerate}
  
  \vspace{0.5cm}
  
  \begin{alertblock}{Web verzió}
    Használható böngészőben is, de a desktop app gyorsabb.
  \end{alertblock}
\end{frame}

\begin{frame}{Első kérés Postman-ben}
  \begin{enumerate}
    \item \textbf{New} $\rightarrow$ \textbf{HTTP Request}
    \item \textbf{Metódus} kiválasztása: GET, POST, PUT, DELETE
    \item \textbf{URL} megadása: \texttt{http://localhost:3000/api/users}
    \item \textbf{Send} gomb
    \item \textbf{Response} megjelenik alul
  \end{enumerate}
  
  \vspace{0.3cm}
  
  \begin{exampleblock}{Példa}
    GET \texttt{http://localhost:3000/api/users}
  \end{exampleblock}
\end{frame}

\begin{frame}[shrink=10]{HTTP metódusok Postman-ben}
  \begin{columns}
    \begin{column}{0.48\textwidth}
      \begin{block}{GET kérés}
        \begin{itemize}
          \item Metódus: GET
          \item URL: /api/users
          \item Body nem kell
        \end{itemize}
      \end{block}
      
      \begin{block}{POST kérés}
        \begin{itemize}
          \item Metódus: POST
          \item URL: /api/users
          \item Body tab $\rightarrow$ JSON
        \end{itemize}
      \end{block}
    \end{column}
    
    \begin{column}{0.48\textwidth}
      \begin{block}{PUT kérés}
        \begin{itemize}
          \item Metódus: PUT
          \item URL: /api/users/:id
          \item Body tab $\rightarrow$ JSON
        \end{itemize}
      \end{block}
      
      \begin{block}{DELETE kérés}
        \begin{itemize}
          \item Metódus: DELETE
          \item URL: /api/users/:id
          \item Body nem kell
        \end{itemize}
      \end{block}
    \end{column}
  \end{columns}
\end{frame}

\begin{frame}[shrink=10]{Request Body típusok}
  \begin{enumerate}
    \item \textbf{none} - Nincs body (GET, DELETE)
    
    \item \textbf{form-data} - Multipart form (fájl feltöltés)
    
    \item \textbf{x-www-form-urlencoded} - URL encoded form
    
    \item \textbf{raw} - Nyers adat
    \begin{itemize}
      \item JSON (leggyakoribb)
      \item Text, XML, HTML
    \end{itemize}
    
    \item \textbf{binary} - Fájl feltöltés
    
    \item \textbf{GraphQL} - GraphQL query
  \end{enumerate}
\end{frame}

\begin{frame}[fragile,shrink=10]{Headers beállítása}
  \begin{exampleblock}{Headers tab}
    \tiny
    \begin{verbatim}
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN_HERE
Accept: application/json
    \end{verbatim}
  \end{exampleblock}
  
  \begin{alertblock}{Fontos header-ek}
    \begin{itemize}
      \item \textbf{Content-Type} - Body formátuma
      \item \textbf{Authorization} - Autentikáció
      \item \textbf{Accept} - Milyen formátumot várunk
    \end{itemize}
  \end{alertblock}
\end{frame}

\begin{frame}{Collection-ök}
  \begin{block}{Mi a Collection?}
    Kapcsolódó API kérések csoportosítása egy helyen.
  \end{block}
  
  \begin{exampleblock}{Collection struktúra}
    \begin{itemize}
      \item \textbf{Users}
      \begin{itemize}
        \item GET All Users
        \item GET User by ID
        \item POST Create User
        \item PUT Update User
        \item DELETE User
      \end{itemize}
      \item \textbf{Products}
      \item \textbf{Authentication}
    \end{itemize}
  \end{exampleblock}
\end{frame}

\begin{frame}{Collection létrehozása}
  \begin{enumerate}
    \item \textbf{Collections} $\rightarrow$ \textbf{+} (New Collection)
    \item \textbf{Név}: pl. "My REST API"
    \item \textbf{Add a request} $\rightarrow$ kérések hozzáadása
    \item \textbf{Mappa}: Kérések mappákba szervezése
    \item \textbf{Save} - Minden kérést menteni kell
  \end{enumerate}
  
  \vspace{0.3cm}
  
  \begin{alertblock}{Előnyök}
    Gyors hozzáférés, újrafelhasználás, megosztás csapattal.
  \end{alertblock}
\end{frame}

\begin{frame}[shrink=10]{Environment Variables}
  \begin{block}{Miért?}
    Különböző környezetek (dev, staging, prod) közötti váltás anélkül, hogy minden kérést módosítanánk.
  \end{block}
  
  \begin{exampleblock}{Environment létrehozása}
    \begin{enumerate}
      \item Environments $\rightarrow$ + New Environment
      \item Név: \texttt{Development}
      \item Változók:
      \begin{itemize}
        \item \texttt{baseUrl}: \texttt{http://localhost:3000}
        \item \texttt{apiKey}: \texttt{dev-key-123}
        \item \texttt{token}: \texttt{eyJhbGc...}
      \end{itemize}
      \item Save
    \end{enumerate}
  \end{exampleblock}
\end{frame}

\begin{frame}[shrink=10]{Environment használata}
  \begin{exampleblock}{Változó használat}
    \begin{itemize}
      \item URL: \texttt{\{\{baseUrl\}\}/api/users}
      \item Header: \texttt{Authorization: Bearer \{\{token\}\}}
      \item Body: \texttt{\{"userId": "\{\{userId\}\}"\}}
    \end{itemize}
  \end{exampleblock}
  
  \begin{exampleblock}{Váltás környezetek között}
    Jobb felső sarok $\rightarrow$ Environment kiválasztása
    \begin{itemize}
      \item Development
      \item Staging
      \item Production
    \end{itemize}
  \end{exampleblock}
\end{frame}

\begin{frame}[fragile,shrink=15]{Tests (Tesztek) (1/2)}
  \begin{block}{Mi a Test?}
    JavaScript kód, amely a válasz után fut és ellenőrzi azt.
  \end{block}
  
  \begin{exampleblock}{Tests tab - Alapvető tesztek}
    \tiny
    \begin{verbatim}
// Status code
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

// Response time
pm.test("Response time < 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

// JSON response
pm.test("Response is JSON", function () {
    pm.response.to.be.json;
});
    \end{verbatim}
  \end{exampleblock}
\end{frame}

\begin{frame}[fragile,shrink=15]{Tests (Tesztek) (2/2)}
  \begin{exampleblock}{JSON response ellenőrzés}
    \tiny
    \begin{verbatim}
const response = pm.response.json();

pm.test("Name is John", function () {
    pm.expect(response.name).to.eql("John Doe");
});

pm.test("Has email field", function () {
    pm.expect(response).to.have.property("email");
});

pm.test("Email is valid", function () {
    pm.expect(response.email).to.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/);
});
    \end{verbatim}
  \end{exampleblock}
  
  \begin{alertblock}{Test Results}
    Send után megjelenik a Tests panel az eredménnyel.
  \end{alertblock}
\end{frame}

\begin{frame}[fragile,shrink=15]{Pre-request Scripts}
  \begin{block}{Mi az?}
    JavaScript kód, amely a kérés előtt fut le.
  \end{block}
  
  \begin{exampleblock}{Példák}
    \tiny
    \begin{verbatim}
// Timestamp generálás
pm.environment.set("timestamp", Date.now());

// Random szám
pm.environment.set("randomNumber", Math.floor(Math.random() * 1000));

// UUID generálás
pm.environment.set("uuid", pm.variables.replaceIn('{{$guid}}'));

// Változó beállítása
pm.environment.set("userId", 123);
    \end{verbatim}
  \end{exampleblock}
\end{frame}

\begin{frame}[fragile,shrink=15]{Változók mentése Tests-ből}
  \begin{exampleblock}{Response-ból változó mentése}
    \tiny
    \begin{verbatim}
const response = pm.response.json();

// Token mentése
pm.environment.set("token", response.token);

// User ID mentése
pm.environment.set("userId", response.id);

// Használat következő kérésben
// URL: {{baseUrl}}/api/users/{{userId}}
// Header: Authorization: Bearer {{token}}
    \end{verbatim}
  \end{exampleblock}
  
  \begin{alertblock}{Workflow}
    Login $\rightarrow$ token mentése $\rightarrow$ Protected endpoint hívás
  \end{alertblock}
\end{frame}

\begin{frame}{Collection Runner}
  \begin{block}{Mi az?}
    Collection-ök automatikus futtatása sorban.
  \end{block}
  
  \begin{exampleblock}{Használat}
    \begin{enumerate}
      \item Collection $\rightarrow$ Run
      \item Kérések sorrendje beállítása
      \item Iterations: hányszor fusson
      \item Delay: várakozás kérések között
      \item Run Collection
    \end{enumerate}
  \end{exampleblock}
  
  \begin{alertblock}{Előny}
    Teljes API tesztelése egy gombnyomással.
  \end{alertblock}
\end{frame}

\begin{frame}{Dokumentáció generálás}
  \begin{block}{Automatic documentation}
    Postman automatikusan generál dokumentációt Collection-ből.
  \end{block}
  
  \begin{exampleblock}{Lépések}
    \begin{enumerate}
      \item Collection $\rightarrow$ View Documentation
      \item Publish documentation (opcionális)
      \item Megosztás csapattal vagy publikusan
    \end{enumerate}
  \end{exampleblock}
  
  \begin{alertblock}{Előny}
    Mindig naprakész dokumentáció a Collection alapján.
  \end{alertblock}
\end{frame}

\begin{frame}{Összefoglalás - Postman}
  \begin{itemize}
    \item Postman = API fejlesztési platform
    \item HTTP kérések küldése és tesztelése
    \item Collection-ök: kérések csoportosítása
    \item Environment: változók különböző környezetekhez
    \item Tests: automatikus válasz ellenőrzés
    \item Pre-request Scripts: kérés előtti logika
    \item Collection Runner: teljes API tesztelés
    \item Dokumentáció: automatikus generálás
  \end{itemize}
\end{frame}
